This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.21-437-gb65d3e5


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  b65d3e5f0f452e86f81d21d59b065feeb31357be (commit)
      from  34caaafd1ae38c9295325a1da491d75a92b205b0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b65d3e5f0f452e86f81d21d59b065feeb31357be

commit b65d3e5f0f452e86f81d21d59b065feeb31357be
Author: Nathan Lynch <nathan_lynch@codesourcery.com>
Date:   Thu Jun 4 21:10:43 2015 +0000

    ARM: VDSO support
    
    Beginning with the upcoming 4.1 release, Linux on a subset of 32-bit
    ARM hardware will provide fast user-space implementations of the
    following system calls:
    
    - gettimeofday
    - clock_gettime
    
    The kernel implementation depends on the ARMv7 Generic Timers
    Extension to accelerate these system calls.  So CPUs such as
    Cortex-A15 and -A7 benefit, while Cortex-A9, -A8, and pre-v7 CPUs do
    not.  On systems where the VDSO does not provide any speedup, the
    kernel prevents the relevant symbol lookups from succeeding.
    
    On OMAP5 (Cortex-A15) gettimeofday latency decreases from ~350ns to
    ~120ns.  On BeagleBone Black (Cortex-A8) it goes from ~650ns to
    ~660ns, which to my mind is an acceptable cost.
    
    Verified that no new test failures are introduced on kernels with and
    without the VDSO.
    
    	* sysdeps/unix/sysv/linux/arm/Makefile: (sysdep_routines):
    	Include dl-vdso.
    	* sysdeps/unix/sysv/linux/arm/init-first.c: New file:
    	Use VDSO routines for gettimeofday, clock_gettime if
    	available.
    	* sysdeps/unix/sysv/linux/arm/libc-vdso.h: New file:
    	Declare VDSO symbols.
    	* sysdeps/unix/sysv/linux/arm/sysdep.h:
    	[HAVE_GETTIMEOFDAY_VSYSCALL]: Define.
    	[HAVE_CLOCK_GETTIME_VSYSCALL]: Define.
    	* sysdeps/unix/sysv/linux/arm/Versions: Add
    	__vdso_clock_gettime.

diff --git a/ChangeLog b/ChangeLog
index 89c4bcf..0d80790 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2015-06-04  Nathan Lynch  <nathan_lynch@codesourcery.com>
+
+	* sysdeps/unix/sysv/linux/arm/Makefile: (sysdep_routines):
+	Include dl-vdso.
+	* sysdeps/unix/sysv/linux/arm/init-first.c: New file:
+	Use VDSO routines for gettimeofday, clock_gettime if
+	available.
+	* sysdeps/unix/sysv/linux/arm/libc-vdso.h: New file:
+	Declare VDSO symbols.
+	* sysdeps/unix/sysv/linux/arm/sysdep.h:
+	[HAVE_GETTIMEOFDAY_VSYSCALL]: Define.
+	[HAVE_CLOCK_GETTIME_VSYSCALL]: Define.
+	* sysdeps/unix/sysv/linux/arm/Versions: Add
+	__vdso_clock_gettime.
+
 2015-06-04  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* sysdeps/unix/sysv/linux/not-cancel.h (open_not_cancel): Rewrite to
diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile
index 50410b6..270cb73 100644
--- a/sysdeps/unix/sysv/linux/arm/Makefile
+++ b/sysdeps/unix/sysv/linux/arm/Makefile
@@ -1,4 +1,5 @@
 ifeq ($(subdir),elf)
+sysdep_routines += dl-vdso
 sysdep-rtld-routines += aeabi_read_tp libc-do-syscall
 endif
 
diff --git a/sysdeps/unix/sysv/linux/arm/Versions b/sysdeps/unix/sysv/linux/arm/Versions
index a251b0f..5ff2225 100644
--- a/sysdeps/unix/sysv/linux/arm/Versions
+++ b/sysdeps/unix/sysv/linux/arm/Versions
@@ -10,5 +10,7 @@ libc {
   GLIBC_PRIVATE {
     # A copy of sigaction lives in libpthread, and needs these.
     __default_sa_restorer; __default_rt_sa_restorer;
+    # nptl/pthread_cond_timedwait.c uses INTERNAL_VSYSCALL(clock_gettime).
+    __vdso_clock_gettime;
   }
 }
diff --git a/sysdeps/unix/sysv/linux/arm/init-first.c b/sysdeps/unix/sysv/linux/arm/init-first.c
new file mode 100644
index 0000000..2fa4fb7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/init-first.c
@@ -0,0 +1,44 @@
+/* Initialization code run first thing by the ELF startup code.  Linux/ARM.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifdef SHARED
+# include <dl-vdso.h>
+# include <libc-vdso.h>
+
+int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden;
+int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
+
+static inline void
+_libc_vdso_platform_setup (void)
+{
+  PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
+
+  void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
+  PTR_MANGLE (p);
+  VDSO_SYMBOL (gettimeofday) = p;
+
+  p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
+  PTR_MANGLE (p);
+  VDSO_SYMBOL (clock_gettime) = p;
+}
+
+# define VDSO_SETUP _libc_vdso_platform_setup
+#endif
+
+#include <csu/init-first.c>
diff --git a/sysdeps/unix/sysv/linux/arm/libc-vdso.h b/sysdeps/unix/sysv/linux/arm/libc-vdso.h
new file mode 100644
index 0000000..17baea6
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/libc-vdso.h
@@ -0,0 +1,33 @@
+/* VDSO function pointer declarations.  Linux/ARM.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBC_VDSO_H
+#define _LIBC_VDSO_H
+
+#ifdef SHARED
+
+# include <sysdep-vdso.h>
+
+extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
+   attribute_hidden;
+extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
+
+#endif
+
+#endif /* _LIBC_VDSO_H */
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
index 37eac19..200f77a 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep.h
@@ -387,6 +387,10 @@ __local_syscall_error:						\
 #undef INTERNAL_SYSCALL_ERRNO
 #define INTERNAL_SYSCALL_ERRNO(val, err)	(-(val))
 
+/* List of system calls which are supported as vsyscalls.  */
+#define HAVE_CLOCK_GETTIME_VSYSCALL	1
+#define HAVE_GETTIMEOFDAY_VSYSCALL	1
+
 #define LOAD_ARGS_0()
 #define ASM_ARGS_0
 #define LOAD_ARGS_1(a1)				\

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   15 +++++++++++++++
 sysdeps/unix/sysv/linux/arm/Makefile               |    1 +
 sysdeps/unix/sysv/linux/arm/Versions               |    2 ++
 .../unix/sysv/linux/{aarch64 => arm}/init-first.c  |   18 +++++++-----------
 .../unix/sysv/linux/{aarch64 => arm}/libc-vdso.h   |    4 ++--
 sysdeps/unix/sysv/linux/arm/sysdep.h               |    4 ++++
 6 files changed, 31 insertions(+), 13 deletions(-)
 copy sysdeps/unix/sysv/linux/{aarch64 => arm}/init-first.c (69%)
 copy sysdeps/unix/sysv/linux/{aarch64 => arm}/libc-vdso.h (88%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]