about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/x86/time.c
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-10-24 21:01:40 +0000
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-10-30 17:11:10 -0300
commitf9a7554009cf38f390e74fcabc5b49f974f72382 (patch)
treeb8e5b100ca6f2bc18ff0b134d48c9e26e83325ba /sysdeps/unix/sysv/linux/x86/time.c
parent0d563783490bf5b2d7d52cab205760fdff5d5650 (diff)
downloadglibc-f9a7554009cf38f390e74fcabc5b49f974f72382.tar.gz
glibc-f9a7554009cf38f390e74fcabc5b49f974f72382.tar.xz
glibc-f9a7554009cf38f390e74fcabc5b49f974f72382.zip
Change most internal uses of time to __clock_gettime.
As for gettimeofday, time will be implemented based on clock_gettime
on all platforms and internal code should use clock_gettime
directly.  In addition to removing a layer of indirection, this will
allow us to remove the PLT-bypass gunk for gettimeofday.

The changed code always assumes __clock_gettime (CLOCK_REALTIME)
or __clock_gettime (CLOCK_REALTIME_COARSE) (for Linux case) cannot
fail, using the same rationale for gettimeofday change.  And internal
helper was added (time_now).

Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu,
powerpc64-linux-gnu, and powerpc-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86/time.c')
-rw-r--r--sysdeps/unix/sysv/linux/x86/time.c34
1 files changed, 11 insertions, 23 deletions
diff --git a/sysdeps/unix/sysv/linux/x86/time.c b/sysdeps/unix/sysv/linux/x86/time.c
index 2e47661be3..4a03c46d21 100644
--- a/sysdeps/unix/sysv/linux/x86/time.c
+++ b/sysdeps/unix/sysv/linux/x86/time.c
@@ -17,43 +17,31 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <time.h>
+#include <sysdep.h>
 
-#ifdef SHARED
-
-#include <dl-vdso.h>
-#include <errno.h>
+#ifdef HAVE_TIME_VSYSCALL
+# define HAVE_VSYSCALL
+#endif
 #include <sysdep-vdso.h>
 
 static time_t
-__time_syscall (time_t *t)
+time_vsyscall (time_t *t)
 {
-  INTERNAL_SYSCALL_DECL (err);
-  return INTERNAL_SYSCALL (time, err, 1, t);
+  return INLINE_VSYSCALL (time, 1, t);
 }
 
-# ifndef time_type
-/* The i386 time.c includes this file with a defined time_type macro.
-   For x86_64 we have to define it to time as the internal symbol is the
-   ifunc'ed one.  */
-#  define time_type time
-# endif
+#ifdef SHARED
+# include <dl-vdso.h>
+# include <libc-vdso.h>
 
 #undef INIT_ARCH
 #define INIT_ARCH()
 /* If the vDSO is not available we fall back on the syscall.  */
-libc_ifunc_hidden (time_type, time,
-		   (get_vdso_symbol ("__vdso_time") ?: __time_syscall))
-libc_hidden_def (time)
-
+libc_ifunc (time, (get_vdso_symbol ("__vdso_time") ?: time_vsyscall))
 #else
-
-# include <sysdep.h>
-
 time_t
 time (time_t *t)
 {
-  INTERNAL_SYSCALL_DECL (err);
-  return INTERNAL_SYSCALL (time, err, 1, t);
+  return time_vsyscall (t);
 }
-
 #endif