@@ -20,10 +20,6 @@
# include <time/sys/time.h>
# ifndef _ISOMAC
-extern int __gettimeofday (struct timeval *__tv,
- struct timezone *__tz);
-libc_hidden_proto (__gettimeofday)
-libc_hidden_proto (gettimeofday)
extern int __settimezone (const struct timezone *__tz)
attribute_hidden;
extern int __adjtime (const struct timeval *__delta,
@@ -272,7 +272,6 @@ GLIBC_2.2.6 __getdelim F
GLIBC_2.2.6 __getpagesize F
GLIBC_2.2.6 __getpgid F
GLIBC_2.2.6 __getpid F
-GLIBC_2.2.6 __gettimeofday F
GLIBC_2.2.6 __gmtime_r F
GLIBC_2.2.6 __h_errno_location F
GLIBC_2.2.6 __hurd_fail F
deleted file mode 100644
@@ -1,67 +0,0 @@
-/* Copyright (C) 1991-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
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- 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/>. */
-
-#include <errno.h>
-#include <time.h>
-#include <sys/time.h>
-
-/* 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. */
-int
-__gettimeofday (struct timeval *tv, struct timezone *tz)
-{
- if (tv == NULL)
- {
- __set_errno (EINVAL);
- return -1;
- }
-
- tv->tv_sec = (long int) time ((time_t *) NULL);
- tv->tv_usec = 0L;
-
- if (tz != NULL)
- {
- const time_t timer = tv->tv_sec;
- struct tm tm;
- const struct tm *tmp;
-
- const long int save_timezone = __timezone;
- const long int save_daylight = __daylight;
- char *save_tzname[2];
- save_tzname[0] = __tzname[0];
- save_tzname[1] = __tzname[1];
-
- tmp = localtime_r (&timer, &tm);
-
- tz->tz_minuteswest = __timezone / 60;
- tz->tz_dsttime = __daylight;
-
- __timezone = save_timezone;
- __daylight = save_daylight;
- __tzname[0] = save_tzname[0];
- __tzname[1] = save_tzname[1];
-
- if (tmp == NULL)
- return -1;
- }
-
- return 0;
-}
-libc_hidden_def (__gettimeofday)
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
@@ -27,7 +27,7 @@
# n: scalar buffer length (e.g., 3rd arg to read)
# N: pointer to value/return scalar buffer length (e.g., 6th arg to recvfrom)
# p: non-NULL pointer to typed object (e.g., any non-void* arg)
-# P: optionally-NULL pointer to typed object (e.g., 2nd argument to gettimeofday)
+# P: optionally-NULL pointer to typed object (e.g., 3rd argument to sigaction)
# s: non-NULL string (e.g., 1st arg to open)
# S: optionally-NULL string (e.g., 1st arg to acct)
# v: vararg scalar (e.g., optional 3rd arg to open)
@@ -33,7 +33,6 @@ getrlimit - getrlimit i:ip __getrlimit getrlimit
getrusage - getrusage i:ip __getrusage getrusage
getsockname - getsockname i:ibN __getsockname getsockname
getsockopt - getsockopt i:iiiBN getsockopt
-gettimeofday - gettimeofday i:pP __gettimeofday gettimeofday
getuid - getuid Ei: __getuid getuid
ioctl - ioctl i:iiI __ioctl ioctl
kill - kill i:ii __kill kill
deleted file mode 100644
@@ -1,71 +0,0 @@
-/* Copyright (C) 2018-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
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- 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/>. */
-
-/* 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
-
-# define __gettimeofday __redirect___gettimeofday
-# include <sys/time.h>
-# undef __gettimeofday
-# define HAVE_VSYSCALL
-# include <dl-vdso.h>
-# 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)
-{
- return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
-}
-
-/* PREPARE_VERSION_KNOWN 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_KNOWN (linux_version, LINUX_2_6_39); \
- void *vdso_gettimeofday = \
- _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
-
-libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,
- vdso_gettimeofday ?: (void *) __gettimeofday_vsyscall)
-
-__hidden_ver1 (__gettimeofday_vsyscall, __GI___gettimeofday,
- __gettimeofday_vsyscall);
-
-#else
-
-# include <sys/time.h>
-# include <sysdep.h>
-int
-__gettimeofday (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
-}
-libc_hidden_def (__gettimeofday)
-
-#endif
-
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
@@ -19,23 +19,20 @@
#include <dl-vdso.h>
#include <libc-vdso.h>
-int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden;
int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
static inline void
_libc_vdso_platform_setup (void)
{
+ void *p;
+
#ifdef __LP64__
PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6_39);
#else
PREPARE_VERSION_KNOWN (linux_version, LINUX_4_9);
#endif
- void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
- PTR_MANGLE (p);
- VDSO_SYMBOL(gettimeofday) = p;
-
p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux_version);
PTR_MANGLE (p);
VDSO_SYMBOL(clock_gettime) = p;
@@ -22,8 +22,6 @@
#include <sysdep.h>
#include <sysdep-vdso.h>
-extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
extern int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
@@ -216,7 +216,6 @@ GLIBC_2.17 __getpagesize F
GLIBC_2.17 __getpgid F
GLIBC_2.17 __getpid F
GLIBC_2.17 __gets_chk F
-GLIBC_2.17 __gettimeofday F
GLIBC_2.17 __getwd_chk F
GLIBC_2.17 __gmtime_r F
GLIBC_2.17 __h_errno_location F
@@ -39,7 +39,6 @@ libc {
# Linux/Alpha 64-bit timeval functions.
__select; select;
adjtime; adjtimex; __adjtimex;
- __gettimeofday;
# glob interface change
glob; globfree;
similarity index 58%
rename from sysdeps/unix/sysv/linux/i386/gettimeofday.c
rename to sysdeps/unix/sysv/linux/alpha/gettimeofday.c
@@ -1,5 +1,5 @@
-/* gettimeofday - get the time. Linux/i386 version.
- Copyright (C) 2015-2019 Free Software Foundation, Inc.
+/* gettimeofday -- Get the current time of day. Linux/Alpha/tv64 version.
+ Copyright (C) 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
@@ -16,20 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#ifdef SHARED
-# define __gettimeofday __redirect___gettimeofday
-#endif
-
-#include <sys/time.h>
-
-#ifdef SHARED
-# undef __gettimeofday
-# define __gettimeofday_type __redirect___gettimeofday
-
-# undef libc_hidden_def
-# define libc_hidden_def(name) \
- __hidden_ver1 (__gettimeofday_syscall, __GI___gettimeofday, \
- __gettimeofday_syscall);
-#endif
-
-#include <sysdeps/unix/sysv/linux/x86/gettimeofday.c>
+/* We can use the generic implementation, but we have to override its
+ default symbol version. */
+#define VERSION_gettimeofday GLIBC_2.1
+#include <time/gettimeofday.c>
@@ -141,7 +141,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __ieee_get_fp_control F
@@ -1370,7 +1369,6 @@ GLIBC_2.1 __backtrace_symbols_fd F
GLIBC_2.1 __duplocale F
GLIBC_2.1 __freelocale F
GLIBC_2.1 __fxstat64 F
-GLIBC_2.1 __gettimeofday F
GLIBC_2.1 __isalnum_l F
GLIBC_2.1 __isalpha_l F
GLIBC_2.1 __isascii_l F
new file mode 100644
@@ -0,0 +1,66 @@
+/* gettimeofday -- Get the current time of day. Linux/Alpha/tv32 version.
+ Copyright (C) 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
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ 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/>. */
+
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <time.h>
+#include <sys/time.h>
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+
+struct timeval32
+{
+ int tv_sec, tv_usec;
+};
+
+/* Get the current time of day, putting it into *TV.
+ If *TZ is not NULL, clear it.
+ Returns 0 on success, -1 on errors. */
+
+int
+attribute_compat_text_section
+__gettimeofday_tv32 (struct timeval32 *tv32,
+ struct timezone *tz)
+{
+ if (__glibc_unlikely (tz != 0))
+ memset (tz, 0, sizeof *tz);
+
+ struct timespec ts;
+ if (__clock_gettime (CLOCK_REALTIME, &ts))
+ return -1;
+
+ if (__glibc_unlikely (ts.tv_sec > (time_t)INT_MAX))
+ {
+ /* The clock has advanced past the time representable in a 32-bit
+ time_t. Fail, but write a saturated value to the output first,
+ because callers don't typically expect gettimeofday to fail. */
+ __set_errno (EOVERFLOW);
+ tv32->tv_sec = INT_MAX;
+ tv32->tv_usec = 0;
+ return -1;
+ }
+
+ tv32->tv_sec = ts.tv_sec;
+ tv32->tv_usec = ts.tv_nsec / 1000;
+ return 0;
+}
+
+compat_symbol (libc, __gettimeofday_tv32, gettimeofday, GLIBC_2_0);
+#endif
@@ -23,7 +23,6 @@ pciconfig_write EXTRA pciconfig_write 5 pciconfig_write
pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase
# support old timeval32 entry points
-osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0
osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0
osf_setitimer - osf_setitimer 3 __setitimer_tv32 setitimer@GLIBC_2.0
osf_utimes - osf_utimes 2 __utimes_tv32 utimes@GLIBC_2.0
@@ -31,7 +30,6 @@ osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0
osf_wait4 - osf_wait4 4 __wait4_tv32 wait4@GLIBC_2.0
# support new timeval64 entry points
-gettimeofday - gettimeofday 2 __GI___gettimeofday gettimeofday@@GLIBC_2.1 __gettimeofday@@GLIBC_2.1
getitimer - getitimer 2 __getitimer getitimer@@GLIBC_2.1
setitimer - setitimer 3 __setitimer setitimer@@GLIBC_2.1
utimes - utimes 2 __utimes utimes@@GLIBC_2.1
@@ -21,17 +21,14 @@
#include <libc-vdso.h>
#include <sysdep-vdso.h>
-int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden;
int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
+ void *p;
- void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
- PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
+ PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
PTR_MANGLE (p);
@@ -22,8 +22,6 @@
#include <sysdep-vdso.h>
-extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
#endif /* _LIBC_VDSO_H */
@@ -356,7 +356,6 @@ GLIBC_2.4 __getpagesize F
GLIBC_2.4 __getpgid F
GLIBC_2.4 __getpid F
GLIBC_2.4 __gets_chk F
-GLIBC_2.4 __gettimeofday F
GLIBC_2.4 __getwd_chk F
GLIBC_2.4 __gmtime_r F
GLIBC_2.4 __gnu_Unwind_Find_exidx F
@@ -216,7 +216,6 @@ GLIBC_2.29 __getpagesize F
GLIBC_2.29 __getpgid F
GLIBC_2.29 __getpid F
GLIBC_2.29 __gets_chk F
-GLIBC_2.29 __gettimeofday F
GLIBC_2.29 __getwd_chk F
GLIBC_2.29 __gmtime_r F
GLIBC_2.29 __h_errno_location F
deleted file mode 100644
@@ -1,39 +0,0 @@
-/* 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
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- 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/>. */
-
-#include <errno.h>
-#include <sys/time.h>
-
-#undef __gettimeofday
-
-#ifdef HAVE_GETTIMEOFDAY_VSYSCALL
-# define HAVE_VSYSCALL
-#endif
-#include <sysdep-vdso.h>
-
-/* 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. */
-int
-__gettimeofday (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
-}
-libc_hidden_def (__gettimeofday)
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
@@ -271,7 +271,6 @@ GLIBC_2.2 __getmntent_r F
GLIBC_2.2 __getpagesize F
GLIBC_2.2 __getpgid F
GLIBC_2.2 __getpid F
-GLIBC_2.2 __gettimeofday F
GLIBC_2.2 __gmtime_r F
GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __isalnum_l F
@@ -139,7 +139,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -271,7 +271,6 @@ GLIBC_2.2 __getmntent_r F
GLIBC_2.2 __getpagesize F
GLIBC_2.2 __getpgid F
GLIBC_2.2 __getpid F
-GLIBC_2.2 __gettimeofday F
GLIBC_2.2 __gmtime_r F
GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __isalnum_l F
@@ -342,7 +342,6 @@ GLIBC_2.4 __getpagesize F
GLIBC_2.4 __getpgid F
GLIBC_2.4 __getpid F
GLIBC_2.4 __gets_chk F
-GLIBC_2.4 __gettimeofday F
GLIBC_2.4 __getwd_chk F
GLIBC_2.4 __gmtime_r F
GLIBC_2.4 __h_errno_location F
@@ -139,7 +139,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -217,7 +217,6 @@ GLIBC_2.18 __getpagesize F
GLIBC_2.18 __getpgid F
GLIBC_2.18 __getpid F
GLIBC_2.18 __gets_chk F
-GLIBC_2.18 __gettimeofday F
GLIBC_2.18 __getwd_chk F
GLIBC_2.18 __gmtime_r F
GLIBC_2.18 __h_errno_location F
@@ -20,17 +20,14 @@
#include <dl-vdso.h>
#include <libc-vdso.h>
-int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden;
int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
+ void *p;
- void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
- PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
+ PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
PTR_MANGLE (p);
@@ -22,8 +22,6 @@
#include <sysdep-vdso.h>
-extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
#endif /* _LIBC_VDSO_H */
@@ -138,7 +138,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -138,7 +138,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -138,7 +138,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -138,7 +138,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -242,7 +242,6 @@ GLIBC_2.21 __getpagesize F
GLIBC_2.21 __getpgid F
GLIBC_2.21 __getpid F
GLIBC_2.21 __gets_chk F
-GLIBC_2.21 __gettimeofday F
GLIBC_2.21 __getwd_chk F
GLIBC_2.21 __gmtime_r F
GLIBC_2.21 __gtdf2 F
deleted file mode 100644
@@ -1,85 +0,0 @@
-/* Copyright (C) 2005-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
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- 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/>. */
-
-#if defined SHARED && !defined __powerpc64__
-# define __gettimeofday __redirect___gettimeofday
-#else
-# define __redirect___gettimeofday __gettimeofday
-#endif
-
-#include <sys/time.h>
-
-#ifdef SHARED
-
-# include <dl-vdso.h>
-# include <libc-vdso.h>
-# include <dl-machine.h>
-
-# ifndef __powerpc64__
-# undef __gettimeofday
-
-int
-__gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
-}
-
-/* __GI___gettimeofday is defined as hidden and for ppc32 it enables the
- compiler make a local call (symbol@local) for internal GLIBC usage. It
- means the PLT won't be used and the ifunc resolver will be called directly.
- For ppc64 a call to a function in another translation unit might use a
- different toc pointer thus disallowing direct branchess and making internal
- ifuncs calls safe. */
-# undef libc_hidden_def
-# define libc_hidden_def(name) \
- __hidden_ver1 (__gettimeofday_vsyscall, __GI___gettimeofday, \
- __gettimeofday_vsyscall);
-
-# endif /* !__powerpc64__ */
-
-static int
-__gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
-}
-
-# define INIT_ARCH() \
- PREPARE_VERSION_KNOWN (linux2615, LINUX_2_6_15); \
- void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
-
-/* If the vDSO is not available we fall back syscall. */
-libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,
- vdso_gettimeofday
- ? VDSO_IFUNC_RET (vdso_gettimeofday)
- : (void *) __gettimeofday_syscall);
-libc_hidden_def (__gettimeofday)
-
-#else
-
-# include <sysdep.h>
-# include <errno.h>
-
-int
-__gettimeofday (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
-}
-libc_hidden_def (__gettimeofday)
-
-#endif
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
@@ -19,8 +19,6 @@
#include <dl-vdso.h>
#include <libc-vdso.h>
-int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
unsigned long long (*VDSO_SYMBOL(get_tbfreq)) (void);
@@ -36,11 +34,9 @@ void *VDSO_SYMBOL(sigtramp_rt32);
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux2615, LINUX_2_6_15);
+ void *p;
- void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
- PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
+ PREPARE_VERSION_KNOWN (linux2615, LINUX_2_6_15);
p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2615);
PTR_MANGLE (p);
@@ -23,8 +23,6 @@
#include <sysdep.h>
#include <sysdep-vdso.h>
-extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
extern int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
extern unsigned long long (*VDSO_SYMBOL(get_tbfreq)) (void);
@@ -147,7 +147,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -147,7 +147,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -319,7 +319,6 @@ GLIBC_2.3 __getmntent_r F
GLIBC_2.3 __getpagesize F
GLIBC_2.3 __getpgid F
GLIBC_2.3 __getpid F
-GLIBC_2.3 __gettimeofday F
GLIBC_2.3 __gmtime_r F
GLIBC_2.3 __h_errno_location F
GLIBC_2.3 __isalnum_l F
@@ -215,7 +215,6 @@ GLIBC_2.17 __getpagesize F
GLIBC_2.17 __getpgid F
GLIBC_2.17 __getpid F
GLIBC_2.17 __gets_chk F
-GLIBC_2.17 __gettimeofday F
GLIBC_2.17 __getwd_chk F
GLIBC_2.17 __gmtime_r F
GLIBC_2.17 __h_errno_location F
@@ -22,8 +22,6 @@
long int (*VDSO_SYMBOL (getcpu)) (unsigned int *, unsigned int *, void *)
attribute_hidden;
-long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *)
attribute_hidden;
long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
@@ -32,16 +30,14 @@ long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
static inline void
_libc_vdso_platform_setup (void)
{
+ void *p;
+
PREPARE_VERSION_KNOWN (linux_version, LINUX_4_15);
- void *p = _dl_vdso_vsym ("__vdso_getcpu", &linux_version);
+ p = _dl_vdso_vsym ("__vdso_getcpu", &linux_version);
PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p;
- p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
- PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
-
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version);
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
@@ -24,8 +24,6 @@
extern long int (*VDSO_SYMBOL (getcpu)) (unsigned int *, unsigned int *, void *)
attribute_hidden;
-extern long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
extern long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *)
attribute_hidden;
extern long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
@@ -218,7 +218,6 @@ GLIBC_2.27 __getpagesize F
GLIBC_2.27 __getpgid F
GLIBC_2.27 __getpid F
GLIBC_2.27 __gets_chk F
-GLIBC_2.27 __gettimeofday F
GLIBC_2.27 __getwd_chk F
GLIBC_2.27 __gmtime_r F
GLIBC_2.27 __h_errno_location F
@@ -19,9 +19,6 @@
#include <dl-vdso.h>
#include <libc-vdso.h>
-long int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
-
long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *)
__attribute__ ((nocommon));
@@ -34,11 +31,9 @@ long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *)
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux2629, LINUX_2_6_29);
+ void *p;
- void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2629);
- PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
+ PREPARE_VERSION_KNOWN (linux2629, LINUX_2_6_29);
p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2629);
PTR_MANGLE (p);
@@ -22,9 +22,6 @@
#include <sysdep-vdso.h>
-extern long int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
-
extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
extern long int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
@@ -139,7 +139,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -283,7 +283,6 @@ GLIBC_2.2 __getmntent_r F
GLIBC_2.2 __getpagesize F
GLIBC_2.2 __getpgid F
GLIBC_2.2 __getpid F
-GLIBC_2.2 __gettimeofday F
GLIBC_2.2 __gmtime_r F
GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __isalnum_l F
@@ -272,7 +272,6 @@ GLIBC_2.2 __getmntent_r F
GLIBC_2.2 __getpagesize F
GLIBC_2.2 __getpgid F
GLIBC_2.2 __getpid F
-GLIBC_2.2 __gettimeofday F
GLIBC_2.2 __gmtime_r F
GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __isalnum_l F
@@ -20,19 +20,15 @@
#include <dl-vdso.h>
#include <libc-vdso.h>
-long int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *)
attribute_hidden;
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6);
+ void *p;
- void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
- PTR_MANGLE (p);
- VDSO_SYMBOL (gettimeofday) = p;
+ PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6);
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version);
PTR_MANGLE (p);
@@ -22,8 +22,6 @@
#include <sysdep-vdso.h>
-extern long int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *)
- attribute_hidden;
extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
#endif /* _LIBC_VDSO_H */
@@ -144,7 +144,6 @@ GLIBC_2.0 __getdelim F
GLIBC_2.0 __getpagesize F
GLIBC_2.0 __getpgid F
GLIBC_2.0 __getpid F
-GLIBC_2.0 __gettimeofday F
GLIBC_2.0 __gmtime_r F
GLIBC_2.0 __h_errno_location F
GLIBC_2.0 __isinf F
@@ -310,7 +310,6 @@ GLIBC_2.2 __getmntent_r F
GLIBC_2.2 __getpagesize F
GLIBC_2.2 __getpgid F
GLIBC_2.2 __getpid F
-GLIBC_2.2 __gettimeofday F
GLIBC_2.2 __gmtime_r F
GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __isalnum_l F
deleted file mode 100644
@@ -1,61 +0,0 @@
-/* gettimeofday - get the time. Linux/x86 version.
- 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
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- 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/>. */
-
-#include <sys/time.h>
-
-#ifdef SHARED
-
-# include <dl-vdso.h>
-# include <errno.h>
-
-static int
-__gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
-}
-
-# ifndef __gettimeofday_type
-/* The i386 gettimeofday.c includes this file with a defined
- __gettimeofday_type macro. For x86_64 we have to define it to __gettimeofday
- as the internal symbol is the ifunc'ed one. */
-# define __gettimeofday_type __gettimeofday
-# endif
-
-# undef INIT_ARCH
-# define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6)
-/* If the vDSO is not available we fall back to syscall. */
-libc_ifunc_hidden (__gettimeofday_type, __gettimeofday,
- (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26)
- ?: &__gettimeofday_syscall))
-libc_hidden_def (__gettimeofday)
-
-#else
-
-# include <sysdep.h>
-# include <errno.h>
-
-int
-__gettimeofday (struct timeval *tv, struct timezone *tz)
-{
- return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
-}
-libc_hidden_def (__gettimeofday)
-
-#endif
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
@@ -270,7 +270,6 @@ GLIBC_2.2.5 __getmntent_r F
GLIBC_2.2.5 __getpagesize F
GLIBC_2.2.5 __getpgid F
GLIBC_2.2.5 __getpid F
-GLIBC_2.2.5 __gettimeofday F
GLIBC_2.2.5 __gmtime_r F
GLIBC_2.2.5 __h_errno_location F
GLIBC_2.2.5 __isalnum_l F
@@ -217,7 +217,6 @@ GLIBC_2.16 __getpagesize F
GLIBC_2.16 __getpgid F
GLIBC_2.16 __getpid F
GLIBC_2.16 __gets_chk F
-GLIBC_2.16 __gettimeofday F
GLIBC_2.16 __getwd_chk F
GLIBC_2.16 __gmtime_r F
GLIBC_2.16 __h_errno_location F
@@ -1,5 +1,4 @@
# File name Caller Syscall name # args Strong name Weak names
-gettimeofday - gettimeofday:__vdso_gettimeofday@LINUX_2.6 i:pP __gettimeofday gettimeofday
personality EXTRA personality Ei:i __personality personality
posix_fadvise64 - fadvise64 Vi:iiii posix_fadvise posix_fadvise64
@@ -7,7 +7,7 @@ libc {
__adjtimex;
# functions used in other libraries
- __gmtime_r; __gettimeofday;
+ __gmtime_r;
# variables in normal name space
daylight; timezone; tzname;
@@ -15,20 +15,30 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <errno.h>
+#include <string.h>
+#include <time.h>
#include <sys/time.h>
-/* Get the current time of day and timezone information,
- putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled.
+/* Get the current time of day, putting it into *TV.
+ If *TZ is not NULL, clear it.
Returns 0 on success, -1 on errors. */
int
__gettimeofday (struct timeval *tv, struct timezone *tz)
{
- __set_errno (ENOSYS);
- return -1;
+ if (__glibc_unlikely (tz != 0))
+ memset (tz, 0, sizeof *tz);
+
+ struct timespec ts;
+ if (__clock_gettime (CLOCK_REALTIME, &ts))
+ return -1;
+
+ TIMESPEC_TO_TIMEVAL (tv, &ts);
+ return 0;
}
-libc_hidden_def (__gettimeofday)
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
-stub_warning (gettimeofday)
+#ifdef VERSION_gettimeofday
+weak_alias (__gettimeofday, __gettimeofday_w);
+default_symbol_version (__gettimeofday_w, gettimeofday, VERSION_gettimeofday);
+#else
+weak_alias (__gettimeofday, gettimeofday)
+#endif