Make sure __vdso_clock_gettime always contains a valid pointer
authorUlrich Drepper <drepper@gmail.com>
Wed, 7 Sep 2011 04:07:08 +0000 (00:07 -0400)
committerUlrich Drepper <drepper@gmail.com>
Wed, 7 Sep 2011 04:07:08 +0000 (00:07 -0400)
ChangeLog
sysdeps/unix/sysv/linux/x86_64/init-first.c
sysdeps/unix/sysv/linux/x86_64/syscalls.list

index db4150e..3011a5a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-09-07  Ulrich Drepper  <drepper@gmail.com>
+
+       * sysdeps/unix/sysv/linux/x86_64/init-first.c
+       (_libc_vdso_platform_setup): If vDSO is not present store pointer to
+       syscall wrapper around clock_gettime in __vdso_clock_gettime.
+       * sysdeps/unix/sysv/linux/x86_64/syscalls.list: Add entry for
+       clock_gettime.
+
 2011-09-06  Ulrich Drepper  <drepper@gmail.com>
 
        * sysdeps/unix/sysv/linux/x86_64/clock_gettime.c (INTERNAL_GETTIME):
index 25cf08b..cb39aca 100644 (file)
@@ -17,6 +17,8 @@
    02111-1307 USA.  */
 
 #ifdef SHARED
+# include <time.h>
+# include <sysdep.h>
 # include <dl-vdso.h>
 # include <bits/libc-vdso.h>
 
@@ -27,12 +29,17 @@ strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden)
 long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden;
 
 
+extern long int __syscall_clock_gettime (clockid_t, struct timespec *);
+
+
 static inline void
 _libc_vdso_platform_setup (void)
 {
   PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
 
   void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
+  if (p == NULL)
+    p = __syscall_clock_gettime;
   PTR_MANGLE (p);
   __GI___vdso_clock_gettime = p;
 
index 3e231a0..ccddb84 100644 (file)
@@ -14,6 +14,7 @@ semop         -       semop           i:ipi   __semop         semop
 semtimedop     -       semtimedop      i:ipip  semtimedop
 semget         -       semget          i:iii   __semget        semget
 semctl         -       semctl          i:iiii  __semctl        semctl
+syscall_clock_gettime  EXTRA   clock_gettime   Ei:ip           __syscall_clock_gettime
 
 
 # proper socket implementations: