diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86_64/time.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/time.c | 44 |
1 files changed, 4 insertions, 40 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.c index c00b5bec0b..6ceb819d82 100644 --- a/sysdeps/unix/sysv/linux/x86_64/time.c +++ b/sysdeps/unix/sysv/linux/x86_64/time.c @@ -16,45 +16,9 @@ <http://www.gnu.org/licenses/>. */ #ifdef SHARED -/* Redefine time so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -#undef time -#define time __redirect_time -#include <time.h> - -#include <dl-vdso.h> - +/* If the vDSO is not available we fall back on the old vsyscall. */ #define VSYSCALL_ADDR_vtime 0xffffffffff600400 - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -extern __typeof (__redirect_time) __libc_time; -void *time_ifunc (void) __asm__ ("__libc_time"); - -void * -time_ifunc (void) -{ - PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); - - /* If the vDSO is not available we fall back on the old vsyscall. */ - return _dl_vdso_vsym ("__vdso_time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime; -} -__asm (".type __libc_time, %gnu_indirect_function"); - -#undef time -strong_alias (__libc_time, time) -libc_hidden_ver (__libc_time, time) - -#else - -# include <time.h> -# include <sysdep.h> - -time_t -time (time_t *t) -{ - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (time, err, 1, t); -} - +#define TIME_FALLBACK (void*)VSYSCALL_ADDR_vtime #endif + +#include <sysdeps/unix/sysv/linux/x86/time.c> |