diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/dl-vdso.h | 11 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/gettimeofday.c | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/gettimeofday.c | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/gettimeofday.c | 25 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 2 |
5 files changed, 36 insertions, 16 deletions
diff --git a/sysdeps/unix/sysv/linux/dl-vdso.h b/sysdeps/unix/sysv/linux/dl-vdso.h index c30671de72..4149bacdce 100644 --- a/sysdeps/unix/sysv/linux/dl-vdso.h +++ b/sysdeps/unix/sysv/linux/dl-vdso.h @@ -33,6 +33,17 @@ /* We don't have a specific file where the symbol can be found. */ \ var.filename = NULL +/* Use this for the known version sets defined below, where we + record their precomputed hash values only once, in this file. */ +#define PREPARE_VERSION_KNOWN(var, vname) \ + PREPARE_VERSION (var, VDSO_NAME_##vname, VDSO_HASH_##vname) + +#define VDSO_NAME_LINUX_2_6 "LINUX_2.6" +#define VDSO_HASH_LINUX_2_6 61765110 +#define VDSO_NAME_LINUX_2_6_15 "LINUX_2.6.15" +#define VDSO_HASH_LINUX_2_6_15 123718565 +#define VDSO_NAME_LINUX_2_6_29 "LINUX_2.6.29" +#define VDSO_HASH_LINUX_2_6_29 123718585 /* Functions for resolving symbols in the VDSO link map. */ extern void *_dl_vdso_vsym (const char *name, diff --git a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c index b2ef2da973..737613516f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c +++ b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. +/* Copyright (C) 2005-2012 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 @@ -22,7 +22,6 @@ #include <time.h> #include <hp-timing.h> -#undef __gettimeofday #include <bits/libc-vdso.h> /* Get the current time of day and timezone information, @@ -36,6 +35,6 @@ __gettimeofday (tv, tz) { return INLINE_VSYSCALL (gettimeofday, 2, CHECK_1 (tv), CHECK_1 (tz)); } - -INTDEF (__gettimeofday) +libc_hidden_def (__gettimeofday) weak_alias (__gettimeofday, gettimeofday) +libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/s390/gettimeofday.c b/sysdeps/unix/sysv/linux/s390/gettimeofday.c index 63faef85b6..efbf1e8110 100644 --- a/sysdeps/unix/sysv/linux/s390/gettimeofday.c +++ b/sysdeps/unix/sysv/linux/s390/gettimeofday.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2008 Free Software Foundation, Inc. +/* Copyright (C) 2008-2012 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 @@ -22,7 +22,6 @@ #include <time.h> #include <hp-timing.h> -#undef __gettimeofday #include <bits/libc-vdso.h> /* Get the current time of day and timezone information, @@ -36,6 +35,6 @@ __gettimeofday (tv, tz) { return INLINE_VSYSCALL (gettimeofday, 2, CHECK_1 (tv), CHECK_1 (tz)); } - -INTDEF (__gettimeofday) +libc_hidden_def (__gettimeofday) weak_alias (__gettimeofday, gettimeofday) +libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c index e41fddb297..d52f938e71 100644 --- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c +++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2007, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2002-2012 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 @@ -15,13 +15,14 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <dl-vdso.h> +#include <sys/time.h> +#ifdef SHARED -#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul +# include <dl-vdso.h> +# define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul -#ifdef SHARED void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday"); void * @@ -33,9 +34,16 @@ gettimeofday_ifunc (void) return (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26) ?: (void *) VSYSCALL_ADDR_vgettimeofday); } -__asm (".type __gettimeofday, %gnu_indirect_function"); +asm (".type __gettimeofday, %gnu_indirect_function"); + +/* This is doing "libc_hidden_def (__gettimeofday)" but the compiler won't + let us do it in C because it doesn't know we're defining __gettimeofday + here in this file. */ +asm (".globl __GI___gettimeofday\n" + "__GI___gettimeofday = __gettimeofday"); + #else -# include <sys/time.h> + # include <sysdep.h> # include <errno.h> @@ -44,7 +52,8 @@ __gettimeofday (struct timeval *tv, struct timezone *tz) { return INLINE_SYSCALL (gettimeofday, 2, tv, tz); } -#endif +libc_hidden_def (__gettimeofday) +#endif weak_alias (__gettimeofday, gettimeofday) -strong_alias (__gettimeofday, __gettimeofday_internal) +libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list index 7edb6fd618..2cc58af2df 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list +++ b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list @@ -1,6 +1,8 @@ # File name Caller Syscall name # args Strong name Weak names fallocate - fallocate Ci:iiii fallocate fallocate64 +gettimeofday - gettimeofday:__vdso_gettimeofday@LINUX_2.6 i:pP __gettimeofday gettimeofday posix_fadvise - fadvise64 Vi:iiii posix_fadvise posix_fadvise64 preadv - preadv Ci:ipii preadv preadv64 pwritev - pwritev Ci:ipii pwritev pwritev64 +time - time:__vdso_time@LINUX_2.6 Ei:P time |