/* time -- Get number of seconds since Epoch. Linux/x86 version.
- Copyright (C) 2015 Free Software Foundation, Inc.
+ Copyright (C) 2015-2019 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
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/>. */
+ <https://www.gnu.org/licenses/>. */
#include <time.h>
#ifdef SHARED
#include <dl-vdso.h>
+#include <errno.h>
-void *time_ifunc (void) __asm__ ("time");
-
-void *
-time_ifunc (void)
+static time_t
+__time_syscall (time_t *t)
{
- PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
-
- return _dl_vdso_vsym ("__vdso_time", &linux26) ?: TIME_FALLBACK;
+ INTERNAL_SYSCALL_DECL (err);
+ return INTERNAL_SYSCALL (time, err, 1, t);
}
-asm (".type time, %gnu_indirect_function");
-libc_ifunc_hidden_def(time)
+# 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
+
+#undef INIT_ARCH
+#define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
+/* If the vDSO is not available we fall back on the syscall. */
+libc_ifunc_hidden (time_type, time,
+ (_dl_vdso_vsym ("__vdso_time", &linux26)
+ ?: &__time_syscall))
+libc_hidden_def (time)
#else