#if __TIMESIZE == 64
# define __settimeofday64 __settimeofday
+# define __gettimeofday64 __gettimeofday
#else
extern int __settimeofday64 (const struct __timeval64 *tv,
const struct timezone *tz);
libc_hidden_proto (__settimeofday64)
+extern int __gettimeofday64 (struct __timeval64 *restrict tv,
+ void *restrict tz);
+libc_hidden_proto (__gettimeofday64)
#endif
/* Compute the `struct tm' representation of T,
# endif
weak_alias (__gettimeofday, gettimeofday)
#else /* USE_IFUNC_GETTIMEOFDAY */
-# include <time/gettimeofday.c>
+/* Conversion of gettimeofday function to support 64 bit time on archs
+ with __WORDSIZE == 32 and __TIMESIZE == 32/64 */
+#include <errno.h>
+
+int
+__gettimeofday64 (struct __timeval64 *restrict tv, void *restrict tz)
+{
+ if (__glibc_unlikely (tz != 0))
+ memset (tz, 0, sizeof (struct timezone));
+
+ struct __timespec64 ts64;
+ if (__clock_gettime64 (CLOCK_REALTIME, &ts64))
+ return -1;
+
+ *tv = timespec64_to_timeval64 (ts64);
+ return 0;
+}
+
+# if __TIMESIZE != 64
+libc_hidden_def (__gettimeofday64)
+
+int
+__gettimeofday (struct timeval *restrict tv, void *restrict tz)
+{
+ struct __timeval64 tv64;
+ if (__gettimeofday64 (&tv64, tz))
+ return -1;
+
+ if (! in_time_t_range (tv64.tv_sec))
+ {
+ __set_errno (EOVERFLOW);
+ return -1;
+ }
+
+ *tv = valid_timeval64_to_timeval (tv64);
+ return 0;
+}
+# endif
+weak_alias (__gettimeofday, gettimeofday)
#endif
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#define USE_IFUNC_GETTIMEOFDAY
+#ifdef __powerpc64__
+# define USE_IFUNC_GETTIMEOFDAY
+#endif
#include <sysdeps/unix/sysv/linux/gettimeofday.c>
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#define USE_IFUNC_GETTIMEOFDAY
+#ifdef __x86_64__
+# define USE_IFUNC_GETTIMEOFDAY
+#endif
#include <sysdeps/unix/sysv/linux/gettimeofday.c>