diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/aarch64/gettimeofday.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/gettimeofday.c | 53 |
1 files changed, 20 insertions, 33 deletions
diff --git a/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c b/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c index 8ff83e4e7d..7e772e05ce 100644 --- a/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c +++ b/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2018 Free Software Foundation, Inc. +/* Copyright (C) 2018-2019 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -14,58 +14,45 @@ 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/>. */ /* Get the current time of day and timezone information, putting it into *tv and *tz. If tz is null, *tz is not filled. Returns 0 on success, -1 on errors. */ -#ifdef SHARED +#include <time.h> +#include <sysdep.h> -# define __gettimeofday __redirect___gettimeofday -# include <sys/time.h> -# undef __gettimeofday +#ifdef HAVE_GETTIMEOFDAY_VSYSCALL # define HAVE_VSYSCALL -# include <dl-vdso.h> -# include <sysdep-vdso.h> +#endif +#include <sysdep-vdso.h> /* Used as a fallback in the ifunc resolver if VDSO is not available and for libc.so internal __gettimeofday calls. */ - static int -__gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz) +__gettimeofday_vsyscall (struct timeval *restrict tv, void *restrict tz) { + if (__glibc_unlikely (tz != 0)) + memset (tz, 0, sizeof *tz); + return INLINE_VSYSCALL (gettimeofday, 2, tv, tz); } -/* PREPARE_VERSION will need an __LP64__ ifdef when ILP32 support - goes in. See _libc_vdso_platform_setup in - sysdeps/unix/sysv/linux/aarch64/init-first.c. */ - -# undef INIT_ARCH -# define INIT_ARCH() \ - PREPARE_VERSION (linux_version, "LINUX_2.6.39", 123718537); \ - void *vdso_gettimeofday = \ - _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version); - -libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday, - vdso_gettimeofday ?: (void *) __gettimeofday_vsyscall) +#ifdef SHARED +# include <dl-vdso.h> +# include <sysdep-vdso.h> -__hidden_ver1 (__gettimeofday_vsyscall, __GI___gettimeofday, - __gettimeofday_vsyscall); +# define INIT_ARCH() +libc_ifunc (__gettimeofday, + (get_vdso_symbol (HAVE_GETTIMEOFDAY_VSYSCALL) + ?: __gettimeofday_vsyscall)) #else - -# include <sys/time.h> -# include <sysdep.h> int -__gettimeofday (struct timeval *tv, struct timezone *tz) +__gettimeofday (struct timeval *restrict tv, void *restrict tz) { - return INLINE_SYSCALL (gettimeofday, 2, tv, tz); + return __gettimeofday_vsyscall (tv, tz); } -libc_hidden_def (__gettimeofday) - #endif - weak_alias (__gettimeofday, gettimeofday) -libc_hidden_weak (gettimeofday) |