]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
sysdeps: Add clock_gettime64 vDSO
authorAlistair Francis <alistair.francis@wdc.com>
Wed, 18 Sep 2019 15:37:58 +0000 (08:37 -0700)
committerAlistair Francis <alistair.francis@wdc.com>
Wed, 4 Dec 2019 17:43:40 +0000 (09:43 -0800)
Add support for the clock_gettim64 vDSO calls. These are protected by
the HAVE_CLOCK_GETTIME64_VSYSCALL define.

HAVE_CLOCK_GETTIME64_VSYSCALL should be defined for 32-bit platforms
(WORDSIZE == 32) that only run on the 5.1 kernel or later. WORDSIZE ==
64 platforms can use #define __vdso_clock_gettime64 __vdso_clock_gettime
and use the __vdso_clock_gettime syscall as they don't have a
__vdso_clock_gettime64 call.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
sysdeps/unix/sysv/linux/init-first.c
sysdeps/unix/sysv/linux/libc-vdso.h

index d90ca820be0d11c6b9fea2c22552ce456216cc82..d005d133220159b7d2d877c2bf1f3aebea9afefe 100644 (file)
 int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
   attribute_hidden;
 #endif
+/* vDSO symbol used on clock_gettime64 implementation.  */
+#ifdef HAVE_CLOCK_GETTIME64_VSYSCALL
+int (*VDSO_SYMBOL(clock_gettime64)) (clockid_t, struct __timespec64 *)
+  attribute_hidden;
+#endif
 /* vDSO symbol used on clock_getres implementation.  */
 #ifdef HAVE_CLOCK_GETRES_VSYSCALL
 int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *)
@@ -52,6 +57,11 @@ __libc_vdso_platform_setup (void)
     = get_vdso_mangle_symbol (HAVE_CLOCK_GETTIME_VSYSCALL);
 #endif
 
+#ifdef HAVE_CLOCK_GETTIME64_VSYSCALL
+  VDSO_SYMBOL(clock_gettime64)
+    = get_vdso_mangle_symbol (HAVE_CLOCK_GETTIME64_VSYSCALL);
+#endif
+
 #ifdef HAVE_CLOCK_GETRES_VSYSCALL
   VDSO_SYMBOL(clock_getres)
     = get_vdso_mangle_symbol (HAVE_CLOCK_GETRES_VSYSCALL);
index 792ac39d85a963ffa89acdc7297f6a13573ddf74..c6d505bab398702e98ffd7797309ebcc1da96e70 100644 (file)
 extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
   attribute_hidden;
 #endif
+#ifdef HAVE_CLOCK_GETTIME64_VSYSCALL
+extern int (*VDSO_SYMBOL(clock_gettime64)) (clockid_t, struct __timespec64 *)
+  attribute_hidden;
+#endif
 #ifdef HAVE_CLOCK_GETRES_VSYSCALL
 extern int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *)
   attribute_hidden;