diff mbox series

[v3] Always define __USE_TIME_BITS64 when 64 bit time_t is used

Message ID 20240118131801.600373-1-adhemerval.zanella@linaro.org
State Superseded
Headers show
Series [v3] Always define __USE_TIME_BITS64 when 64 bit time_t is used | expand

Commit Message

Adhemerval Zanella Jan. 18, 2024, 1:18 p.m. UTC
It was raised on libc-help [1] that some Linux kernel interfaces expect
the libc to define __USE_TIME_BITS64 to indicate the time_t size for the
kABI.  Different than defined by the initial y2038 design document [2],
the __USE_TIME_BITS64 is only defined for ABIs that support more than
one time_t size (by defining the _TIME_BITS for each module).

The 64 bit time_t redirects are now enabled using a different internal
define (__USE_TIME64_REDIRECTS). There is no expected change in semantic
or code generation.

Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
arm-linux-gnueabi

[1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html
[2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
--
Changes from v2:
* Only defined __USE_TIME_BITS64 when 64 bit time_t is used. 

Changes from v1:
* Use __USE_TIME64_REDIRECTS to allow replace the current macro.
---
 io/bits/poll2.h                               |  2 +-
 io/fcntl.h                                    |  2 +-
 io/fts.h                                      |  6 ++---
 io/ftw.h                                      | 12 +++++-----
 io/sys/poll.h                                 |  2 +-
 io/sys/stat.h                                 | 16 ++++++-------
 io/utime.h                                    |  4 ++--
 misc/sys/ioctl.h                              |  2 +-
 misc/sys/select.h                             |  4 ++--
 posix/glob.h                                  |  4 ++--
 posix/sched.h                                 |  2 +-
 posix/sys/wait.h                              |  4 ++--
 resolv/netdb.h                                |  2 +-
 resource/sys/resource.h                       |  2 +-
 rt/aio.h                                      |  4 ++--
 rt/mqueue.h                                   |  2 +-
 signal/signal.h                               |  2 +-
 socket/sys/socket.h                           | 14 +++++------
 support/timespec.h                            |  2 +-
 support/xtime.h                               |  2 +-
 support/xunistd.h                             |  2 +-
 sysdeps/generic/features-time64.h             |  2 ++
 sysdeps/nptl/pthread.h                        | 18 +++++++-------
 sysdeps/pthread/semaphore.h                   |  4 ++--
 sysdeps/pthread/threads.h                     |  6 ++---
 .../unix/sysv/linux/arm/bits/struct_stat.h    |  4 ++--
 .../unix/sysv/linux/bits/socket-constants.h   |  2 +-
 sysdeps/unix/sysv/linux/bits/time.h           |  2 +-
 sysdeps/unix/sysv/linux/bits/timex.h          |  2 +-
 .../sysv/linux/bits/types/struct_msqid_ds.h   |  2 +-
 .../sysv/linux/bits/types/struct_semid_ds.h   |  2 +-
 .../sysv/linux/bits/types/struct_shmid_ds.h   |  2 +-
 .../unix/sysv/linux/csky/bits/struct_stat.h   |  4 ++--
 sysdeps/unix/sysv/linux/features-time64.h     |  9 +++++--
 .../sysv/linux/hppa/bits/socket-constants.h   |  2 +-
 .../unix/sysv/linux/hppa/bits/struct_stat.h   |  4 ++--
 .../linux/hppa/bits/types/struct_msqid_ds.h   |  2 +-
 .../linux/hppa/bits/types/struct_semid_ds.h   |  2 +-
 .../linux/hppa/bits/types/struct_shmid_ds.h   |  2 +-
 .../unix/sysv/linux/m68k/bits/struct_stat.h   |  4 ++--
 .../sysv/linux/microblaze/bits/struct_stat.h  |  6 ++---
 .../sysv/linux/mips/bits/socket-constants.h   |  2 +-
 .../unix/sysv/linux/mips/bits/struct_stat.h   |  8 +++----
 .../linux/mips/bits/types/struct_msqid_ds.h   |  2 +-
 .../linux/mips/bits/types/struct_semid_ds.h   |  2 +-
 .../linux/mips/bits/types/struct_shmid_ds.h   |  2 +-
 .../unix/sysv/linux/nios2/bits/struct_stat.h  |  4 ++--
 .../linux/powerpc/bits/socket-constants.h     |  2 +-
 .../sysv/linux/powerpc/bits/struct_stat.h     |  4 ++--
 .../powerpc/bits/types/struct_msqid_ds.h      |  2 +-
 .../powerpc/bits/types/struct_semid_ds.h      |  2 +-
 .../powerpc/bits/types/struct_shmid_ds.h      |  2 +-
 .../unix/sysv/linux/s390/bits/struct_stat.h   |  4 ++--
 sysdeps/unix/sysv/linux/sh/bits/struct_stat.h |  4 ++--
 .../sysv/linux/sparc/bits/socket-constants.h  |  2 +-
 .../unix/sysv/linux/sparc/bits/struct_stat.h  |  4 ++--
 .../linux/sparc/bits/types/struct_msqid_ds.h  |  2 +-
 .../linux/sparc/bits/types/struct_semid_ds.h  |  2 +-
 .../linux/sparc/bits/types/struct_shmid_ds.h  |  2 +-
 sysdeps/unix/sysv/linux/sys/epoll.h           |  2 +-
 sysdeps/unix/sysv/linux/sys/prctl.h           |  2 +-
 sysdeps/unix/sysv/linux/sys/timerfd.h         |  4 ++--
 sysdeps/unix/sysv/linux/sys/timex.h           |  2 +-
 .../unix/sysv/linux/x86/bits/struct_stat.h    |  4 ++--
 .../linux/x86/bits/types/struct_semid_ds.h    |  2 +-
 sysvipc/sys/msg.h                             |  2 +-
 sysvipc/sys/sem.h                             |  4 ++--
 sysvipc/sys/shm.h                             |  2 +-
 time/bits/types/struct_timespec.h             |  4 ++--
 time/bits/types/struct_timeval.h              |  2 +-
 time/bits/types/time_t.h                      |  2 +-
 time/sys/time.h                               | 10 ++++----
 time/time.h                                   | 24 +++++++++----------
 73 files changed, 149 insertions(+), 142 deletions(-)

Comments

Andreas K. Huettel Jan. 27, 2024, 1:54 p.m. UTC | #1
When rebuilding a riscv32 qemu chroot with this patch I get errors similar to

(python)
ceval.c:(.text+0x272a): undefined reference to `__pthread_cond_timedwait64'
collect2: error: ld returned 1 exit status

(gnupg)
/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_mutex_timedlock64'
/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_cond_timedwait64'
/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_rwlock_timedwrlock64'
/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_rwlock_timedrdlock64'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:740: keyboxd] Error 1

(xz-utils)
/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: ../../src/liblzma/.libs/liblzma.so: undefined reference to `/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../..>
__pthread_cond_timedwait64'
collect2: error: ld returned 1 exit status

Now, this chroot is *very* experimental, may have stale files lying around
from bootstrapping, and has significant other problems.
And I havent tried updating it for a while. But this looks related?



Am Donnerstag, 18. Januar 2024, 14:18:01 CET schrieb Adhemerval Zanella:
> It was raised on libc-help [1] that some Linux kernel interfaces expect
> the libc to define __USE_TIME_BITS64 to indicate the time_t size for the
> kABI.  Different than defined by the initial y2038 design document [2],
> the __USE_TIME_BITS64 is only defined for ABIs that support more than
> one time_t size (by defining the _TIME_BITS for each module).
> 
> The 64 bit time_t redirects are now enabled using a different internal
> define (__USE_TIME64_REDIRECTS). There is no expected change in semantic
> or code generation.
> 
> Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
> arm-linux-gnueabi
> 
> [1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html
> [2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
> --
> Changes from v2:
> * Only defined __USE_TIME_BITS64 when 64 bit time_t is used. 
> 
> Changes from v1:
> * Use __USE_TIME64_REDIRECTS to allow replace the current macro.
> ---
>  io/bits/poll2.h                               |  2 +-
>  io/fcntl.h                                    |  2 +-
>  io/fts.h                                      |  6 ++---
>  io/ftw.h                                      | 12 +++++-----
>  io/sys/poll.h                                 |  2 +-
>  io/sys/stat.h                                 | 16 ++++++-------
>  io/utime.h                                    |  4 ++--
>  misc/sys/ioctl.h                              |  2 +-
>  misc/sys/select.h                             |  4 ++--
>  posix/glob.h                                  |  4 ++--
>  posix/sched.h                                 |  2 +-
>  posix/sys/wait.h                              |  4 ++--
>  resolv/netdb.h                                |  2 +-
>  resource/sys/resource.h                       |  2 +-
>  rt/aio.h                                      |  4 ++--
>  rt/mqueue.h                                   |  2 +-
>  signal/signal.h                               |  2 +-
>  socket/sys/socket.h                           | 14 +++++------
>  support/timespec.h                            |  2 +-
>  support/xtime.h                               |  2 +-
>  support/xunistd.h                             |  2 +-
>  sysdeps/generic/features-time64.h             |  2 ++
>  sysdeps/nptl/pthread.h                        | 18 +++++++-------
>  sysdeps/pthread/semaphore.h                   |  4 ++--
>  sysdeps/pthread/threads.h                     |  6 ++---
>  .../unix/sysv/linux/arm/bits/struct_stat.h    |  4 ++--
>  .../unix/sysv/linux/bits/socket-constants.h   |  2 +-
>  sysdeps/unix/sysv/linux/bits/time.h           |  2 +-
>  sysdeps/unix/sysv/linux/bits/timex.h          |  2 +-
>  .../sysv/linux/bits/types/struct_msqid_ds.h   |  2 +-
>  .../sysv/linux/bits/types/struct_semid_ds.h   |  2 +-
>  .../sysv/linux/bits/types/struct_shmid_ds.h   |  2 +-
>  .../unix/sysv/linux/csky/bits/struct_stat.h   |  4 ++--
>  sysdeps/unix/sysv/linux/features-time64.h     |  9 +++++--
>  .../sysv/linux/hppa/bits/socket-constants.h   |  2 +-
>  .../unix/sysv/linux/hppa/bits/struct_stat.h   |  4 ++--
>  .../linux/hppa/bits/types/struct_msqid_ds.h   |  2 +-
>  .../linux/hppa/bits/types/struct_semid_ds.h   |  2 +-
>  .../linux/hppa/bits/types/struct_shmid_ds.h   |  2 +-
>  .../unix/sysv/linux/m68k/bits/struct_stat.h   |  4 ++--
>  .../sysv/linux/microblaze/bits/struct_stat.h  |  6 ++---
>  .../sysv/linux/mips/bits/socket-constants.h   |  2 +-
>  .../unix/sysv/linux/mips/bits/struct_stat.h   |  8 +++----
>  .../linux/mips/bits/types/struct_msqid_ds.h   |  2 +-
>  .../linux/mips/bits/types/struct_semid_ds.h   |  2 +-
>  .../linux/mips/bits/types/struct_shmid_ds.h   |  2 +-
>  .../unix/sysv/linux/nios2/bits/struct_stat.h  |  4 ++--
>  .../linux/powerpc/bits/socket-constants.h     |  2 +-
>  .../sysv/linux/powerpc/bits/struct_stat.h     |  4 ++--
>  .../powerpc/bits/types/struct_msqid_ds.h      |  2 +-
>  .../powerpc/bits/types/struct_semid_ds.h      |  2 +-
>  .../powerpc/bits/types/struct_shmid_ds.h      |  2 +-
>  .../unix/sysv/linux/s390/bits/struct_stat.h   |  4 ++--
>  sysdeps/unix/sysv/linux/sh/bits/struct_stat.h |  4 ++--
>  .../sysv/linux/sparc/bits/socket-constants.h  |  2 +-
>  .../unix/sysv/linux/sparc/bits/struct_stat.h  |  4 ++--
>  .../linux/sparc/bits/types/struct_msqid_ds.h  |  2 +-
>  .../linux/sparc/bits/types/struct_semid_ds.h  |  2 +-
>  .../linux/sparc/bits/types/struct_shmid_ds.h  |  2 +-
>  sysdeps/unix/sysv/linux/sys/epoll.h           |  2 +-
>  sysdeps/unix/sysv/linux/sys/prctl.h           |  2 +-
>  sysdeps/unix/sysv/linux/sys/timerfd.h         |  4 ++--
>  sysdeps/unix/sysv/linux/sys/timex.h           |  2 +-
>  .../unix/sysv/linux/x86/bits/struct_stat.h    |  4 ++--
>  .../linux/x86/bits/types/struct_semid_ds.h    |  2 +-
>  sysvipc/sys/msg.h                             |  2 +-
>  sysvipc/sys/sem.h                             |  4 ++--
>  sysvipc/sys/shm.h                             |  2 +-
>  time/bits/types/struct_timespec.h             |  4 ++--
>  time/bits/types/struct_timeval.h              |  2 +-
>  time/bits/types/time_t.h                      |  2 +-
>  time/sys/time.h                               | 10 ++++----
>  time/time.h                                   | 24 +++++++++----------
>  73 files changed, 149 insertions(+), 142 deletions(-)
> 
> diff --git a/io/bits/poll2.h b/io/bits/poll2.h
> index 6152a8c5e4..efc8b85403 100644
> --- a/io/bits/poll2.h
> +++ b/io/bits/poll2.h
> @@ -43,7 +43,7 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
>  
>  
>  #ifdef __USE_GNU
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
>  				       const struct timespec *__timeout,
>  				       const __sigset_t *__ss), __ppoll64);
> diff --git a/io/fcntl.h b/io/fcntl.h
> index 9cee0b5900..0a493d1dd3 100644
> --- a/io/fcntl.h
> +++ b/io/fcntl.h
> @@ -172,7 +172,7 @@ typedef __pid_t pid_t;
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  # ifndef __USE_FILE_OFFSET64
>  extern int fcntl (int __fd, int __cmd, ...);
>  # else
> diff --git a/io/fts.h b/io/fts.h
> index 61f95bb441..97a031ebbd 100644
> --- a/io/fts.h
> +++ b/io/fts.h
> @@ -187,7 +187,7 @@ FTSENT	*fts_read (FTS *);
>  int	 fts_set (FTS *, FTSENT *, int) __THROW;
>  #else
>  # ifdef __REDIRECT
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  FTSENT	*__REDIRECT (fts_children, (FTS *, int), fts64_children);
>  int	 __REDIRECT (fts_close, (FTS *), fts64_close);
>  FTS	*__REDIRECT (fts_open, (char * const *, int,
> @@ -206,7 +206,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
>  			 __fts64_set_time64);
>  #  endif
>  # else
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  #   define fts_children fts64_children
>  #   define fts_close fts64_close
>  #   define fts_open fts64_open
> @@ -217,7 +217,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
>  # endif
>  #endif
>  #ifdef __USE_LARGEFILE64
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  FTSENT64 *fts64_children (FTS64 *, int);
>  int	  fts64_close (FTS64 *);
>  FTS64	 *fts64_open (char * const *, int,
> diff --git a/io/ftw.h b/io/ftw.h
> index e4d1b84d53..39cf595b27 100644
> --- a/io/ftw.h
> +++ b/io/ftw.h
> @@ -137,7 +137,7 @@ extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
>       __nonnull ((1, 2));
>  #else
>  # ifdef __REDIRECT
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>  			     int __descriptors), ftw64) __nonnull ((1, 2));
>  #  else
> @@ -146,7 +146,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>       __nonnull ((1, 2));
>  #  endif
>  # else
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  #   define ftw ftw64
>  #  else
>  #   define ftw __ftw64_time64
> @@ -154,7 +154,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>  # endif
>  #endif
>  #ifdef __USE_LARGEFILE64
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int ftw64 (const char *__dir, __ftw64_func_t __func,
>  		  int __descriptors) __nonnull ((1, 2));
>  # else
> @@ -180,7 +180,7 @@ extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
>  		 int __flag) __nonnull ((1, 2));
>  # else
>  #  ifdef __REDIRECT
> -#   ifndef __USE_TIME_BITS64
> +#   ifndef __USE_TIME64_REDIRECTS
>  extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>  			      int __descriptors, int __flag), nftw64)
>       __nonnull ((1, 2));
> @@ -190,7 +190,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>       __nonnull ((1, 2));
>  #   endif
>  #  else
> -#   ifndef __USE_TIME_BITS64
> +#   ifndef __USE_TIME64_REDIRECTS
>  #    define nftw nftw64
>  #   else
>  #    define nftw __nftw64_time64
> @@ -198,7 +198,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>  #  endif
>  # endif
>  # ifdef __USE_LARGEFILE64
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int nftw64 (const char *__dir, __nftw64_func_t __func,
>  		   int __descriptors, int __flag) __nonnull ((1, 2));
>  #  else
> diff --git a/io/sys/poll.h b/io/sys/poll.h
> index 7858fad6b9..c324ff5dad 100644
> --- a/io/sys/poll.h
> +++ b/io/sys/poll.h
> @@ -66,7 +66,7 @@ extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
>  		  const __sigset_t *__ss)
>      __fortified_attr_access (__write_only__, 1, 2);
>  
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  ifdef __REDIRECT
>  extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
>                                 const struct timespec *__timeout,
> diff --git a/io/sys/stat.h b/io/sys/stat.h
> index 1fa6d6e62e..3b4ba80132 100644
> --- a/io/sys/stat.h
> +++ b/io/sys/stat.h
> @@ -209,7 +209,7 @@ extern int stat (const char *__restrict __file,
>     that file descriptor FD is open on and put them in BUF.  */
>  extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
>  #else
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  ifdef __REDIRECT_NTH
>  extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
>  				  struct stat *__restrict __buf),
> @@ -236,7 +236,7 @@ extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
>  # endif
>  #endif
>  #ifdef __USE_LARGEFILE64
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int stat64 (const char *__restrict __file,
>  		   struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
>  extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
> @@ -265,7 +265,7 @@ extern int fstatat (int __fd, const char *__restrict __file,
>  		    struct stat *__restrict __buf, int __flag)
>       __THROW __nonnull ((2, 3));
>  # else
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   ifdef __REDIRECT_NTH
>  extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
>  				     struct stat *__restrict __buf,
> @@ -287,7 +287,7 @@ extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
>  # endif
>  
>  # ifdef __USE_LARGEFILE64
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int fstatat64 (int __fd, const char *__restrict __file,
>  		      struct stat64 *__restrict __buf, int __flag)
>       __THROW __nonnull ((2, 3));
> @@ -313,7 +313,7 @@ extern int __REDIRECT_NTH (fstatat64, (int __fd,
>  extern int lstat (const char *__restrict __file,
>  		  struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
>  # else
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   ifdef __REDIRECT_NTH
>  extern int __REDIRECT_NTH (lstat,
>  			   (const char *__restrict __file,
> @@ -334,7 +334,7 @@ extern int __REDIRECT_NTH (lstat,
>  #  endif
>  # endif
>  # ifdef __USE_LARGEFILE64
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int lstat64 (const char *__restrict __file,
>  		    struct stat64 *__restrict __buf)
>       __THROW __nonnull ((1, 2));
> @@ -427,7 +427,7 @@ extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
>  #endif
>  
>  #ifdef __USE_ATFILE
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Set file access and modification times relative to directory file
>     descriptor.  */
>  extern int utimensat (int __fd, const char *__path,
> @@ -447,7 +447,7 @@ extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
>  #endif
>  
>  #ifdef __USE_XOPEN2K8
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Set file access and modification times of the file associated with FD.  */
>  extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
>  
> diff --git a/io/utime.h b/io/utime.h
> index c5eacedd6a..1c7587d9c1 100644
> --- a/io/utime.h
> +++ b/io/utime.h
> @@ -35,7 +35,7 @@ __BEGIN_DECLS
>  /* Structure describing file times.  */
>  struct utimbuf
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>      __time64_t actime;		/* Access time.  */
>      __time64_t modtime;		/* Modification time.  */
>  #else
> @@ -46,7 +46,7 @@ struct utimbuf
>  
>  /* Set the access and modification times of FILE to those given in
>     *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int utime (const char *__file,
>  		  const struct utimbuf *__file_times)
>       __THROW __nonnull ((1));
> diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
> index 3f2338ddd3..ea6583e122 100644
> --- a/misc/sys/ioctl.h
> +++ b/misc/sys/ioctl.h
> @@ -38,7 +38,7 @@ __BEGIN_DECLS
>  /* Perform the I/O control operation specified by REQUEST on FD.
>     One argument may follow; its presence and type depend on REQUEST.
>     Return value depends on REQUEST.  Usually -1 indicates error.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
>  #else
>  # ifdef __REDIRECT
> diff --git a/misc/sys/select.h b/misc/sys/select.h
> index e6a0c1b8b2..2e45e94bc1 100644
> --- a/misc/sys/select.h
> +++ b/misc/sys/select.h
> @@ -98,7 +98,7 @@ __BEGIN_DECLS
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int select (int __nfds, fd_set *__restrict __readfds,
>  		   fd_set *__restrict __writefds,
>  		   fd_set *__restrict __exceptfds,
> @@ -123,7 +123,7 @@ extern int __REDIRECT (select,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int pselect (int __nfds, fd_set *__restrict __readfds,
>  		    fd_set *__restrict __writefds,
>  		    fd_set *__restrict __exceptfds,
> diff --git a/posix/glob.h b/posix/glob.h
> index 3406662840..b6bba0fbcd 100644
> --- a/posix/glob.h
> +++ b/posix/glob.h
> @@ -150,7 +150,7 @@ extern int glob (const char *__restrict __pattern, int __flags,
>  /* Free storage allocated in PGLOB by a previous `glob' call.  */
>  extern void globfree (glob_t *__pglob) __THROW;
>  #else
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
>  				    int __flags,
>  				    int (*__errfunc) (const char *, int),
> @@ -170,7 +170,7 @@ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
>  #endif
>  
>  #ifdef __USE_LARGEFILE64
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
>  				      int __flags,
>  				      int (*__errfunc) (const char *, int),
> diff --git a/posix/sched.h b/posix/sched.h
> index 3eac206f35..49f504a488 100644
> --- a/posix/sched.h
> +++ b/posix/sched.h
> @@ -74,7 +74,7 @@ extern int sched_get_priority_max (int __algorithm) __THROW;
>  extern int sched_get_priority_min (int __algorithm) __THROW;
>  
>  /* Get the SCHED_RR interval for the named process.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
>  #else
>  # ifdef __REDIRECT_NTH
> diff --git a/posix/sys/wait.h b/posix/sys/wait.h
> index edbb7b4392..1f44ee1145 100644
> --- a/posix/sys/wait.h
> +++ b/posix/sys/wait.h
> @@ -139,7 +139,7 @@ struct rusage;
>     nil, store information about the child's resource usage there.  If the
>     WUNTRACED bit is set in OPTIONS, return status for stopped children;
>     otherwise don't.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern __pid_t wait3 (int *__stat_loc, int __options,
>  		      struct rusage * __usage) __THROWNL;
>  # else
> @@ -154,7 +154,7 @@ extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options,
>  #endif
>  
>  #ifdef __USE_MISC
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* PID is like waitpid.  Other args are like wait3.  */
>  extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options,
>  		      struct rusage *__usage) __THROWNL;
> diff --git a/resolv/netdb.h b/resolv/netdb.h
> index 14228b0d95..b7f473fafe 100644
> --- a/resolv/netdb.h
> +++ b/resolv/netdb.h
> @@ -701,7 +701,7 @@ extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
>  extern int gai_suspend (const struct gaicb *const __list[], int __ent,
>  			const struct timespec *__timeout);
>  
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  if defined(__REDIRECT)
>  extern int __REDIRECT (gai_suspend, (const struct gaicb *const __list[],
>                                       int __ent,
> diff --git a/resource/sys/resource.h b/resource/sys/resource.h
> index a5634ba715..b0bf751e92 100644
> --- a/resource/sys/resource.h
> +++ b/resource/sys/resource.h
> @@ -88,7 +88,7 @@ extern int setrlimit64 (__rlimit_resource_t __resource,
>     and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
>  extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
>  
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # if defined(__REDIRECT_NTH)
>  extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
>                                         struct rusage *__usage),
> diff --git a/rt/aio.h b/rt/aio.h
> index 37d19abf16..e71435733f 100644
> --- a/rt/aio.h
> +++ b/rt/aio.h
> @@ -193,7 +193,7 @@ extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
>  extern int __REDIRECT_NTH (aio_cancel,
>  			   (int __fildes, struct aiocb *__aiocbp),
>  			   aio_cancel64);
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  extern int __REDIRECT_NTH (aio_suspend,
>  			   (const struct aiocb *const __list[], int __nent,
>  			    const struct timespec *__restrict __timeout),
> @@ -215,7 +215,7 @@ extern int __REDIRECT_NTH (aio_fsync,
>  #  define aio_error aio_error64
>  #  define aio_return aio_return64
>  #  define aio_cancel aio_cancel64
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   define aio_suspend __aio_suspend_time64
>  #  else
>  #   define aio_suspend aio_suspend64
> diff --git a/rt/mqueue.h b/rt/mqueue.h
> index 787cc36df2..fd6fff4bb2 100644
> --- a/rt/mqueue.h
> +++ b/rt/mqueue.h
> @@ -71,7 +71,7 @@ extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
>  		    unsigned int __msg_prio) __nonnull ((2));
>  
>  #ifdef __USE_XOPEN2K
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Receive the oldest from highest priority messages in message queue
>     MQDES, stop waiting if ABS_TIMEOUT expires.  */
>  extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
> diff --git a/signal/signal.h b/signal/signal.h
> index f37499ce60..8e07b041b1 100644
> --- a/signal/signal.h
> +++ b/signal/signal.h
> @@ -269,7 +269,7 @@ extern int sigwaitinfo (const sigset_t *__restrict __set,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int sigtimedwait (const sigset_t *__restrict __set,
>  			 siginfo_t *__restrict __info,
>  			 const struct timespec *__restrict __timeout)
> diff --git a/socket/sys/socket.h b/socket/sys/socket.h
> index 366eaab845..463cf3291b 100644
> --- a/socket/sys/socket.h
> +++ b/socket/sys/socket.h
> @@ -170,7 +170,7 @@ extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
>  			int __flags);
>  #else
> @@ -191,7 +191,7 @@ extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
>  		     unsigned int __vlen, int __flags);
>  # else
> @@ -204,7 +204,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>  			 unsigned int __vlen, int __flags);
>  #   define sendmmsg __sendmmsg64
>  #  endif
> -# endif	 /* __USE_TIME_BITS64 */
> +# endif	 /* __USE_TIME64_REDIRECTS */
>  #endif /* __USE_GNU */
>  
>  /* Receive a message as described by MESSAGE from socket FD.
> @@ -212,7 +212,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
>  #else
>  # ifdef __REDIRECT
> @@ -231,7 +231,7 @@ extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags);
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
>  		     unsigned int __vlen, int __flags,
>  		     struct timespec *__tmo);
> @@ -251,7 +251,7 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
>  /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
>     into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
>     actual length.  Returns 0 on success, -1 for errors.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int getsockopt (int __fd, int __level, int __optname,
>  		       void *__restrict __optval,
>  		       socklen_t *__restrict __optlen) __THROW;
> @@ -273,7 +273,7 @@ extern int __getsockopt64 (int __fd, int __level, int __optname,
>  /* Set socket FD's option OPTNAME at protocol level LEVEL
>     to *OPTVAL (which is OPTLEN bytes long).
>     Returns 0 on success, -1 for errors.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int setsockopt (int __fd, int __level, int __optname,
>  		       const void *__optval, socklen_t __optlen) __THROW;
>  #else
> diff --git a/support/timespec.h b/support/timespec.h
> index 42f32bcc2c..5ccc7163a5 100644
> --- a/support/timespec.h
> +++ b/support/timespec.h
> @@ -35,7 +35,7 @@ make_timespec (time_t s, long int ns)
>  
>  enum { TIMESPEC_HZ = 1000000000 };
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  struct timespec timespec_add (struct timespec, struct timespec)
>    __attribute__((const));
>  struct timespec timespec_sub (struct timespec, struct timespec)
> diff --git a/support/xtime.h b/support/xtime.h
> index 5200eef2e0..9961899634 100644
> --- a/support/xtime.h
> +++ b/support/xtime.h
> @@ -30,7 +30,7 @@ __BEGIN_DECLS
>  /* The following functions call the corresponding libc functions and
>     terminate the process on error.  */
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  void xclock_gettime (clockid_t clock, struct timespec *ts);
>  void xclock_settime (clockid_t clock, const struct timespec *ts);
>  #else
> diff --git a/support/xunistd.h b/support/xunistd.h
> index b5e8c2f420..13be9a46a3 100644
> --- a/support/xunistd.h
> +++ b/support/xunistd.h
> @@ -36,7 +36,7 @@ pid_t xwaitpid (pid_t, int *status, int flags);
>  void xpipe (int[2]);
>  void xdup2 (int, int);
>  int xopen (const char *path, int flags, mode_t);
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  # ifdef __USE_FILE_OFFSET64
>  void xstat (const char *path, struct stat *);
>  void xlstat (const char *path, struct stat *);
> diff --git a/sysdeps/generic/features-time64.h b/sysdeps/generic/features-time64.h
> index 4d38b8ba76..4d1c8319d4 100644
> --- a/sysdeps/generic/features-time64.h
> +++ b/sysdeps/generic/features-time64.h
> @@ -17,3 +17,5 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  /* The generic configuration only support _TIME_BITS=32.  */
> +#define __USE_TIME_BITS64       0
> +#define __USE_TIME64_REDIRECTS  0
> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
> index 1607fdf29a..3d4f4a756c 100644
> --- a/sysdeps/nptl/pthread.h
> +++ b/sysdeps/nptl/pthread.h
> @@ -223,7 +223,7 @@ extern int pthread_join (pthread_t __th, void **__thread_return);
>     the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
>  extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
>  
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Make calling thread wait for termination of the thread TH, but only
>     until TIMEOUT.  The exit status of the thread is stored in
>     *THREAD_RETURN, if THREAD_RETURN is not NULL.
> @@ -796,7 +796,7 @@ extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
>  
>  #ifdef __USE_XOPEN2K
>  /* Wait until lock becomes available, or specified time passes. */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
>  				    const struct timespec *__restrict
>  				    __abstime) __THROWNL __nonnull ((1, 2));
> @@ -813,7 +813,7 @@ extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
>  #endif
>  
>  #ifdef __USE_GNU
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
>  				    clockid_t __clockid,
>  				    const struct timespec *__restrict
> @@ -982,7 +982,7 @@ extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
>  
>  # ifdef __USE_XOPEN2K
>  /* Try to acquire read lock for RWLOCK or return after specified time.  */
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
>  				       const struct timespec *__restrict
>  				       __abstime) __THROWNL __nonnull ((1, 2));
> @@ -1000,7 +1000,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
>  # endif
>  
>  # ifdef __USE_GNU
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
>  				       clockid_t __clockid,
>  				       const struct timespec *__restrict
> @@ -1029,7 +1029,7 @@ extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
>  
>  # ifdef __USE_XOPEN2K
>  /* Try to acquire write lock for RWLOCK or return after specified time.  */
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
>  				       const struct timespec *__restrict
>  				       __abstime) __THROWNL __nonnull ((1, 2));
> @@ -1047,7 +1047,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
>  # endif
>  
>  # ifdef __USE_GNU
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
>  				       clockid_t __clockid,
>  				       const struct timespec *__restrict
> @@ -1141,7 +1141,7 @@ extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
>  				   pthread_mutex_t *__restrict __mutex,
>  				   const struct timespec *__restrict __abstime)
> @@ -1167,7 +1167,7 @@ extern int __REDIRECT (pthread_cond_timedwait,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW. */
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
>  				   pthread_mutex_t *__restrict __mutex,
>  				   __clockid_t __clock_id,
> diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
> index c75ca4ce6d..8a09633699 100644
> --- a/sysdeps/pthread/semaphore.h
> +++ b/sysdeps/pthread/semaphore.h
> @@ -59,7 +59,7 @@ extern int sem_wait (sem_t *__sem) __nonnull ((1));
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int sem_timedwait (sem_t *__restrict __sem,
>  			  const struct timespec *__restrict __abstime)
>    __nonnull ((1, 2));
> @@ -77,7 +77,7 @@ extern int __REDIRECT (sem_timedwait,
>  #endif
>  
>  #ifdef __USE_GNU
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int sem_clockwait (sem_t *__restrict __sem,
>  			  clockid_t clock,
>  			  const struct timespec *__restrict __abstime)
> diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
> index c5410b5c3a..7cade24e1f 100644
> --- a/sysdeps/pthread/threads.h
> +++ b/sysdeps/pthread/threads.h
> @@ -90,7 +90,7 @@ extern thrd_t thrd_current (void);
>     __TIME_POINT.  The current thread may resume if receives a signal.  In
>     that case, if __REMAINING is not NULL, the remaining time is stored in
>     the object pointed by it.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int thrd_sleep (const struct timespec *__time_point,
>  		       struct timespec *__remaining);
>  #else
> @@ -143,7 +143,7 @@ extern int mtx_lock (mtx_t *__mutex);
>  /* Block the current thread until the mutex pointed by __MUTEX is unlocked
>     or time pointed by __TIME_POINT is reached.  In case the mutex is unlock,
>     the current thread will not be blocked.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int mtx_timedlock (mtx_t *__restrict __mutex,
>  			  const struct timespec *__restrict __time_point);
>  #else
> @@ -194,7 +194,7 @@ extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex);
>  /* Block current thread on the condition variable until condition variable
>     pointed by __COND is signaled or time pointed by __TIME_POINT is
>     reached.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int cnd_timedwait (cnd_t *__restrict __cond,
>  			  mtx_t *__restrict __mutex,
>  			  const struct timespec *__restrict __time_point);
> diff --git a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
> index 255feaa8cb..1fc5917b8e 100644
> --- a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
> @@ -28,7 +28,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;			/* Device.  */
> @@ -89,7 +89,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
> index d997dbf594..b2102d3abf 100644
> --- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
> +++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
> @@ -64,7 +64,7 @@
>  #  define SO_TIMESTAMPNS_NEW 64
>  #  define SO_TIMESTAMPING_NEW 65
>  
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   define SO_RCVTIMEO SO_RCVTIMEO_NEW
>  #   define SO_SNDTIMEO SO_SNDTIMEO_NEW
>  #   define SO_TIMESTAMP SO_TIMESTAMP_NEW
> diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
> index b70ba58a7d..cab4057971 100644
> --- a/sysdeps/unix/sysv/linux/bits/time.h
> +++ b/sysdeps/unix/sysv/linux/bits/time.h
> @@ -77,7 +77,7 @@ __BEGIN_DECLS
>  /* Tune a POSIX clock.  */
>  extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2));
>  
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # if defined(__REDIRECT_NTH)
>  extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
>                                             struct timex *__utx),
> diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h
> index 398d8094f2..03ccde6d0a 100644
> --- a/sysdeps/unix/sysv/linux/bits/timex.h
> +++ b/sysdeps/unix/sysv/linux/bits/timex.h
> @@ -25,7 +25,7 @@
>  
>  struct timex
>  {
> -# if defined __USE_TIME_BITS64 || (__TIMESIZE == 64 && __WORDSIZE == 32)
> +# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32)
>    unsigned int modes;          /* mode selector */
>    int :32;                     /* pad */
>    long long offset;            /* time offset (usec) */
> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
> index fae50281c7..86296ca922 100644
> --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
> @@ -26,7 +26,7 @@
>     The type `struct msg' is opaque.  */
>  struct msqid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_msqid64_ds_helper.h>
>  #else
>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
> index 3c277ed1d8..2ac89b3ce4 100644
> --- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a set of semaphores.  */
>  struct semid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_semid64_ds_helper.h>
>  #else
>    struct ipc_perm sem_perm;        /* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> index 09de0b4e3a..1012ed0317 100644
> --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_shmid64_ds_helper.h>
>  #else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
> index 4b4822d6d0..47a9f0aaff 100644
> --- a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
> @@ -43,7 +43,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;		/* Device.  */
> @@ -88,7 +88,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;		/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/features-time64.h b/sysdeps/unix/sysv/linux/features-time64.h
> index dd3442c2ea..8d573cd23e 100644
> --- a/sysdeps/unix/sysv/linux/features-time64.h
> +++ b/sysdeps/unix/sysv/linux/features-time64.h
> @@ -24,9 +24,8 @@
>  # if _TIME_BITS == 64
>  #  if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
>  #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
> -#  elif __TIMESIZE == 32
> -#   define __USE_TIME_BITS64	1
>  #  endif
> +#  define __USE_TIME_BITS64	1
>  # elif _TIME_BITS == 32
>  #  if __TIMESIZE > 32
>  #   error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
> @@ -34,4 +33,10 @@
>  # else
>  #  error Invalid _TIME_BITS value (can only be 32 or 64-bit)
>  # endif
> +#elif __TIMESIZE == 64
> +# define __USE_TIME_BITS64      1
> +#endif
> +
> +#if defined __USE_TIME_BITS64 && __TIMESIZE == 32
> +# define __USE_TIME64_REDIRECTS 1
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
> index 58b523d03a..80a76a17dc 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
> @@ -54,7 +54,7 @@
>  # define SO_TIMESTAMPNS_NEW 0x4039
>  # define SO_TIMESTAMPING_NEW 0x403A
>  
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
> index 069efdbc55..67f7c110cd 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
> @@ -28,7 +28,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;			/* Device.  */
> @@ -89,7 +89,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
> index 2bc7cac06d..4995e0a4a5 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
> @@ -26,7 +26,7 @@
>     The type `struct msg' is opaque.  */
>  struct msqid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_msqid64_ds_helper.h>
>  #else
>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
> index dd8fbebcf4..df88949dc2 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a set of semaphores.  */
>  struct semid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_semid64_ds_helper.h>
>  #else
>    struct ipc_perm sem_perm;   /* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> index 58ac572b6e..cb3b0303aa 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_shmid64_ds_helper.h>
>  #else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
> index 3b1db157bc..2b662668e8 100644
> --- a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
> @@ -25,7 +25,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;			/* Device.  */
> @@ -86,7 +86,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
> index 0f4693fb1f..04686f30ec 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
> @@ -26,7 +26,7 @@
>  #ifndef __USE_FILE_OFFSET64
>  struct stat
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>          __dev_t         st_dev;     /* Device.  */
> @@ -74,7 +74,7 @@ struct stat
>   * create one ifdef to separate stats structures.  */
>  struct stat
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>          unsigned long long      st_dev;     /* Device.  */
> @@ -119,7 +119,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>  {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>          unsigned long long      st_dev;     /* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
> index c6908a2793..77ffc8b890 100644
> --- a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
> +++ b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
> @@ -54,7 +54,7 @@
>  # define SO_TIMESTAMPNS_NEW 64
>  # define SO_TIMESTAMPING_NEW 65
>  
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
> index 277ebad9b6..26682f8d4f 100644
> --- a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
> @@ -29,7 +29,7 @@
>  /* Structure describing file characteristics.  */
>  struct stat
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      unsigned long int st_dev;
> @@ -88,7 +88,7 @@ struct stat
>  # ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   include <bits/struct_stat_time64_helper.h>
>  #  else
>      unsigned long int st_dev;
> @@ -131,7 +131,7 @@ struct stat64
>  
>  struct stat
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;
> @@ -189,7 +189,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
> index 4e8bd51b0a..09c53648b7 100644
> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
> @@ -26,7 +26,7 @@
>     The type `struct msg' is opaque.  */
>  struct msqid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_msqid64_ds_helper.h>
>  #else
>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
> index d1a30e3164..0746684a7d 100644
> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a set of semaphores.  */
>  struct semid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_semid64_ds_helper.h>
>  #else
>    struct ipc_perm sem_perm;		/* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> index 8771164b57..c665af1874 100644
> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_shmid64_ds_helper.h>
>  #else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
> index 672c7c6bb8..dab466d881 100644
> --- a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
> @@ -43,7 +43,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;		/* Device.  */
> @@ -88,7 +88,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;		/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
> index 6be5055e65..0d3e095c5d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
> @@ -54,7 +54,7 @@
>  # define SO_TIMESTAMPNS_NEW 64
>  # define SO_TIMESTAMPING_NEW 65
>  
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
> index f6328399cd..20ed8dd9b8 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
> @@ -28,7 +28,7 @@
>  #if __WORDSIZE == 32
>  struct stat
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> @@ -85,7 +85,7 @@ struct stat
>  # ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   include <bits/struct_stat_time64_helper.h>
>  #  else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
> index 830629cd37..44ae08265d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
> @@ -26,7 +26,7 @@
>     The type `struct msg' is opaque.  */
>  struct msqid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_msqid64_ds_helper.h>
>  #else
>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
> index 4370257557..ccee57c28b 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a set of semaphores.  */
>  struct semid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_semid64_ds_helper.h>
>  #else
>    struct ipc_perm sem_perm;   /* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> index da1b4b3c56..58145d0a5d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_shmid64_ds_helper.h>
>  #else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> index 9911c47bb2..e5c9024fb2 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> @@ -65,7 +65,7 @@ struct stat
>  #else
>  struct stat
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> @@ -166,7 +166,7 @@ struct stat64
>  # else
>  struct stat64
>    {
> -#  ifdef __USE_TIME_BITS64
> +#  ifdef __USE_TIME64_REDIRECTS
>  #   include <bits/struct_stat_time64_helper.h>
>  #  else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
> index cbd4bc0f31..9ad0943982 100644
> --- a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
> @@ -28,7 +28,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;			/* Device.  */
> @@ -89,7 +89,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
> index 59958611c4..e7a6b684cc 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
> @@ -54,7 +54,7 @@
>  # define SO_TIMESTAMPNS_NEW 0x0042
>  # define SO_TIMESTAMPING_NEW 0x0043
>  
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
> index 4e48634edc..9ce67b289d 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
> @@ -28,7 +28,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;			/* Device.  */
> @@ -85,7 +85,7 @@ struct stat
>  #ifdef __USE_LARGEFILE64
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;			/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
> index db783c28d4..ed8d47c9b6 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
> @@ -26,7 +26,7 @@
>     The type `struct msg' is opaque.  */
>  struct msqid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_msqid64_ds_helper.h>
>  #else
>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
> index 1c8a3693db..b9e729b8b4 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a set of semaphores.  */
>  struct semid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_semid64_ds_helper.h>
>  #else
>    struct ipc_perm sem_perm;   /* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> index 35a0cc36ab..7885d2ab25 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_shmid64_ds_helper.h>
>  #else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
> index 9b51e3bd14..fc8dce45c8 100644
> --- a/sysdeps/unix/sysv/linux/sys/epoll.h
> +++ b/sysdeps/unix/sysv/linux/sys/epoll.h
> @@ -140,7 +140,7 @@ extern int epoll_pwait (int __epfd, struct epoll_event *__events,
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
>  			 int __maxevents, const struct timespec *__timeout,
>  			 const __sigset_t *__ss)
> diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h
> index b13b846261..79a9b31273 100644
> --- a/sysdeps/unix/sysv/linux/sys/prctl.h
> +++ b/sysdeps/unix/sysv/linux/sys/prctl.h
> @@ -38,7 +38,7 @@
>  __BEGIN_DECLS
>  
>  /* Control process execution.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int prctl (int __option, ...) __THROW;
>  #else
>  # ifdef __REDIRECT
> diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h
> index 19d0cbfae0..f66ece306a 100644
> --- a/sysdeps/unix/sysv/linux/sys/timerfd.h
> +++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
> @@ -47,7 +47,7 @@ extern int timerfd_settime (int __ufd, int __flags,
>  			    const struct itimerspec *__utmr,
>  			    struct itimerspec *__otmr) __THROW;
>  
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # if defined(__REDIRECT_NTH)
>  extern int __REDIRECT_NTH (timerfd_settime,
>                             (int __ufd, int __flags,
> @@ -62,7 +62,7 @@ extern int __REDIRECT_NTH (timerfd_settime,
>  /* Return the next expiration time of UFD.  */
>  extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
>  
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # if defined(__REDIRECT_NTH)
>  extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
>                                               struct itimerspec *__otmr),
> diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
> index 28ce022253..568748d767 100644
> --- a/sysdeps/unix/sysv/linux/sys/timex.h
> +++ b/sysdeps/unix/sysv/linux/sys/timex.h
> @@ -54,7 +54,7 @@ struct ntptimeval
>  
>  __BEGIN_DECLS
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1));
>  extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1));
>  
> diff --git a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
> index 21aa315d8d..b8b580fbde 100644
> --- a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
> +++ b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
> @@ -25,7 +25,7 @@
>  
>  struct stat
>    {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/struct_stat_time64_helper.h>
>  #else
>      __dev_t st_dev;		/* Device.  */
> @@ -102,7 +102,7 @@ struct stat
>  /* Note stat64 has the same shape as stat for x86-64.  */
>  struct stat64
>    {
> -# ifdef __USE_TIME_BITS64
> +# ifdef __USE_TIME64_REDIRECTS
>  #  include <bits/struct_stat_time64_helper.h>
>  # else
>      __dev_t st_dev;		/* Device.  */
> diff --git a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
> index 9f3d170b65..81867c0316 100644
> --- a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
> +++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
> @@ -23,7 +23,7 @@
>  /* Data structure describing a set of semaphores.  */
>  struct semid_ds
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  # include <bits/types/struct_semid64_ds_helper.h>
>  #else
>    struct ipc_perm sem_perm;   /* operation permission struct */
> diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
> index d0388b0522..4178ad9955 100644
> --- a/sysvipc/sys/msg.h
> +++ b/sysvipc/sys/msg.h
> @@ -58,7 +58,7 @@ struct msgbuf
>  __BEGIN_DECLS
>  
>  /* Message queue control operation.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
>  #else
>  # ifdef __REDIRECT_NTH
> diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
> index 5d9ec39296..812f1303b3 100644
> --- a/sysvipc/sys/sem.h
> +++ b/sysvipc/sys/sem.h
> @@ -48,7 +48,7 @@ struct sembuf
>  __BEGIN_DECLS
>  
>  /* Semaphore control operation.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
>  #else
>  # ifdef __REDIRECT_NTH
> @@ -68,7 +68,7 @@ extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
>  
>  #ifdef __USE_GNU
>  /* Operate on semaphore with timeout.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
>  		       const struct timespec *__timeout) __THROW;
>  # else
> diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
> index 04191656d5..496e57ef45 100644
> --- a/sysvipc/sys/shm.h
> +++ b/sysvipc/sys/shm.h
> @@ -46,7 +46,7 @@ __BEGIN_DECLS
>     facility.  The definition is found in XPG4.2.  */
>  
>  /* Shared memory control operation.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
>  #else
>  # ifdef __REDIRECT_NTH
> diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h
> index 489e81136d..1141015f27 100644
> --- a/time/bits/types/struct_timespec.h
> +++ b/time/bits/types/struct_timespec.h
> @@ -10,14 +10,14 @@
>     has nanoseconds instead of microseconds.  */
>  struct timespec
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>    __time64_t tv_sec;		/* Seconds.  */
>  #else
>    __time_t tv_sec;		/* Seconds.  */
>  #endif
>  #if __WORDSIZE == 64 \
>    || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \
> -  || (__TIMESIZE == 32 && !defined __USE_TIME_BITS64)
> +  || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS)
>    __syscall_slong_t tv_nsec;	/* Nanoseconds.  */
>  #else
>  # if __BYTE_ORDER == __BIG_ENDIAN
> diff --git a/time/bits/types/struct_timeval.h b/time/bits/types/struct_timeval.h
> index 3466137c35..0c8e88c82c 100644
> --- a/time/bits/types/struct_timeval.h
> +++ b/time/bits/types/struct_timeval.h
> @@ -7,7 +7,7 @@
>     microsecond but also has a range of years.  */
>  struct timeval
>  {
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>    __time64_t tv_sec;		/* Seconds.  */
>    __suseconds64_t tv_usec;	/* Microseconds.  */
>  #else
> diff --git a/time/bits/types/time_t.h b/time/bits/types/time_t.h
> index 84d67f6ac3..00cde92c62 100644
> --- a/time/bits/types/time_t.h
> +++ b/time/bits/types/time_t.h
> @@ -4,7 +4,7 @@
>  #include <bits/types.h>
>  
>  /* Returned by `time'.  */
> -#ifdef __USE_TIME_BITS64
> +#ifdef __USE_TIME64_REDIRECTS
>  typedef __time64_t time_t;
>  #else
>  typedef __time_t time_t;
> diff --git a/time/sys/time.h b/time/sys/time.h
> index c8708198a5..8c3d0c3022 100644
> --- a/time/sys/time.h
> +++ b/time/sys/time.h
> @@ -63,7 +63,7 @@ struct timezone
>     use localtime etc. instead.
>     This function itself is semi-obsolete;
>     most callers should use time or clock_gettime instead. */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern int gettimeofday (struct timeval *__restrict __tv,
>  			 void *__restrict __tz) __THROW __nonnull ((1));
>  #else
> @@ -77,7 +77,7 @@ extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv,
>  #endif
>  
>  #ifdef __USE_MISC
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Set the current time of day and timezone information.
>     This call is restricted to the super-user.
>     Setting the timezone in this way is obsolete, but we don't yet
> @@ -143,7 +143,7 @@ typedef enum __itimer_which __itimer_which_t;
>  typedef int __itimer_which_t;
>  #endif
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  /* Set *VALUE to the current setting of timer WHICH.
>     Return 0 on success, -1 on errors.  */
>  extern int getitimer (__itimer_which_t __which,
> @@ -184,7 +184,7 @@ extern int __REDIRECT_NTH (utimes, (const char *__file,
>  #endif
>  
>  #ifdef __USE_MISC
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Same as `utimes', but does not follow symbolic links.  */
>  extern int lutimes (const char *__file, const struct timeval __tvp[2])
>       __THROW __nonnull ((1));
> @@ -207,7 +207,7 @@ extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]),
>  #endif
>  
>  #ifdef __USE_GNU
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Change the access time of FILE relative to FD to TVP[0] and the
>     modification time of FILE to TVP[1].  If TVP is a null pointer, use
>     the current time instead.  Returns 0 on success, -1 on errors.  */
> diff --git a/time/time.h b/time/time.h
> index 1609aaeffa..3785dc608f 100644
> --- a/time/time.h
> +++ b/time/time.h
> @@ -71,7 +71,7 @@ __BEGIN_DECLS
>     The result / CLOCKS_PER_SEC is program time in seconds.  */
>  extern clock_t clock (void) __THROW;
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  /* Return the current time and put it in *TIMER if TIMER is not NULL.  */
>  extern time_t time (time_t *__timer) __THROW;
>  
> @@ -127,7 +127,7 @@ extern char *strptime_l (const char *__restrict __s,
>  #endif
>  
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  /* Return the `struct tm' representation of *TIMER
>     in Universal Coordinated Time (aka Greenwich Mean Time).  */
>  extern struct tm *gmtime (const time_t *__timer) __THROW;
> @@ -149,7 +149,7 @@ extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer),
>  
>  
>  #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Return the `struct tm' representation of *TIMER in UTC,
>     using *TP to store the result.  */
>  extern struct tm *gmtime_r (const time_t *__restrict __timer,
> @@ -180,7 +180,7 @@ extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t,
>  extern char *asctime (const struct tm *__tp) __THROW;
>  
>  /* Equivalent to `asctime (localtime (timer))'.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern char *ctime (const time_t *__timer) __THROW;
>  #else
>  # ifdef __REDIRECT_NTH
> @@ -199,7 +199,7 @@ extern char *asctime_r (const struct tm *__restrict __tp,
>  			char *__restrict __buf) __THROW;
>  
>  /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  extern char *ctime_r (const time_t *__restrict __timer,
>  		      char *__restrict __buf) __THROW;
>  #else
> @@ -242,7 +242,7 @@ extern long int timezone;
>  
>  
>  #if defined __USE_MISC || __GLIBC_USE (ISOC2X)
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Like `mktime', but for TP represents Universal Time, not local time.  */
>  extern time_t timegm (struct tm *__tp) __THROW;
>  # else
> @@ -259,7 +259,7 @@ extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
>  /* Miscellaneous functions many Unices inherited from the public domain
>     localtime package.  These are included only for compatibility.  */
>  
> -#ifndef __USE_TIME_BITS64
> +#ifndef __USE_TIME64_REDIRECTS
>  /* Another name for `mktime'.  */
>  extern time_t timelocal (struct tm *__tp) __THROW;
>  #else
> @@ -274,7 +274,7 @@ extern int dysize (int __year) __THROW  __attribute__ ((__const__));
>  
>  
>  #ifdef __USE_POSIX199309
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Pause execution for a number of nanoseconds.
>  
>     This function is a cancellation point and therefore not marked with
> @@ -320,7 +320,7 @@ extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
>  
>     This function is a cancellation point and therefore not marked with
>     __THROW.  */
> -#  ifndef __USE_TIME_BITS64
> +#  ifndef __USE_TIME64_REDIRECTS
>  extern int clock_nanosleep (clockid_t __clock_id, int __flags,
>  			    const struct timespec *__req,
>  			    struct timespec *__rem);
> @@ -349,7 +349,7 @@ extern int timer_create (clockid_t __clock_id,
>  extern int timer_delete (timer_t __timerid) __THROW;
>  
>  /* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  extern int timer_settime (timer_t __timerid, int __flags,
>  			  const struct itimerspec *__restrict __value,
>  			  struct itimerspec *__restrict __ovalue) __THROW;
> @@ -379,7 +379,7 @@ extern int timer_getoverrun (timer_t __timerid) __THROW;
>  
>  
>  #ifdef __USE_ISOC11
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Set TS to calendar time based in time base BASE.  */
>  extern int timespec_get (struct timespec *__ts, int __base)
>       __THROW __nonnull ((1));
> @@ -395,7 +395,7 @@ extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base),
>  
>  
>  #if __GLIBC_USE (ISOC2X)
> -# ifndef __USE_TIME_BITS64
> +# ifndef __USE_TIME64_REDIRECTS
>  /* Set TS to resolution of time base BASE.  */
>  extern int timespec_getres (struct timespec *__ts, int __base)
>       __THROW;
>
Adhemerval Zanella Jan. 29, 2024, 4:29 p.m. UTC | #2
I am not sure sure what might be happening here, riscv32 ABI does not 
export __pthread_mutex_timedlock64 nor the exported header should add
the asm alias in this case.

Rebuilding a toolchain with the patch applied I see this is the case:

$ cat test.c
#include <pthread.h>

static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t  cnd = PTHREAD_COND_INITIALIZER;

int main (int argc, char *argv[])
{
  struct timespec ts;
  clock_gettime (CLOCK_REALTIME, &ts);
  ts.tv_sec += 1;

  pthread_mutex_lock (&mtx);
  pthread_cond_timedwait (&cnd, &mtx, &ts);
  pthread_mutex_unlock (&mtx);

  return 0;
}
$ riscv32-glibc-linux-gnu-gcc -Wall test.c -o test-ilp32
$ objdump -t test-ilp32 | grep pthread_cond
000103e0       F *UND*  00000000              pthread_cond_timedwait@GLIBC_2.33
$ riscv32-glibc-linux-gnu-gcc -Wall test.c -o test-ilp32-time64 -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64
$ objdump -t test-ilp32-time64 | grep pthread_cond
000103e0       F *UND*  00000000              pthread_cond_timedwait@GLIBC_2.33

On 27/01/24 10:54, Andreas K. Huettel wrote:
> When rebuilding a riscv32 qemu chroot with this patch I get errors similar to
> 
> (python)
> ceval.c:(.text+0x272a): undefined reference to `__pthread_cond_timedwait64'
> collect2: error: ld returned 1 exit status
> 
> (gnupg)
> /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_mutex_timedlock64'
> /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_cond_timedwait64'
> /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_rwlock_timedwrlock64'
> /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_rwlock_timedrdlock64'
> collect2: error: ld returned 1 exit status
> make[2]: *** [Makefile:740: keyboxd] Error 1
> 
> (xz-utils)
> /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: ../../src/liblzma/.libs/liblzma.so: undefined reference to `/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../..>
> __pthread_cond_timedwait64'
> collect2: error: ld returned 1 exit status
> 
> Now, this chroot is *very* experimental, may have stale files lying around
> from bootstrapping, and has significant other problems.
> And I havent tried updating it for a while. But this looks related?
> 
> 
> 
> Am Donnerstag, 18. Januar 2024, 14:18:01 CET schrieb Adhemerval Zanella:
>> It was raised on libc-help [1] that some Linux kernel interfaces expect
>> the libc to define __USE_TIME_BITS64 to indicate the time_t size for the
>> kABI.  Different than defined by the initial y2038 design document [2],
>> the __USE_TIME_BITS64 is only defined for ABIs that support more than
>> one time_t size (by defining the _TIME_BITS for each module).
>>
>> The 64 bit time_t redirects are now enabled using a different internal
>> define (__USE_TIME64_REDIRECTS). There is no expected change in semantic
>> or code generation.
>>
>> Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
>> arm-linux-gnueabi
>>
>> [1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html
>> [2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
>> --
>> Changes from v2:
>> * Only defined __USE_TIME_BITS64 when 64 bit time_t is used. 
>>
>> Changes from v1:
>> * Use __USE_TIME64_REDIRECTS to allow replace the current macro.
>> ---
>>  io/bits/poll2.h                               |  2 +-
>>  io/fcntl.h                                    |  2 +-
>>  io/fts.h                                      |  6 ++---
>>  io/ftw.h                                      | 12 +++++-----
>>  io/sys/poll.h                                 |  2 +-
>>  io/sys/stat.h                                 | 16 ++++++-------
>>  io/utime.h                                    |  4 ++--
>>  misc/sys/ioctl.h                              |  2 +-
>>  misc/sys/select.h                             |  4 ++--
>>  posix/glob.h                                  |  4 ++--
>>  posix/sched.h                                 |  2 +-
>>  posix/sys/wait.h                              |  4 ++--
>>  resolv/netdb.h                                |  2 +-
>>  resource/sys/resource.h                       |  2 +-
>>  rt/aio.h                                      |  4 ++--
>>  rt/mqueue.h                                   |  2 +-
>>  signal/signal.h                               |  2 +-
>>  socket/sys/socket.h                           | 14 +++++------
>>  support/timespec.h                            |  2 +-
>>  support/xtime.h                               |  2 +-
>>  support/xunistd.h                             |  2 +-
>>  sysdeps/generic/features-time64.h             |  2 ++
>>  sysdeps/nptl/pthread.h                        | 18 +++++++-------
>>  sysdeps/pthread/semaphore.h                   |  4 ++--
>>  sysdeps/pthread/threads.h                     |  6 ++---
>>  .../unix/sysv/linux/arm/bits/struct_stat.h    |  4 ++--
>>  .../unix/sysv/linux/bits/socket-constants.h   |  2 +-
>>  sysdeps/unix/sysv/linux/bits/time.h           |  2 +-
>>  sysdeps/unix/sysv/linux/bits/timex.h          |  2 +-
>>  .../sysv/linux/bits/types/struct_msqid_ds.h   |  2 +-
>>  .../sysv/linux/bits/types/struct_semid_ds.h   |  2 +-
>>  .../sysv/linux/bits/types/struct_shmid_ds.h   |  2 +-
>>  .../unix/sysv/linux/csky/bits/struct_stat.h   |  4 ++--
>>  sysdeps/unix/sysv/linux/features-time64.h     |  9 +++++--
>>  .../sysv/linux/hppa/bits/socket-constants.h   |  2 +-
>>  .../unix/sysv/linux/hppa/bits/struct_stat.h   |  4 ++--
>>  .../linux/hppa/bits/types/struct_msqid_ds.h   |  2 +-
>>  .../linux/hppa/bits/types/struct_semid_ds.h   |  2 +-
>>  .../linux/hppa/bits/types/struct_shmid_ds.h   |  2 +-
>>  .../unix/sysv/linux/m68k/bits/struct_stat.h   |  4 ++--
>>  .../sysv/linux/microblaze/bits/struct_stat.h  |  6 ++---
>>  .../sysv/linux/mips/bits/socket-constants.h   |  2 +-
>>  .../unix/sysv/linux/mips/bits/struct_stat.h   |  8 +++----
>>  .../linux/mips/bits/types/struct_msqid_ds.h   |  2 +-
>>  .../linux/mips/bits/types/struct_semid_ds.h   |  2 +-
>>  .../linux/mips/bits/types/struct_shmid_ds.h   |  2 +-
>>  .../unix/sysv/linux/nios2/bits/struct_stat.h  |  4 ++--
>>  .../linux/powerpc/bits/socket-constants.h     |  2 +-
>>  .../sysv/linux/powerpc/bits/struct_stat.h     |  4 ++--
>>  .../powerpc/bits/types/struct_msqid_ds.h      |  2 +-
>>  .../powerpc/bits/types/struct_semid_ds.h      |  2 +-
>>  .../powerpc/bits/types/struct_shmid_ds.h      |  2 +-
>>  .../unix/sysv/linux/s390/bits/struct_stat.h   |  4 ++--
>>  sysdeps/unix/sysv/linux/sh/bits/struct_stat.h |  4 ++--
>>  .../sysv/linux/sparc/bits/socket-constants.h  |  2 +-
>>  .../unix/sysv/linux/sparc/bits/struct_stat.h  |  4 ++--
>>  .../linux/sparc/bits/types/struct_msqid_ds.h  |  2 +-
>>  .../linux/sparc/bits/types/struct_semid_ds.h  |  2 +-
>>  .../linux/sparc/bits/types/struct_shmid_ds.h  |  2 +-
>>  sysdeps/unix/sysv/linux/sys/epoll.h           |  2 +-
>>  sysdeps/unix/sysv/linux/sys/prctl.h           |  2 +-
>>  sysdeps/unix/sysv/linux/sys/timerfd.h         |  4 ++--
>>  sysdeps/unix/sysv/linux/sys/timex.h           |  2 +-
>>  .../unix/sysv/linux/x86/bits/struct_stat.h    |  4 ++--
>>  .../linux/x86/bits/types/struct_semid_ds.h    |  2 +-
>>  sysvipc/sys/msg.h                             |  2 +-
>>  sysvipc/sys/sem.h                             |  4 ++--
>>  sysvipc/sys/shm.h                             |  2 +-
>>  time/bits/types/struct_timespec.h             |  4 ++--
>>  time/bits/types/struct_timeval.h              |  2 +-
>>  time/bits/types/time_t.h                      |  2 +-
>>  time/sys/time.h                               | 10 ++++----
>>  time/time.h                                   | 24 +++++++++----------
>>  73 files changed, 149 insertions(+), 142 deletions(-)
>>
>> diff --git a/io/bits/poll2.h b/io/bits/poll2.h
>> index 6152a8c5e4..efc8b85403 100644
>> --- a/io/bits/poll2.h
>> +++ b/io/bits/poll2.h
>> @@ -43,7 +43,7 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
>>  
>>  
>>  #ifdef __USE_GNU
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
>>  				       const struct timespec *__timeout,
>>  				       const __sigset_t *__ss), __ppoll64);
>> diff --git a/io/fcntl.h b/io/fcntl.h
>> index 9cee0b5900..0a493d1dd3 100644
>> --- a/io/fcntl.h
>> +++ b/io/fcntl.h
>> @@ -172,7 +172,7 @@ typedef __pid_t pid_t;
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  # ifndef __USE_FILE_OFFSET64
>>  extern int fcntl (int __fd, int __cmd, ...);
>>  # else
>> diff --git a/io/fts.h b/io/fts.h
>> index 61f95bb441..97a031ebbd 100644
>> --- a/io/fts.h
>> +++ b/io/fts.h
>> @@ -187,7 +187,7 @@ FTSENT	*fts_read (FTS *);
>>  int	 fts_set (FTS *, FTSENT *, int) __THROW;
>>  #else
>>  # ifdef __REDIRECT
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  FTSENT	*__REDIRECT (fts_children, (FTS *, int), fts64_children);
>>  int	 __REDIRECT (fts_close, (FTS *), fts64_close);
>>  FTS	*__REDIRECT (fts_open, (char * const *, int,
>> @@ -206,7 +206,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
>>  			 __fts64_set_time64);
>>  #  endif
>>  # else
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  #   define fts_children fts64_children
>>  #   define fts_close fts64_close
>>  #   define fts_open fts64_open
>> @@ -217,7 +217,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
>>  # endif
>>  #endif
>>  #ifdef __USE_LARGEFILE64
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  FTSENT64 *fts64_children (FTS64 *, int);
>>  int	  fts64_close (FTS64 *);
>>  FTS64	 *fts64_open (char * const *, int,
>> diff --git a/io/ftw.h b/io/ftw.h
>> index e4d1b84d53..39cf595b27 100644
>> --- a/io/ftw.h
>> +++ b/io/ftw.h
>> @@ -137,7 +137,7 @@ extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
>>       __nonnull ((1, 2));
>>  #else
>>  # ifdef __REDIRECT
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>>  			     int __descriptors), ftw64) __nonnull ((1, 2));
>>  #  else
>> @@ -146,7 +146,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>>       __nonnull ((1, 2));
>>  #  endif
>>  # else
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  #   define ftw ftw64
>>  #  else
>>  #   define ftw __ftw64_time64
>> @@ -154,7 +154,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>>  # endif
>>  #endif
>>  #ifdef __USE_LARGEFILE64
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int ftw64 (const char *__dir, __ftw64_func_t __func,
>>  		  int __descriptors) __nonnull ((1, 2));
>>  # else
>> @@ -180,7 +180,7 @@ extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
>>  		 int __flag) __nonnull ((1, 2));
>>  # else
>>  #  ifdef __REDIRECT
>> -#   ifndef __USE_TIME_BITS64
>> +#   ifndef __USE_TIME64_REDIRECTS
>>  extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>>  			      int __descriptors, int __flag), nftw64)
>>       __nonnull ((1, 2));
>> @@ -190,7 +190,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>>       __nonnull ((1, 2));
>>  #   endif
>>  #  else
>> -#   ifndef __USE_TIME_BITS64
>> +#   ifndef __USE_TIME64_REDIRECTS
>>  #    define nftw nftw64
>>  #   else
>>  #    define nftw __nftw64_time64
>> @@ -198,7 +198,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>>  #  endif
>>  # endif
>>  # ifdef __USE_LARGEFILE64
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int nftw64 (const char *__dir, __nftw64_func_t __func,
>>  		   int __descriptors, int __flag) __nonnull ((1, 2));
>>  #  else
>> diff --git a/io/sys/poll.h b/io/sys/poll.h
>> index 7858fad6b9..c324ff5dad 100644
>> --- a/io/sys/poll.h
>> +++ b/io/sys/poll.h
>> @@ -66,7 +66,7 @@ extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
>>  		  const __sigset_t *__ss)
>>      __fortified_attr_access (__write_only__, 1, 2);
>>  
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  ifdef __REDIRECT
>>  extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
>>                                 const struct timespec *__timeout,
>> diff --git a/io/sys/stat.h b/io/sys/stat.h
>> index 1fa6d6e62e..3b4ba80132 100644
>> --- a/io/sys/stat.h
>> +++ b/io/sys/stat.h
>> @@ -209,7 +209,7 @@ extern int stat (const char *__restrict __file,
>>     that file descriptor FD is open on and put them in BUF.  */
>>  extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
>>  #else
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  ifdef __REDIRECT_NTH
>>  extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
>>  				  struct stat *__restrict __buf),
>> @@ -236,7 +236,7 @@ extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
>>  # endif
>>  #endif
>>  #ifdef __USE_LARGEFILE64
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int stat64 (const char *__restrict __file,
>>  		   struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
>>  extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
>> @@ -265,7 +265,7 @@ extern int fstatat (int __fd, const char *__restrict __file,
>>  		    struct stat *__restrict __buf, int __flag)
>>       __THROW __nonnull ((2, 3));
>>  # else
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   ifdef __REDIRECT_NTH
>>  extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
>>  				     struct stat *__restrict __buf,
>> @@ -287,7 +287,7 @@ extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
>>  # endif
>>  
>>  # ifdef __USE_LARGEFILE64
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int fstatat64 (int __fd, const char *__restrict __file,
>>  		      struct stat64 *__restrict __buf, int __flag)
>>       __THROW __nonnull ((2, 3));
>> @@ -313,7 +313,7 @@ extern int __REDIRECT_NTH (fstatat64, (int __fd,
>>  extern int lstat (const char *__restrict __file,
>>  		  struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
>>  # else
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   ifdef __REDIRECT_NTH
>>  extern int __REDIRECT_NTH (lstat,
>>  			   (const char *__restrict __file,
>> @@ -334,7 +334,7 @@ extern int __REDIRECT_NTH (lstat,
>>  #  endif
>>  # endif
>>  # ifdef __USE_LARGEFILE64
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int lstat64 (const char *__restrict __file,
>>  		    struct stat64 *__restrict __buf)
>>       __THROW __nonnull ((1, 2));
>> @@ -427,7 +427,7 @@ extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
>>  #endif
>>  
>>  #ifdef __USE_ATFILE
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Set file access and modification times relative to directory file
>>     descriptor.  */
>>  extern int utimensat (int __fd, const char *__path,
>> @@ -447,7 +447,7 @@ extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
>>  #endif
>>  
>>  #ifdef __USE_XOPEN2K8
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Set file access and modification times of the file associated with FD.  */
>>  extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
>>  
>> diff --git a/io/utime.h b/io/utime.h
>> index c5eacedd6a..1c7587d9c1 100644
>> --- a/io/utime.h
>> +++ b/io/utime.h
>> @@ -35,7 +35,7 @@ __BEGIN_DECLS
>>  /* Structure describing file times.  */
>>  struct utimbuf
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>      __time64_t actime;		/* Access time.  */
>>      __time64_t modtime;		/* Modification time.  */
>>  #else
>> @@ -46,7 +46,7 @@ struct utimbuf
>>  
>>  /* Set the access and modification times of FILE to those given in
>>     *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int utime (const char *__file,
>>  		  const struct utimbuf *__file_times)
>>       __THROW __nonnull ((1));
>> diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
>> index 3f2338ddd3..ea6583e122 100644
>> --- a/misc/sys/ioctl.h
>> +++ b/misc/sys/ioctl.h
>> @@ -38,7 +38,7 @@ __BEGIN_DECLS
>>  /* Perform the I/O control operation specified by REQUEST on FD.
>>     One argument may follow; its presence and type depend on REQUEST.
>>     Return value depends on REQUEST.  Usually -1 indicates error.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
>>  #else
>>  # ifdef __REDIRECT
>> diff --git a/misc/sys/select.h b/misc/sys/select.h
>> index e6a0c1b8b2..2e45e94bc1 100644
>> --- a/misc/sys/select.h
>> +++ b/misc/sys/select.h
>> @@ -98,7 +98,7 @@ __BEGIN_DECLS
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int select (int __nfds, fd_set *__restrict __readfds,
>>  		   fd_set *__restrict __writefds,
>>  		   fd_set *__restrict __exceptfds,
>> @@ -123,7 +123,7 @@ extern int __REDIRECT (select,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int pselect (int __nfds, fd_set *__restrict __readfds,
>>  		    fd_set *__restrict __writefds,
>>  		    fd_set *__restrict __exceptfds,
>> diff --git a/posix/glob.h b/posix/glob.h
>> index 3406662840..b6bba0fbcd 100644
>> --- a/posix/glob.h
>> +++ b/posix/glob.h
>> @@ -150,7 +150,7 @@ extern int glob (const char *__restrict __pattern, int __flags,
>>  /* Free storage allocated in PGLOB by a previous `glob' call.  */
>>  extern void globfree (glob_t *__pglob) __THROW;
>>  #else
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
>>  				    int __flags,
>>  				    int (*__errfunc) (const char *, int),
>> @@ -170,7 +170,7 @@ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
>>  #endif
>>  
>>  #ifdef __USE_LARGEFILE64
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
>>  				      int __flags,
>>  				      int (*__errfunc) (const char *, int),
>> diff --git a/posix/sched.h b/posix/sched.h
>> index 3eac206f35..49f504a488 100644
>> --- a/posix/sched.h
>> +++ b/posix/sched.h
>> @@ -74,7 +74,7 @@ extern int sched_get_priority_max (int __algorithm) __THROW;
>>  extern int sched_get_priority_min (int __algorithm) __THROW;
>>  
>>  /* Get the SCHED_RR interval for the named process.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
>>  #else
>>  # ifdef __REDIRECT_NTH
>> diff --git a/posix/sys/wait.h b/posix/sys/wait.h
>> index edbb7b4392..1f44ee1145 100644
>> --- a/posix/sys/wait.h
>> +++ b/posix/sys/wait.h
>> @@ -139,7 +139,7 @@ struct rusage;
>>     nil, store information about the child's resource usage there.  If the
>>     WUNTRACED bit is set in OPTIONS, return status for stopped children;
>>     otherwise don't.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern __pid_t wait3 (int *__stat_loc, int __options,
>>  		      struct rusage * __usage) __THROWNL;
>>  # else
>> @@ -154,7 +154,7 @@ extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options,
>>  #endif
>>  
>>  #ifdef __USE_MISC
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* PID is like waitpid.  Other args are like wait3.  */
>>  extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options,
>>  		      struct rusage *__usage) __THROWNL;
>> diff --git a/resolv/netdb.h b/resolv/netdb.h
>> index 14228b0d95..b7f473fafe 100644
>> --- a/resolv/netdb.h
>> +++ b/resolv/netdb.h
>> @@ -701,7 +701,7 @@ extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
>>  extern int gai_suspend (const struct gaicb *const __list[], int __ent,
>>  			const struct timespec *__timeout);
>>  
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  if defined(__REDIRECT)
>>  extern int __REDIRECT (gai_suspend, (const struct gaicb *const __list[],
>>                                       int __ent,
>> diff --git a/resource/sys/resource.h b/resource/sys/resource.h
>> index a5634ba715..b0bf751e92 100644
>> --- a/resource/sys/resource.h
>> +++ b/resource/sys/resource.h
>> @@ -88,7 +88,7 @@ extern int setrlimit64 (__rlimit_resource_t __resource,
>>     and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
>>  extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
>>  
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # if defined(__REDIRECT_NTH)
>>  extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
>>                                         struct rusage *__usage),
>> diff --git a/rt/aio.h b/rt/aio.h
>> index 37d19abf16..e71435733f 100644
>> --- a/rt/aio.h
>> +++ b/rt/aio.h
>> @@ -193,7 +193,7 @@ extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
>>  extern int __REDIRECT_NTH (aio_cancel,
>>  			   (int __fildes, struct aiocb *__aiocbp),
>>  			   aio_cancel64);
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  extern int __REDIRECT_NTH (aio_suspend,
>>  			   (const struct aiocb *const __list[], int __nent,
>>  			    const struct timespec *__restrict __timeout),
>> @@ -215,7 +215,7 @@ extern int __REDIRECT_NTH (aio_fsync,
>>  #  define aio_error aio_error64
>>  #  define aio_return aio_return64
>>  #  define aio_cancel aio_cancel64
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   define aio_suspend __aio_suspend_time64
>>  #  else
>>  #   define aio_suspend aio_suspend64
>> diff --git a/rt/mqueue.h b/rt/mqueue.h
>> index 787cc36df2..fd6fff4bb2 100644
>> --- a/rt/mqueue.h
>> +++ b/rt/mqueue.h
>> @@ -71,7 +71,7 @@ extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
>>  		    unsigned int __msg_prio) __nonnull ((2));
>>  
>>  #ifdef __USE_XOPEN2K
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Receive the oldest from highest priority messages in message queue
>>     MQDES, stop waiting if ABS_TIMEOUT expires.  */
>>  extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
>> diff --git a/signal/signal.h b/signal/signal.h
>> index f37499ce60..8e07b041b1 100644
>> --- a/signal/signal.h
>> +++ b/signal/signal.h
>> @@ -269,7 +269,7 @@ extern int sigwaitinfo (const sigset_t *__restrict __set,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int sigtimedwait (const sigset_t *__restrict __set,
>>  			 siginfo_t *__restrict __info,
>>  			 const struct timespec *__restrict __timeout)
>> diff --git a/socket/sys/socket.h b/socket/sys/socket.h
>> index 366eaab845..463cf3291b 100644
>> --- a/socket/sys/socket.h
>> +++ b/socket/sys/socket.h
>> @@ -170,7 +170,7 @@ extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
>>  			int __flags);
>>  #else
>> @@ -191,7 +191,7 @@ extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
>>  		     unsigned int __vlen, int __flags);
>>  # else
>> @@ -204,7 +204,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>>  			 unsigned int __vlen, int __flags);
>>  #   define sendmmsg __sendmmsg64
>>  #  endif
>> -# endif	 /* __USE_TIME_BITS64 */
>> +# endif	 /* __USE_TIME64_REDIRECTS */
>>  #endif /* __USE_GNU */
>>  
>>  /* Receive a message as described by MESSAGE from socket FD.
>> @@ -212,7 +212,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
>>  #else
>>  # ifdef __REDIRECT
>> @@ -231,7 +231,7 @@ extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags);
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
>>  		     unsigned int __vlen, int __flags,
>>  		     struct timespec *__tmo);
>> @@ -251,7 +251,7 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
>>  /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
>>     into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
>>     actual length.  Returns 0 on success, -1 for errors.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int getsockopt (int __fd, int __level, int __optname,
>>  		       void *__restrict __optval,
>>  		       socklen_t *__restrict __optlen) __THROW;
>> @@ -273,7 +273,7 @@ extern int __getsockopt64 (int __fd, int __level, int __optname,
>>  /* Set socket FD's option OPTNAME at protocol level LEVEL
>>     to *OPTVAL (which is OPTLEN bytes long).
>>     Returns 0 on success, -1 for errors.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int setsockopt (int __fd, int __level, int __optname,
>>  		       const void *__optval, socklen_t __optlen) __THROW;
>>  #else
>> diff --git a/support/timespec.h b/support/timespec.h
>> index 42f32bcc2c..5ccc7163a5 100644
>> --- a/support/timespec.h
>> +++ b/support/timespec.h
>> @@ -35,7 +35,7 @@ make_timespec (time_t s, long int ns)
>>  
>>  enum { TIMESPEC_HZ = 1000000000 };
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  struct timespec timespec_add (struct timespec, struct timespec)
>>    __attribute__((const));
>>  struct timespec timespec_sub (struct timespec, struct timespec)
>> diff --git a/support/xtime.h b/support/xtime.h
>> index 5200eef2e0..9961899634 100644
>> --- a/support/xtime.h
>> +++ b/support/xtime.h
>> @@ -30,7 +30,7 @@ __BEGIN_DECLS
>>  /* The following functions call the corresponding libc functions and
>>     terminate the process on error.  */
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  void xclock_gettime (clockid_t clock, struct timespec *ts);
>>  void xclock_settime (clockid_t clock, const struct timespec *ts);
>>  #else
>> diff --git a/support/xunistd.h b/support/xunistd.h
>> index b5e8c2f420..13be9a46a3 100644
>> --- a/support/xunistd.h
>> +++ b/support/xunistd.h
>> @@ -36,7 +36,7 @@ pid_t xwaitpid (pid_t, int *status, int flags);
>>  void xpipe (int[2]);
>>  void xdup2 (int, int);
>>  int xopen (const char *path, int flags, mode_t);
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  # ifdef __USE_FILE_OFFSET64
>>  void xstat (const char *path, struct stat *);
>>  void xlstat (const char *path, struct stat *);
>> diff --git a/sysdeps/generic/features-time64.h b/sysdeps/generic/features-time64.h
>> index 4d38b8ba76..4d1c8319d4 100644
>> --- a/sysdeps/generic/features-time64.h
>> +++ b/sysdeps/generic/features-time64.h
>> @@ -17,3 +17,5 @@
>>     <https://www.gnu.org/licenses/>.  */
>>  
>>  /* The generic configuration only support _TIME_BITS=32.  */
>> +#define __USE_TIME_BITS64       0
>> +#define __USE_TIME64_REDIRECTS  0
>> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
>> index 1607fdf29a..3d4f4a756c 100644
>> --- a/sysdeps/nptl/pthread.h
>> +++ b/sysdeps/nptl/pthread.h
>> @@ -223,7 +223,7 @@ extern int pthread_join (pthread_t __th, void **__thread_return);
>>     the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
>>  extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
>>  
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Make calling thread wait for termination of the thread TH, but only
>>     until TIMEOUT.  The exit status of the thread is stored in
>>     *THREAD_RETURN, if THREAD_RETURN is not NULL.
>> @@ -796,7 +796,7 @@ extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
>>  
>>  #ifdef __USE_XOPEN2K
>>  /* Wait until lock becomes available, or specified time passes. */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
>>  				    const struct timespec *__restrict
>>  				    __abstime) __THROWNL __nonnull ((1, 2));
>> @@ -813,7 +813,7 @@ extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
>>  #endif
>>  
>>  #ifdef __USE_GNU
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
>>  				    clockid_t __clockid,
>>  				    const struct timespec *__restrict
>> @@ -982,7 +982,7 @@ extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
>>  
>>  # ifdef __USE_XOPEN2K
>>  /* Try to acquire read lock for RWLOCK or return after specified time.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
>>  				       const struct timespec *__restrict
>>  				       __abstime) __THROWNL __nonnull ((1, 2));
>> @@ -1000,7 +1000,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
>>  # endif
>>  
>>  # ifdef __USE_GNU
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
>>  				       clockid_t __clockid,
>>  				       const struct timespec *__restrict
>> @@ -1029,7 +1029,7 @@ extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
>>  
>>  # ifdef __USE_XOPEN2K
>>  /* Try to acquire write lock for RWLOCK or return after specified time.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
>>  				       const struct timespec *__restrict
>>  				       __abstime) __THROWNL __nonnull ((1, 2));
>> @@ -1047,7 +1047,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
>>  # endif
>>  
>>  # ifdef __USE_GNU
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
>>  				       clockid_t __clockid,
>>  				       const struct timespec *__restrict
>> @@ -1141,7 +1141,7 @@ extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
>>  				   pthread_mutex_t *__restrict __mutex,
>>  				   const struct timespec *__restrict __abstime)
>> @@ -1167,7 +1167,7 @@ extern int __REDIRECT (pthread_cond_timedwait,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW. */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
>>  				   pthread_mutex_t *__restrict __mutex,
>>  				   __clockid_t __clock_id,
>> diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
>> index c75ca4ce6d..8a09633699 100644
>> --- a/sysdeps/pthread/semaphore.h
>> +++ b/sysdeps/pthread/semaphore.h
>> @@ -59,7 +59,7 @@ extern int sem_wait (sem_t *__sem) __nonnull ((1));
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int sem_timedwait (sem_t *__restrict __sem,
>>  			  const struct timespec *__restrict __abstime)
>>    __nonnull ((1, 2));
>> @@ -77,7 +77,7 @@ extern int __REDIRECT (sem_timedwait,
>>  #endif
>>  
>>  #ifdef __USE_GNU
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int sem_clockwait (sem_t *__restrict __sem,
>>  			  clockid_t clock,
>>  			  const struct timespec *__restrict __abstime)
>> diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
>> index c5410b5c3a..7cade24e1f 100644
>> --- a/sysdeps/pthread/threads.h
>> +++ b/sysdeps/pthread/threads.h
>> @@ -90,7 +90,7 @@ extern thrd_t thrd_current (void);
>>     __TIME_POINT.  The current thread may resume if receives a signal.  In
>>     that case, if __REMAINING is not NULL, the remaining time is stored in
>>     the object pointed by it.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int thrd_sleep (const struct timespec *__time_point,
>>  		       struct timespec *__remaining);
>>  #else
>> @@ -143,7 +143,7 @@ extern int mtx_lock (mtx_t *__mutex);
>>  /* Block the current thread until the mutex pointed by __MUTEX is unlocked
>>     or time pointed by __TIME_POINT is reached.  In case the mutex is unlock,
>>     the current thread will not be blocked.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int mtx_timedlock (mtx_t *__restrict __mutex,
>>  			  const struct timespec *__restrict __time_point);
>>  #else
>> @@ -194,7 +194,7 @@ extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex);
>>  /* Block current thread on the condition variable until condition variable
>>     pointed by __COND is signaled or time pointed by __TIME_POINT is
>>     reached.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int cnd_timedwait (cnd_t *__restrict __cond,
>>  			  mtx_t *__restrict __mutex,
>>  			  const struct timespec *__restrict __time_point);
>> diff --git a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>> index 255feaa8cb..1fc5917b8e 100644
>> --- a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -89,7 +89,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
>> index d997dbf594..b2102d3abf 100644
>> --- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
>> @@ -64,7 +64,7 @@
>>  #  define SO_TIMESTAMPNS_NEW 64
>>  #  define SO_TIMESTAMPING_NEW 65
>>  
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   define SO_RCVTIMEO SO_RCVTIMEO_NEW
>>  #   define SO_SNDTIMEO SO_SNDTIMEO_NEW
>>  #   define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
>> index b70ba58a7d..cab4057971 100644
>> --- a/sysdeps/unix/sysv/linux/bits/time.h
>> +++ b/sysdeps/unix/sysv/linux/bits/time.h
>> @@ -77,7 +77,7 @@ __BEGIN_DECLS
>>  /* Tune a POSIX clock.  */
>>  extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2));
>>  
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # if defined(__REDIRECT_NTH)
>>  extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
>>                                             struct timex *__utx),
>> diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h
>> index 398d8094f2..03ccde6d0a 100644
>> --- a/sysdeps/unix/sysv/linux/bits/timex.h
>> +++ b/sysdeps/unix/sysv/linux/bits/timex.h
>> @@ -25,7 +25,7 @@
>>  
>>  struct timex
>>  {
>> -# if defined __USE_TIME_BITS64 || (__TIMESIZE == 64 && __WORDSIZE == 32)
>> +# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32)
>>    unsigned int modes;          /* mode selector */
>>    int :32;                     /* pad */
>>    long long offset;            /* time offset (usec) */
>> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>> index fae50281c7..86296ca922 100644
>> --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>     The type `struct msg' is opaque.  */
>>  struct msqid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_msqid64_ds_helper.h>
>>  #else
>>    struct ipc_perm msg_perm;	/* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>> index 3c277ed1d8..2ac89b3ce4 100644
>> --- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a set of semaphores.  */
>>  struct semid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_semid64_ds_helper.h>
>>  #else
>>    struct ipc_perm sem_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>> index 09de0b4e3a..1012ed0317 100644
>> --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a shared memory segment.  */
>>  struct shmid_ds
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_shmid64_ds_helper.h>
>>  #else
>>      struct ipc_perm shm_perm;		/* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>> index 4b4822d6d0..47a9f0aaff 100644
>> --- a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>> @@ -43,7 +43,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;		/* Device.  */
>> @@ -88,7 +88,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;		/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/features-time64.h b/sysdeps/unix/sysv/linux/features-time64.h
>> index dd3442c2ea..8d573cd23e 100644
>> --- a/sysdeps/unix/sysv/linux/features-time64.h
>> +++ b/sysdeps/unix/sysv/linux/features-time64.h
>> @@ -24,9 +24,8 @@
>>  # if _TIME_BITS == 64
>>  #  if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
>>  #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
>> -#  elif __TIMESIZE == 32
>> -#   define __USE_TIME_BITS64	1
>>  #  endif
>> +#  define __USE_TIME_BITS64	1
>>  # elif _TIME_BITS == 32
>>  #  if __TIMESIZE > 32
>>  #   error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
>> @@ -34,4 +33,10 @@
>>  # else
>>  #  error Invalid _TIME_BITS value (can only be 32 or 64-bit)
>>  # endif
>> +#elif __TIMESIZE == 64
>> +# define __USE_TIME_BITS64      1
>> +#endif
>> +
>> +#if defined __USE_TIME_BITS64 && __TIMESIZE == 32
>> +# define __USE_TIME64_REDIRECTS 1
>>  #endif
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>> index 58b523d03a..80a76a17dc 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>>  # define SO_TIMESTAMPNS_NEW 0x4039
>>  # define SO_TIMESTAMPING_NEW 0x403A
>>  
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>> index 069efdbc55..67f7c110cd 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -89,7 +89,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>> index 2bc7cac06d..4995e0a4a5 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>     The type `struct msg' is opaque.  */
>>  struct msqid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_msqid64_ds_helper.h>
>>  #else
>>    struct ipc_perm msg_perm;	/* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>> index dd8fbebcf4..df88949dc2 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a set of semaphores.  */
>>  struct semid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_semid64_ds_helper.h>
>>  #else
>>    struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>> index 58ac572b6e..cb3b0303aa 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a shared memory segment.  */
>>  struct shmid_ds
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_shmid64_ds_helper.h>
>>  #else
>>      struct ipc_perm shm_perm;		/* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>> index 3b1db157bc..2b662668e8 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>> @@ -25,7 +25,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -86,7 +86,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>> index 0f4693fb1f..04686f30ec 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>> @@ -26,7 +26,7 @@
>>  #ifndef __USE_FILE_OFFSET64
>>  struct stat
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>          __dev_t         st_dev;     /* Device.  */
>> @@ -74,7 +74,7 @@ struct stat
>>   * create one ifdef to separate stats structures.  */
>>  struct stat
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>          unsigned long long      st_dev;     /* Device.  */
>> @@ -119,7 +119,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>  {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>          unsigned long long      st_dev;     /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>> index c6908a2793..77ffc8b890 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>>  # define SO_TIMESTAMPNS_NEW 64
>>  # define SO_TIMESTAMPING_NEW 65
>>  
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>> index 277ebad9b6..26682f8d4f 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>> @@ -29,7 +29,7 @@
>>  /* Structure describing file characteristics.  */
>>  struct stat
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      unsigned long int st_dev;
>> @@ -88,7 +88,7 @@ struct stat
>>  # ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   include <bits/struct_stat_time64_helper.h>
>>  #  else
>>      unsigned long int st_dev;
>> @@ -131,7 +131,7 @@ struct stat64
>>  
>>  struct stat
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;
>> @@ -189,7 +189,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>> index 4e8bd51b0a..09c53648b7 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>     The type `struct msg' is opaque.  */
>>  struct msqid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_msqid64_ds_helper.h>
>>  #else
>>    struct ipc_perm msg_perm;	/* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>> index d1a30e3164..0746684a7d 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a set of semaphores.  */
>>  struct semid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_semid64_ds_helper.h>
>>  #else
>>    struct ipc_perm sem_perm;		/* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>> index 8771164b57..c665af1874 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a shared memory segment.  */
>>  struct shmid_ds
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_shmid64_ds_helper.h>
>>  #else
>>      struct ipc_perm shm_perm;		/* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>> index 672c7c6bb8..dab466d881 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>> @@ -43,7 +43,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;		/* Device.  */
>> @@ -88,7 +88,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;		/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>> index 6be5055e65..0d3e095c5d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>>  # define SO_TIMESTAMPNS_NEW 64
>>  # define SO_TIMESTAMPING_NEW 65
>>  
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>> index f6328399cd..20ed8dd9b8 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>  #if __WORDSIZE == 32
>>  struct stat
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -85,7 +85,7 @@ struct stat
>>  # ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   include <bits/struct_stat_time64_helper.h>
>>  #  else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>> index 830629cd37..44ae08265d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>     The type `struct msg' is opaque.  */
>>  struct msqid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_msqid64_ds_helper.h>
>>  #else
>>    struct ipc_perm msg_perm;	/* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>> index 4370257557..ccee57c28b 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a set of semaphores.  */
>>  struct semid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_semid64_ds_helper.h>
>>  #else
>>    struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>> index da1b4b3c56..58145d0a5d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a shared memory segment.  */
>>  struct shmid_ds
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_shmid64_ds_helper.h>
>>  #else
>>      struct ipc_perm shm_perm;		/* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>> index 9911c47bb2..e5c9024fb2 100644
>> --- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>> @@ -65,7 +65,7 @@ struct stat
>>  #else
>>  struct stat
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -166,7 +166,7 @@ struct stat64
>>  # else
>>  struct stat64
>>    {
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>>  #   include <bits/struct_stat_time64_helper.h>
>>  #  else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>> index cbd4bc0f31..9ad0943982 100644
>> --- a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -89,7 +89,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>> index 59958611c4..e7a6b684cc 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>>  # define SO_TIMESTAMPNS_NEW 0x0042
>>  # define SO_TIMESTAMPING_NEW 0x0043
>>  
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>> index 4e48634edc..9ce67b289d 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;			/* Device.  */
>> @@ -85,7 +85,7 @@ struct stat
>>  #ifdef __USE_LARGEFILE64
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;			/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>> index db783c28d4..ed8d47c9b6 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>     The type `struct msg' is opaque.  */
>>  struct msqid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_msqid64_ds_helper.h>
>>  #else
>>    struct ipc_perm msg_perm;	/* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>> index 1c8a3693db..b9e729b8b4 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a set of semaphores.  */
>>  struct semid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_semid64_ds_helper.h>
>>  #else
>>    struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>> index 35a0cc36ab..7885d2ab25 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a shared memory segment.  */
>>  struct shmid_ds
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_shmid64_ds_helper.h>
>>  #else
>>      struct ipc_perm shm_perm;		/* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
>> index 9b51e3bd14..fc8dce45c8 100644
>> --- a/sysdeps/unix/sysv/linux/sys/epoll.h
>> +++ b/sysdeps/unix/sysv/linux/sys/epoll.h
>> @@ -140,7 +140,7 @@ extern int epoll_pwait (int __epfd, struct epoll_event *__events,
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
>>  			 int __maxevents, const struct timespec *__timeout,
>>  			 const __sigset_t *__ss)
>> diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h
>> index b13b846261..79a9b31273 100644
>> --- a/sysdeps/unix/sysv/linux/sys/prctl.h
>> +++ b/sysdeps/unix/sysv/linux/sys/prctl.h
>> @@ -38,7 +38,7 @@
>>  __BEGIN_DECLS
>>  
>>  /* Control process execution.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int prctl (int __option, ...) __THROW;
>>  #else
>>  # ifdef __REDIRECT
>> diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h
>> index 19d0cbfae0..f66ece306a 100644
>> --- a/sysdeps/unix/sysv/linux/sys/timerfd.h
>> +++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
>> @@ -47,7 +47,7 @@ extern int timerfd_settime (int __ufd, int __flags,
>>  			    const struct itimerspec *__utmr,
>>  			    struct itimerspec *__otmr) __THROW;
>>  
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # if defined(__REDIRECT_NTH)
>>  extern int __REDIRECT_NTH (timerfd_settime,
>>                             (int __ufd, int __flags,
>> @@ -62,7 +62,7 @@ extern int __REDIRECT_NTH (timerfd_settime,
>>  /* Return the next expiration time of UFD.  */
>>  extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
>>  
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # if defined(__REDIRECT_NTH)
>>  extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
>>                                               struct itimerspec *__otmr),
>> diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
>> index 28ce022253..568748d767 100644
>> --- a/sysdeps/unix/sysv/linux/sys/timex.h
>> +++ b/sysdeps/unix/sysv/linux/sys/timex.h
>> @@ -54,7 +54,7 @@ struct ntptimeval
>>  
>>  __BEGIN_DECLS
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1));
>>  extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1));
>>  
>> diff --git a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>> index 21aa315d8d..b8b580fbde 100644
>> --- a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>> @@ -25,7 +25,7 @@
>>  
>>  struct stat
>>    {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/struct_stat_time64_helper.h>
>>  #else
>>      __dev_t st_dev;		/* Device.  */
>> @@ -102,7 +102,7 @@ struct stat
>>  /* Note stat64 has the same shape as stat for x86-64.  */
>>  struct stat64
>>    {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>>  #  include <bits/struct_stat_time64_helper.h>
>>  # else
>>      __dev_t st_dev;		/* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>> index 9f3d170b65..81867c0316 100644
>> --- a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>>  /* Data structure describing a set of semaphores.  */
>>  struct semid_ds
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  # include <bits/types/struct_semid64_ds_helper.h>
>>  #else
>>    struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
>> index d0388b0522..4178ad9955 100644
>> --- a/sysvipc/sys/msg.h
>> +++ b/sysvipc/sys/msg.h
>> @@ -58,7 +58,7 @@ struct msgbuf
>>  __BEGIN_DECLS
>>  
>>  /* Message queue control operation.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
>>  #else
>>  # ifdef __REDIRECT_NTH
>> diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
>> index 5d9ec39296..812f1303b3 100644
>> --- a/sysvipc/sys/sem.h
>> +++ b/sysvipc/sys/sem.h
>> @@ -48,7 +48,7 @@ struct sembuf
>>  __BEGIN_DECLS
>>  
>>  /* Semaphore control operation.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
>>  #else
>>  # ifdef __REDIRECT_NTH
>> @@ -68,7 +68,7 @@ extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
>>  
>>  #ifdef __USE_GNU
>>  /* Operate on semaphore with timeout.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
>>  		       const struct timespec *__timeout) __THROW;
>>  # else
>> diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
>> index 04191656d5..496e57ef45 100644
>> --- a/sysvipc/sys/shm.h
>> +++ b/sysvipc/sys/shm.h
>> @@ -46,7 +46,7 @@ __BEGIN_DECLS
>>     facility.  The definition is found in XPG4.2.  */
>>  
>>  /* Shared memory control operation.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
>>  #else
>>  # ifdef __REDIRECT_NTH
>> diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h
>> index 489e81136d..1141015f27 100644
>> --- a/time/bits/types/struct_timespec.h
>> +++ b/time/bits/types/struct_timespec.h
>> @@ -10,14 +10,14 @@
>>     has nanoseconds instead of microseconds.  */
>>  struct timespec
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>    __time64_t tv_sec;		/* Seconds.  */
>>  #else
>>    __time_t tv_sec;		/* Seconds.  */
>>  #endif
>>  #if __WORDSIZE == 64 \
>>    || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \
>> -  || (__TIMESIZE == 32 && !defined __USE_TIME_BITS64)
>> +  || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS)
>>    __syscall_slong_t tv_nsec;	/* Nanoseconds.  */
>>  #else
>>  # if __BYTE_ORDER == __BIG_ENDIAN
>> diff --git a/time/bits/types/struct_timeval.h b/time/bits/types/struct_timeval.h
>> index 3466137c35..0c8e88c82c 100644
>> --- a/time/bits/types/struct_timeval.h
>> +++ b/time/bits/types/struct_timeval.h
>> @@ -7,7 +7,7 @@
>>     microsecond but also has a range of years.  */
>>  struct timeval
>>  {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>    __time64_t tv_sec;		/* Seconds.  */
>>    __suseconds64_t tv_usec;	/* Microseconds.  */
>>  #else
>> diff --git a/time/bits/types/time_t.h b/time/bits/types/time_t.h
>> index 84d67f6ac3..00cde92c62 100644
>> --- a/time/bits/types/time_t.h
>> +++ b/time/bits/types/time_t.h
>> @@ -4,7 +4,7 @@
>>  #include <bits/types.h>
>>  
>>  /* Returned by `time'.  */
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>  typedef __time64_t time_t;
>>  #else
>>  typedef __time_t time_t;
>> diff --git a/time/sys/time.h b/time/sys/time.h
>> index c8708198a5..8c3d0c3022 100644
>> --- a/time/sys/time.h
>> +++ b/time/sys/time.h
>> @@ -63,7 +63,7 @@ struct timezone
>>     use localtime etc. instead.
>>     This function itself is semi-obsolete;
>>     most callers should use time or clock_gettime instead. */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern int gettimeofday (struct timeval *__restrict __tv,
>>  			 void *__restrict __tz) __THROW __nonnull ((1));
>>  #else
>> @@ -77,7 +77,7 @@ extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv,
>>  #endif
>>  
>>  #ifdef __USE_MISC
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Set the current time of day and timezone information.
>>     This call is restricted to the super-user.
>>     Setting the timezone in this way is obsolete, but we don't yet
>> @@ -143,7 +143,7 @@ typedef enum __itimer_which __itimer_which_t;
>>  typedef int __itimer_which_t;
>>  #endif
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  /* Set *VALUE to the current setting of timer WHICH.
>>     Return 0 on success, -1 on errors.  */
>>  extern int getitimer (__itimer_which_t __which,
>> @@ -184,7 +184,7 @@ extern int __REDIRECT_NTH (utimes, (const char *__file,
>>  #endif
>>  
>>  #ifdef __USE_MISC
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Same as `utimes', but does not follow symbolic links.  */
>>  extern int lutimes (const char *__file, const struct timeval __tvp[2])
>>       __THROW __nonnull ((1));
>> @@ -207,7 +207,7 @@ extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]),
>>  #endif
>>  
>>  #ifdef __USE_GNU
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Change the access time of FILE relative to FD to TVP[0] and the
>>     modification time of FILE to TVP[1].  If TVP is a null pointer, use
>>     the current time instead.  Returns 0 on success, -1 on errors.  */
>> diff --git a/time/time.h b/time/time.h
>> index 1609aaeffa..3785dc608f 100644
>> --- a/time/time.h
>> +++ b/time/time.h
>> @@ -71,7 +71,7 @@ __BEGIN_DECLS
>>     The result / CLOCKS_PER_SEC is program time in seconds.  */
>>  extern clock_t clock (void) __THROW;
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  /* Return the current time and put it in *TIMER if TIMER is not NULL.  */
>>  extern time_t time (time_t *__timer) __THROW;
>>  
>> @@ -127,7 +127,7 @@ extern char *strptime_l (const char *__restrict __s,
>>  #endif
>>  
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  /* Return the `struct tm' representation of *TIMER
>>     in Universal Coordinated Time (aka Greenwich Mean Time).  */
>>  extern struct tm *gmtime (const time_t *__timer) __THROW;
>> @@ -149,7 +149,7 @@ extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer),
>>  
>>  
>>  #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Return the `struct tm' representation of *TIMER in UTC,
>>     using *TP to store the result.  */
>>  extern struct tm *gmtime_r (const time_t *__restrict __timer,
>> @@ -180,7 +180,7 @@ extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t,
>>  extern char *asctime (const struct tm *__tp) __THROW;
>>  
>>  /* Equivalent to `asctime (localtime (timer))'.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern char *ctime (const time_t *__timer) __THROW;
>>  #else
>>  # ifdef __REDIRECT_NTH
>> @@ -199,7 +199,7 @@ extern char *asctime_r (const struct tm *__restrict __tp,
>>  			char *__restrict __buf) __THROW;
>>  
>>  /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  extern char *ctime_r (const time_t *__restrict __timer,
>>  		      char *__restrict __buf) __THROW;
>>  #else
>> @@ -242,7 +242,7 @@ extern long int timezone;
>>  
>>  
>>  #if defined __USE_MISC || __GLIBC_USE (ISOC2X)
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Like `mktime', but for TP represents Universal Time, not local time.  */
>>  extern time_t timegm (struct tm *__tp) __THROW;
>>  # else
>> @@ -259,7 +259,7 @@ extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
>>  /* Miscellaneous functions many Unices inherited from the public domain
>>     localtime package.  These are included only for compatibility.  */
>>  
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>>  /* Another name for `mktime'.  */
>>  extern time_t timelocal (struct tm *__tp) __THROW;
>>  #else
>> @@ -274,7 +274,7 @@ extern int dysize (int __year) __THROW  __attribute__ ((__const__));
>>  
>>  
>>  #ifdef __USE_POSIX199309
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Pause execution for a number of nanoseconds.
>>  
>>     This function is a cancellation point and therefore not marked with
>> @@ -320,7 +320,7 @@ extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>>  extern int clock_nanosleep (clockid_t __clock_id, int __flags,
>>  			    const struct timespec *__req,
>>  			    struct timespec *__rem);
>> @@ -349,7 +349,7 @@ extern int timer_create (clockid_t __clock_id,
>>  extern int timer_delete (timer_t __timerid) __THROW;
>>  
>>  /* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  extern int timer_settime (timer_t __timerid, int __flags,
>>  			  const struct itimerspec *__restrict __value,
>>  			  struct itimerspec *__restrict __ovalue) __THROW;
>> @@ -379,7 +379,7 @@ extern int timer_getoverrun (timer_t __timerid) __THROW;
>>  
>>  
>>  #ifdef __USE_ISOC11
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Set TS to calendar time based in time base BASE.  */
>>  extern int timespec_get (struct timespec *__ts, int __base)
>>       __THROW __nonnull ((1));
>> @@ -395,7 +395,7 @@ extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base),
>>  
>>  
>>  #if __GLIBC_USE (ISOC2X)
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>>  /* Set TS to resolution of time base BASE.  */
>>  extern int timespec_getres (struct timespec *__ts, int __base)
>>       __THROW;
>>
> 
>
Andreas K. Huettel Jan. 29, 2024, 4:37 p.m. UTC | #3
This may be a problem on my end. The chroot is, well, semi-functional.

[
Does anyone here know of a binary riscv32 distribution or known working
environment available for download? 
My attempts with qemu-user keep failing with various odd results 
(95% functional, 5% pain) and it would be nice to have something to 
compare with...
]

Am Montag, 29. Januar 2024, 17:29:33 CET schrieb Adhemerval Zanella Netto:
> I am not sure sure what might be happening here, riscv32 ABI does not 
> export __pthread_mutex_timedlock64 nor the exported header should add
> the asm alias in this case.
> 
> Rebuilding a toolchain with the patch applied I see this is the case:
> 
> $ cat test.c
> #include <pthread.h>
> 
> static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
> static pthread_cond_t  cnd = PTHREAD_COND_INITIALIZER;
> 
> int main (int argc, char *argv[])
> {
>   struct timespec ts;
>   clock_gettime (CLOCK_REALTIME, &ts);
>   ts.tv_sec += 1;
> 
>   pthread_mutex_lock (&mtx);
>   pthread_cond_timedwait (&cnd, &mtx, &ts);
>   pthread_mutex_unlock (&mtx);
> 
>   return 0;
> }
> $ riscv32-glibc-linux-gnu-gcc -Wall test.c -o test-ilp32
> $ objdump -t test-ilp32 | grep pthread_cond
> 000103e0       F *UND*  00000000              pthread_cond_timedwait@GLIBC_2.33
> $ riscv32-glibc-linux-gnu-gcc -Wall test.c -o test-ilp32-time64 -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64
> $ objdump -t test-ilp32-time64 | grep pthread_cond
> 000103e0       F *UND*  00000000              pthread_cond_timedwait@GLIBC_2.33
> 
> On 27/01/24 10:54, Andreas K. Huettel wrote:
> > When rebuilding a riscv32 qemu chroot with this patch I get errors similar to
> > 
> > (python)
> > ceval.c:(.text+0x272a): undefined reference to `__pthread_cond_timedwait64'
> > collect2: error: ld returned 1 exit status
> > 
> > (gnupg)
> > /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_mutex_timedlock64'
> > /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_cond_timedwait64'
> > /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_rwlock_timedwrlock64'
> > /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_rwlock_timedrdlock64'
> > collect2: error: ld returned 1 exit status
> > make[2]: *** [Makefile:740: keyboxd] Error 1
> > 
> > (xz-utils)
> > /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: ../../src/liblzma/.libs/liblzma.so: undefined reference to `/usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../..>
> > __pthread_cond_timedwait64'
> > collect2: error: ld returned 1 exit status
> > 
> > Now, this chroot is *very* experimental, may have stale files lying around
> > from bootstrapping, and has significant other problems.
> > And I havent tried updating it for a while. But this looks related?
> > 
> > 
> > 
> > Am Donnerstag, 18. Januar 2024, 14:18:01 CET schrieb Adhemerval Zanella:
> >> It was raised on libc-help [1] that some Linux kernel interfaces expect
> >> the libc to define __USE_TIME_BITS64 to indicate the time_t size for the
> >> kABI.  Different than defined by the initial y2038 design document [2],
> >> the __USE_TIME_BITS64 is only defined for ABIs that support more than
> >> one time_t size (by defining the _TIME_BITS for each module).
> >>
> >> The 64 bit time_t redirects are now enabled using a different internal
> >> define (__USE_TIME64_REDIRECTS). There is no expected change in semantic
> >> or code generation.
> >>
> >> Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
> >> arm-linux-gnueabi
> >>
> >> [1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html
> >> [2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
> >> --
> >> Changes from v2:
> >> * Only defined __USE_TIME_BITS64 when 64 bit time_t is used. 
> >>
> >> Changes from v1:
> >> * Use __USE_TIME64_REDIRECTS to allow replace the current macro.
> >> ---
> >>  io/bits/poll2.h                               |  2 +-
> >>  io/fcntl.h                                    |  2 +-
> >>  io/fts.h                                      |  6 ++---
> >>  io/ftw.h                                      | 12 +++++-----
> >>  io/sys/poll.h                                 |  2 +-
> >>  io/sys/stat.h                                 | 16 ++++++-------
> >>  io/utime.h                                    |  4 ++--
> >>  misc/sys/ioctl.h                              |  2 +-
> >>  misc/sys/select.h                             |  4 ++--
> >>  posix/glob.h                                  |  4 ++--
> >>  posix/sched.h                                 |  2 +-
> >>  posix/sys/wait.h                              |  4 ++--
> >>  resolv/netdb.h                                |  2 +-
> >>  resource/sys/resource.h                       |  2 +-
> >>  rt/aio.h                                      |  4 ++--
> >>  rt/mqueue.h                                   |  2 +-
> >>  signal/signal.h                               |  2 +-
> >>  socket/sys/socket.h                           | 14 +++++------
> >>  support/timespec.h                            |  2 +-
> >>  support/xtime.h                               |  2 +-
> >>  support/xunistd.h                             |  2 +-
> >>  sysdeps/generic/features-time64.h             |  2 ++
> >>  sysdeps/nptl/pthread.h                        | 18 +++++++-------
> >>  sysdeps/pthread/semaphore.h                   |  4 ++--
> >>  sysdeps/pthread/threads.h                     |  6 ++---
> >>  .../unix/sysv/linux/arm/bits/struct_stat.h    |  4 ++--
> >>  .../unix/sysv/linux/bits/socket-constants.h   |  2 +-
> >>  sysdeps/unix/sysv/linux/bits/time.h           |  2 +-
> >>  sysdeps/unix/sysv/linux/bits/timex.h          |  2 +-
> >>  .../sysv/linux/bits/types/struct_msqid_ds.h   |  2 +-
> >>  .../sysv/linux/bits/types/struct_semid_ds.h   |  2 +-
> >>  .../sysv/linux/bits/types/struct_shmid_ds.h   |  2 +-
> >>  .../unix/sysv/linux/csky/bits/struct_stat.h   |  4 ++--
> >>  sysdeps/unix/sysv/linux/features-time64.h     |  9 +++++--
> >>  .../sysv/linux/hppa/bits/socket-constants.h   |  2 +-
> >>  .../unix/sysv/linux/hppa/bits/struct_stat.h   |  4 ++--
> >>  .../linux/hppa/bits/types/struct_msqid_ds.h   |  2 +-
> >>  .../linux/hppa/bits/types/struct_semid_ds.h   |  2 +-
> >>  .../linux/hppa/bits/types/struct_shmid_ds.h   |  2 +-
> >>  .../unix/sysv/linux/m68k/bits/struct_stat.h   |  4 ++--
> >>  .../sysv/linux/microblaze/bits/struct_stat.h  |  6 ++---
> >>  .../sysv/linux/mips/bits/socket-constants.h   |  2 +-
> >>  .../unix/sysv/linux/mips/bits/struct_stat.h   |  8 +++----
> >>  .../linux/mips/bits/types/struct_msqid_ds.h   |  2 +-
> >>  .../linux/mips/bits/types/struct_semid_ds.h   |  2 +-
> >>  .../linux/mips/bits/types/struct_shmid_ds.h   |  2 +-
> >>  .../unix/sysv/linux/nios2/bits/struct_stat.h  |  4 ++--
> >>  .../linux/powerpc/bits/socket-constants.h     |  2 +-
> >>  .../sysv/linux/powerpc/bits/struct_stat.h     |  4 ++--
> >>  .../powerpc/bits/types/struct_msqid_ds.h      |  2 +-
> >>  .../powerpc/bits/types/struct_semid_ds.h      |  2 +-
> >>  .../powerpc/bits/types/struct_shmid_ds.h      |  2 +-
> >>  .../unix/sysv/linux/s390/bits/struct_stat.h   |  4 ++--
> >>  sysdeps/unix/sysv/linux/sh/bits/struct_stat.h |  4 ++--
> >>  .../sysv/linux/sparc/bits/socket-constants.h  |  2 +-
> >>  .../unix/sysv/linux/sparc/bits/struct_stat.h  |  4 ++--
> >>  .../linux/sparc/bits/types/struct_msqid_ds.h  |  2 +-
> >>  .../linux/sparc/bits/types/struct_semid_ds.h  |  2 +-
> >>  .../linux/sparc/bits/types/struct_shmid_ds.h  |  2 +-
> >>  sysdeps/unix/sysv/linux/sys/epoll.h           |  2 +-
> >>  sysdeps/unix/sysv/linux/sys/prctl.h           |  2 +-
> >>  sysdeps/unix/sysv/linux/sys/timerfd.h         |  4 ++--
> >>  sysdeps/unix/sysv/linux/sys/timex.h           |  2 +-
> >>  .../unix/sysv/linux/x86/bits/struct_stat.h    |  4 ++--
> >>  .../linux/x86/bits/types/struct_semid_ds.h    |  2 +-
> >>  sysvipc/sys/msg.h                             |  2 +-
> >>  sysvipc/sys/sem.h                             |  4 ++--
> >>  sysvipc/sys/shm.h                             |  2 +-
> >>  time/bits/types/struct_timespec.h             |  4 ++--
> >>  time/bits/types/struct_timeval.h              |  2 +-
> >>  time/bits/types/time_t.h                      |  2 +-
> >>  time/sys/time.h                               | 10 ++++----
> >>  time/time.h                                   | 24 +++++++++----------
> >>  73 files changed, 149 insertions(+), 142 deletions(-)
> >>
> >> diff --git a/io/bits/poll2.h b/io/bits/poll2.h
> >> index 6152a8c5e4..efc8b85403 100644
> >> --- a/io/bits/poll2.h
> >> +++ b/io/bits/poll2.h
> >> @@ -43,7 +43,7 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
> >>  
> >>  
> >>  #ifdef __USE_GNU
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
> >>  				       const struct timespec *__timeout,
> >>  				       const __sigset_t *__ss), __ppoll64);
> >> diff --git a/io/fcntl.h b/io/fcntl.h
> >> index 9cee0b5900..0a493d1dd3 100644
> >> --- a/io/fcntl.h
> >> +++ b/io/fcntl.h
> >> @@ -172,7 +172,7 @@ typedef __pid_t pid_t;
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  # ifndef __USE_FILE_OFFSET64
> >>  extern int fcntl (int __fd, int __cmd, ...);
> >>  # else
> >> diff --git a/io/fts.h b/io/fts.h
> >> index 61f95bb441..97a031ebbd 100644
> >> --- a/io/fts.h
> >> +++ b/io/fts.h
> >> @@ -187,7 +187,7 @@ FTSENT	*fts_read (FTS *);
> >>  int	 fts_set (FTS *, FTSENT *, int) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  FTSENT	*__REDIRECT (fts_children, (FTS *, int), fts64_children);
> >>  int	 __REDIRECT (fts_close, (FTS *), fts64_close);
> >>  FTS	*__REDIRECT (fts_open, (char * const *, int,
> >> @@ -206,7 +206,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
> >>  			 __fts64_set_time64);
> >>  #  endif
> >>  # else
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  #   define fts_children fts64_children
> >>  #   define fts_close fts64_close
> >>  #   define fts_open fts64_open
> >> @@ -217,7 +217,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
> >>  # endif
> >>  #endif
> >>  #ifdef __USE_LARGEFILE64
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  FTSENT64 *fts64_children (FTS64 *, int);
> >>  int	  fts64_close (FTS64 *);
> >>  FTS64	 *fts64_open (char * const *, int,
> >> diff --git a/io/ftw.h b/io/ftw.h
> >> index e4d1b84d53..39cf595b27 100644
> >> --- a/io/ftw.h
> >> +++ b/io/ftw.h
> >> @@ -137,7 +137,7 @@ extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
> >>       __nonnull ((1, 2));
> >>  #else
> >>  # ifdef __REDIRECT
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
> >>  			     int __descriptors), ftw64) __nonnull ((1, 2));
> >>  #  else
> >> @@ -146,7 +146,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
> >>       __nonnull ((1, 2));
> >>  #  endif
> >>  # else
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  #   define ftw ftw64
> >>  #  else
> >>  #   define ftw __ftw64_time64
> >> @@ -154,7 +154,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
> >>  # endif
> >>  #endif
> >>  #ifdef __USE_LARGEFILE64
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int ftw64 (const char *__dir, __ftw64_func_t __func,
> >>  		  int __descriptors) __nonnull ((1, 2));
> >>  # else
> >> @@ -180,7 +180,7 @@ extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
> >>  		 int __flag) __nonnull ((1, 2));
> >>  # else
> >>  #  ifdef __REDIRECT
> >> -#   ifndef __USE_TIME_BITS64
> >> +#   ifndef __USE_TIME64_REDIRECTS
> >>  extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
> >>  			      int __descriptors, int __flag), nftw64)
> >>       __nonnull ((1, 2));
> >> @@ -190,7 +190,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
> >>       __nonnull ((1, 2));
> >>  #   endif
> >>  #  else
> >> -#   ifndef __USE_TIME_BITS64
> >> +#   ifndef __USE_TIME64_REDIRECTS
> >>  #    define nftw nftw64
> >>  #   else
> >>  #    define nftw __nftw64_time64
> >> @@ -198,7 +198,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
> >>  #  endif
> >>  # endif
> >>  # ifdef __USE_LARGEFILE64
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int nftw64 (const char *__dir, __nftw64_func_t __func,
> >>  		   int __descriptors, int __flag) __nonnull ((1, 2));
> >>  #  else
> >> diff --git a/io/sys/poll.h b/io/sys/poll.h
> >> index 7858fad6b9..c324ff5dad 100644
> >> --- a/io/sys/poll.h
> >> +++ b/io/sys/poll.h
> >> @@ -66,7 +66,7 @@ extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
> >>  		  const __sigset_t *__ss)
> >>      __fortified_attr_access (__write_only__, 1, 2);
> >>  
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  ifdef __REDIRECT
> >>  extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
> >>                                 const struct timespec *__timeout,
> >> diff --git a/io/sys/stat.h b/io/sys/stat.h
> >> index 1fa6d6e62e..3b4ba80132 100644
> >> --- a/io/sys/stat.h
> >> +++ b/io/sys/stat.h
> >> @@ -209,7 +209,7 @@ extern int stat (const char *__restrict __file,
> >>     that file descriptor FD is open on and put them in BUF.  */
> >>  extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
> >>  #else
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  ifdef __REDIRECT_NTH
> >>  extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
> >>  				  struct stat *__restrict __buf),
> >> @@ -236,7 +236,7 @@ extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
> >>  # endif
> >>  #endif
> >>  #ifdef __USE_LARGEFILE64
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int stat64 (const char *__restrict __file,
> >>  		   struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
> >>  extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
> >> @@ -265,7 +265,7 @@ extern int fstatat (int __fd, const char *__restrict __file,
> >>  		    struct stat *__restrict __buf, int __flag)
> >>       __THROW __nonnull ((2, 3));
> >>  # else
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   ifdef __REDIRECT_NTH
> >>  extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
> >>  				     struct stat *__restrict __buf,
> >> @@ -287,7 +287,7 @@ extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
> >>  # endif
> >>  
> >>  # ifdef __USE_LARGEFILE64
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int fstatat64 (int __fd, const char *__restrict __file,
> >>  		      struct stat64 *__restrict __buf, int __flag)
> >>       __THROW __nonnull ((2, 3));
> >> @@ -313,7 +313,7 @@ extern int __REDIRECT_NTH (fstatat64, (int __fd,
> >>  extern int lstat (const char *__restrict __file,
> >>  		  struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
> >>  # else
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   ifdef __REDIRECT_NTH
> >>  extern int __REDIRECT_NTH (lstat,
> >>  			   (const char *__restrict __file,
> >> @@ -334,7 +334,7 @@ extern int __REDIRECT_NTH (lstat,
> >>  #  endif
> >>  # endif
> >>  # ifdef __USE_LARGEFILE64
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int lstat64 (const char *__restrict __file,
> >>  		    struct stat64 *__restrict __buf)
> >>       __THROW __nonnull ((1, 2));
> >> @@ -427,7 +427,7 @@ extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
> >>  #endif
> >>  
> >>  #ifdef __USE_ATFILE
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Set file access and modification times relative to directory file
> >>     descriptor.  */
> >>  extern int utimensat (int __fd, const char *__path,
> >> @@ -447,7 +447,7 @@ extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
> >>  #endif
> >>  
> >>  #ifdef __USE_XOPEN2K8
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Set file access and modification times of the file associated with FD.  */
> >>  extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
> >>  
> >> diff --git a/io/utime.h b/io/utime.h
> >> index c5eacedd6a..1c7587d9c1 100644
> >> --- a/io/utime.h
> >> +++ b/io/utime.h
> >> @@ -35,7 +35,7 @@ __BEGIN_DECLS
> >>  /* Structure describing file times.  */
> >>  struct utimbuf
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>      __time64_t actime;		/* Access time.  */
> >>      __time64_t modtime;		/* Modification time.  */
> >>  #else
> >> @@ -46,7 +46,7 @@ struct utimbuf
> >>  
> >>  /* Set the access and modification times of FILE to those given in
> >>     *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int utime (const char *__file,
> >>  		  const struct utimbuf *__file_times)
> >>       __THROW __nonnull ((1));
> >> diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
> >> index 3f2338ddd3..ea6583e122 100644
> >> --- a/misc/sys/ioctl.h
> >> +++ b/misc/sys/ioctl.h
> >> @@ -38,7 +38,7 @@ __BEGIN_DECLS
> >>  /* Perform the I/O control operation specified by REQUEST on FD.
> >>     One argument may follow; its presence and type depend on REQUEST.
> >>     Return value depends on REQUEST.  Usually -1 indicates error.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT
> >> diff --git a/misc/sys/select.h b/misc/sys/select.h
> >> index e6a0c1b8b2..2e45e94bc1 100644
> >> --- a/misc/sys/select.h
> >> +++ b/misc/sys/select.h
> >> @@ -98,7 +98,7 @@ __BEGIN_DECLS
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int select (int __nfds, fd_set *__restrict __readfds,
> >>  		   fd_set *__restrict __writefds,
> >>  		   fd_set *__restrict __exceptfds,
> >> @@ -123,7 +123,7 @@ extern int __REDIRECT (select,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int pselect (int __nfds, fd_set *__restrict __readfds,
> >>  		    fd_set *__restrict __writefds,
> >>  		    fd_set *__restrict __exceptfds,
> >> diff --git a/posix/glob.h b/posix/glob.h
> >> index 3406662840..b6bba0fbcd 100644
> >> --- a/posix/glob.h
> >> +++ b/posix/glob.h
> >> @@ -150,7 +150,7 @@ extern int glob (const char *__restrict __pattern, int __flags,
> >>  /* Free storage allocated in PGLOB by a previous `glob' call.  */
> >>  extern void globfree (glob_t *__pglob) __THROW;
> >>  #else
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
> >>  				    int __flags,
> >>  				    int (*__errfunc) (const char *, int),
> >> @@ -170,7 +170,7 @@ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
> >>  #endif
> >>  
> >>  #ifdef __USE_LARGEFILE64
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
> >>  				      int __flags,
> >>  				      int (*__errfunc) (const char *, int),
> >> diff --git a/posix/sched.h b/posix/sched.h
> >> index 3eac206f35..49f504a488 100644
> >> --- a/posix/sched.h
> >> +++ b/posix/sched.h
> >> @@ -74,7 +74,7 @@ extern int sched_get_priority_max (int __algorithm) __THROW;
> >>  extern int sched_get_priority_min (int __algorithm) __THROW;
> >>  
> >>  /* Get the SCHED_RR interval for the named process.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT_NTH
> >> diff --git a/posix/sys/wait.h b/posix/sys/wait.h
> >> index edbb7b4392..1f44ee1145 100644
> >> --- a/posix/sys/wait.h
> >> +++ b/posix/sys/wait.h
> >> @@ -139,7 +139,7 @@ struct rusage;
> >>     nil, store information about the child's resource usage there.  If the
> >>     WUNTRACED bit is set in OPTIONS, return status for stopped children;
> >>     otherwise don't.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern __pid_t wait3 (int *__stat_loc, int __options,
> >>  		      struct rusage * __usage) __THROWNL;
> >>  # else
> >> @@ -154,7 +154,7 @@ extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options,
> >>  #endif
> >>  
> >>  #ifdef __USE_MISC
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* PID is like waitpid.  Other args are like wait3.  */
> >>  extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options,
> >>  		      struct rusage *__usage) __THROWNL;
> >> diff --git a/resolv/netdb.h b/resolv/netdb.h
> >> index 14228b0d95..b7f473fafe 100644
> >> --- a/resolv/netdb.h
> >> +++ b/resolv/netdb.h
> >> @@ -701,7 +701,7 @@ extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
> >>  extern int gai_suspend (const struct gaicb *const __list[], int __ent,
> >>  			const struct timespec *__timeout);
> >>  
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  if defined(__REDIRECT)
> >>  extern int __REDIRECT (gai_suspend, (const struct gaicb *const __list[],
> >>                                       int __ent,
> >> diff --git a/resource/sys/resource.h b/resource/sys/resource.h
> >> index a5634ba715..b0bf751e92 100644
> >> --- a/resource/sys/resource.h
> >> +++ b/resource/sys/resource.h
> >> @@ -88,7 +88,7 @@ extern int setrlimit64 (__rlimit_resource_t __resource,
> >>     and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
> >>  extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
> >>  
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # if defined(__REDIRECT_NTH)
> >>  extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
> >>                                         struct rusage *__usage),
> >> diff --git a/rt/aio.h b/rt/aio.h
> >> index 37d19abf16..e71435733f 100644
> >> --- a/rt/aio.h
> >> +++ b/rt/aio.h
> >> @@ -193,7 +193,7 @@ extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
> >>  extern int __REDIRECT_NTH (aio_cancel,
> >>  			   (int __fildes, struct aiocb *__aiocbp),
> >>  			   aio_cancel64);
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  extern int __REDIRECT_NTH (aio_suspend,
> >>  			   (const struct aiocb *const __list[], int __nent,
> >>  			    const struct timespec *__restrict __timeout),
> >> @@ -215,7 +215,7 @@ extern int __REDIRECT_NTH (aio_fsync,
> >>  #  define aio_error aio_error64
> >>  #  define aio_return aio_return64
> >>  #  define aio_cancel aio_cancel64
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   define aio_suspend __aio_suspend_time64
> >>  #  else
> >>  #   define aio_suspend aio_suspend64
> >> diff --git a/rt/mqueue.h b/rt/mqueue.h
> >> index 787cc36df2..fd6fff4bb2 100644
> >> --- a/rt/mqueue.h
> >> +++ b/rt/mqueue.h
> >> @@ -71,7 +71,7 @@ extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
> >>  		    unsigned int __msg_prio) __nonnull ((2));
> >>  
> >>  #ifdef __USE_XOPEN2K
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Receive the oldest from highest priority messages in message queue
> >>     MQDES, stop waiting if ABS_TIMEOUT expires.  */
> >>  extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
> >> diff --git a/signal/signal.h b/signal/signal.h
> >> index f37499ce60..8e07b041b1 100644
> >> --- a/signal/signal.h
> >> +++ b/signal/signal.h
> >> @@ -269,7 +269,7 @@ extern int sigwaitinfo (const sigset_t *__restrict __set,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int sigtimedwait (const sigset_t *__restrict __set,
> >>  			 siginfo_t *__restrict __info,
> >>  			 const struct timespec *__restrict __timeout)
> >> diff --git a/socket/sys/socket.h b/socket/sys/socket.h
> >> index 366eaab845..463cf3291b 100644
> >> --- a/socket/sys/socket.h
> >> +++ b/socket/sys/socket.h
> >> @@ -170,7 +170,7 @@ extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
> >>  			int __flags);
> >>  #else
> >> @@ -191,7 +191,7 @@ extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
> >>  		     unsigned int __vlen, int __flags);
> >>  # else
> >> @@ -204,7 +204,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
> >>  			 unsigned int __vlen, int __flags);
> >>  #   define sendmmsg __sendmmsg64
> >>  #  endif
> >> -# endif	 /* __USE_TIME_BITS64 */
> >> +# endif	 /* __USE_TIME64_REDIRECTS */
> >>  #endif /* __USE_GNU */
> >>  
> >>  /* Receive a message as described by MESSAGE from socket FD.
> >> @@ -212,7 +212,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
> >>  #else
> >>  # ifdef __REDIRECT
> >> @@ -231,7 +231,7 @@ extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags);
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
> >>  		     unsigned int __vlen, int __flags,
> >>  		     struct timespec *__tmo);
> >> @@ -251,7 +251,7 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
> >>  /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
> >>     into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
> >>     actual length.  Returns 0 on success, -1 for errors.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int getsockopt (int __fd, int __level, int __optname,
> >>  		       void *__restrict __optval,
> >>  		       socklen_t *__restrict __optlen) __THROW;
> >> @@ -273,7 +273,7 @@ extern int __getsockopt64 (int __fd, int __level, int __optname,
> >>  /* Set socket FD's option OPTNAME at protocol level LEVEL
> >>     to *OPTVAL (which is OPTLEN bytes long).
> >>     Returns 0 on success, -1 for errors.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int setsockopt (int __fd, int __level, int __optname,
> >>  		       const void *__optval, socklen_t __optlen) __THROW;
> >>  #else
> >> diff --git a/support/timespec.h b/support/timespec.h
> >> index 42f32bcc2c..5ccc7163a5 100644
> >> --- a/support/timespec.h
> >> +++ b/support/timespec.h
> >> @@ -35,7 +35,7 @@ make_timespec (time_t s, long int ns)
> >>  
> >>  enum { TIMESPEC_HZ = 1000000000 };
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  struct timespec timespec_add (struct timespec, struct timespec)
> >>    __attribute__((const));
> >>  struct timespec timespec_sub (struct timespec, struct timespec)
> >> diff --git a/support/xtime.h b/support/xtime.h
> >> index 5200eef2e0..9961899634 100644
> >> --- a/support/xtime.h
> >> +++ b/support/xtime.h
> >> @@ -30,7 +30,7 @@ __BEGIN_DECLS
> >>  /* The following functions call the corresponding libc functions and
> >>     terminate the process on error.  */
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  void xclock_gettime (clockid_t clock, struct timespec *ts);
> >>  void xclock_settime (clockid_t clock, const struct timespec *ts);
> >>  #else
> >> diff --git a/support/xunistd.h b/support/xunistd.h
> >> index b5e8c2f420..13be9a46a3 100644
> >> --- a/support/xunistd.h
> >> +++ b/support/xunistd.h
> >> @@ -36,7 +36,7 @@ pid_t xwaitpid (pid_t, int *status, int flags);
> >>  void xpipe (int[2]);
> >>  void xdup2 (int, int);
> >>  int xopen (const char *path, int flags, mode_t);
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  # ifdef __USE_FILE_OFFSET64
> >>  void xstat (const char *path, struct stat *);
> >>  void xlstat (const char *path, struct stat *);
> >> diff --git a/sysdeps/generic/features-time64.h b/sysdeps/generic/features-time64.h
> >> index 4d38b8ba76..4d1c8319d4 100644
> >> --- a/sysdeps/generic/features-time64.h
> >> +++ b/sysdeps/generic/features-time64.h
> >> @@ -17,3 +17,5 @@
> >>     <https://www.gnu.org/licenses/>.  */
> >>  
> >>  /* The generic configuration only support _TIME_BITS=32.  */
> >> +#define __USE_TIME_BITS64       0
> >> +#define __USE_TIME64_REDIRECTS  0
> >> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
> >> index 1607fdf29a..3d4f4a756c 100644
> >> --- a/sysdeps/nptl/pthread.h
> >> +++ b/sysdeps/nptl/pthread.h
> >> @@ -223,7 +223,7 @@ extern int pthread_join (pthread_t __th, void **__thread_return);
> >>     the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
> >>  extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
> >>  
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Make calling thread wait for termination of the thread TH, but only
> >>     until TIMEOUT.  The exit status of the thread is stored in
> >>     *THREAD_RETURN, if THREAD_RETURN is not NULL.
> >> @@ -796,7 +796,7 @@ extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
> >>  
> >>  #ifdef __USE_XOPEN2K
> >>  /* Wait until lock becomes available, or specified time passes. */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
> >>  				    const struct timespec *__restrict
> >>  				    __abstime) __THROWNL __nonnull ((1, 2));
> >> @@ -813,7 +813,7 @@ extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
> >>  #endif
> >>  
> >>  #ifdef __USE_GNU
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
> >>  				    clockid_t __clockid,
> >>  				    const struct timespec *__restrict
> >> @@ -982,7 +982,7 @@ extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
> >>  
> >>  # ifdef __USE_XOPEN2K
> >>  /* Try to acquire read lock for RWLOCK or return after specified time.  */
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
> >>  				       const struct timespec *__restrict
> >>  				       __abstime) __THROWNL __nonnull ((1, 2));
> >> @@ -1000,7 +1000,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
> >>  # endif
> >>  
> >>  # ifdef __USE_GNU
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
> >>  				       clockid_t __clockid,
> >>  				       const struct timespec *__restrict
> >> @@ -1029,7 +1029,7 @@ extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
> >>  
> >>  # ifdef __USE_XOPEN2K
> >>  /* Try to acquire write lock for RWLOCK or return after specified time.  */
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
> >>  				       const struct timespec *__restrict
> >>  				       __abstime) __THROWNL __nonnull ((1, 2));
> >> @@ -1047,7 +1047,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
> >>  # endif
> >>  
> >>  # ifdef __USE_GNU
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
> >>  				       clockid_t __clockid,
> >>  				       const struct timespec *__restrict
> >> @@ -1141,7 +1141,7 @@ extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
> >>  				   pthread_mutex_t *__restrict __mutex,
> >>  				   const struct timespec *__restrict __abstime)
> >> @@ -1167,7 +1167,7 @@ extern int __REDIRECT (pthread_cond_timedwait,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW. */
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
> >>  				   pthread_mutex_t *__restrict __mutex,
> >>  				   __clockid_t __clock_id,
> >> diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
> >> index c75ca4ce6d..8a09633699 100644
> >> --- a/sysdeps/pthread/semaphore.h
> >> +++ b/sysdeps/pthread/semaphore.h
> >> @@ -59,7 +59,7 @@ extern int sem_wait (sem_t *__sem) __nonnull ((1));
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int sem_timedwait (sem_t *__restrict __sem,
> >>  			  const struct timespec *__restrict __abstime)
> >>    __nonnull ((1, 2));
> >> @@ -77,7 +77,7 @@ extern int __REDIRECT (sem_timedwait,
> >>  #endif
> >>  
> >>  #ifdef __USE_GNU
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int sem_clockwait (sem_t *__restrict __sem,
> >>  			  clockid_t clock,
> >>  			  const struct timespec *__restrict __abstime)
> >> diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
> >> index c5410b5c3a..7cade24e1f 100644
> >> --- a/sysdeps/pthread/threads.h
> >> +++ b/sysdeps/pthread/threads.h
> >> @@ -90,7 +90,7 @@ extern thrd_t thrd_current (void);
> >>     __TIME_POINT.  The current thread may resume if receives a signal.  In
> >>     that case, if __REMAINING is not NULL, the remaining time is stored in
> >>     the object pointed by it.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int thrd_sleep (const struct timespec *__time_point,
> >>  		       struct timespec *__remaining);
> >>  #else
> >> @@ -143,7 +143,7 @@ extern int mtx_lock (mtx_t *__mutex);
> >>  /* Block the current thread until the mutex pointed by __MUTEX is unlocked
> >>     or time pointed by __TIME_POINT is reached.  In case the mutex is unlock,
> >>     the current thread will not be blocked.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int mtx_timedlock (mtx_t *__restrict __mutex,
> >>  			  const struct timespec *__restrict __time_point);
> >>  #else
> >> @@ -194,7 +194,7 @@ extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex);
> >>  /* Block current thread on the condition variable until condition variable
> >>     pointed by __COND is signaled or time pointed by __TIME_POINT is
> >>     reached.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int cnd_timedwait (cnd_t *__restrict __cond,
> >>  			  mtx_t *__restrict __mutex,
> >>  			  const struct timespec *__restrict __time_point);
> >> diff --git a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
> >> index 255feaa8cb..1fc5917b8e 100644
> >> --- a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
> >> @@ -28,7 +28,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -89,7 +89,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
> >> index d997dbf594..b2102d3abf 100644
> >> --- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
> >> +++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
> >> @@ -64,7 +64,7 @@
> >>  #  define SO_TIMESTAMPNS_NEW 64
> >>  #  define SO_TIMESTAMPING_NEW 65
> >>  
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   define SO_RCVTIMEO SO_RCVTIMEO_NEW
> >>  #   define SO_SNDTIMEO SO_SNDTIMEO_NEW
> >>  #   define SO_TIMESTAMP SO_TIMESTAMP_NEW
> >> diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
> >> index b70ba58a7d..cab4057971 100644
> >> --- a/sysdeps/unix/sysv/linux/bits/time.h
> >> +++ b/sysdeps/unix/sysv/linux/bits/time.h
> >> @@ -77,7 +77,7 @@ __BEGIN_DECLS
> >>  /* Tune a POSIX clock.  */
> >>  extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2));
> >>  
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # if defined(__REDIRECT_NTH)
> >>  extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
> >>                                             struct timex *__utx),
> >> diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h
> >> index 398d8094f2..03ccde6d0a 100644
> >> --- a/sysdeps/unix/sysv/linux/bits/timex.h
> >> +++ b/sysdeps/unix/sysv/linux/bits/timex.h
> >> @@ -25,7 +25,7 @@
> >>  
> >>  struct timex
> >>  {
> >> -# if defined __USE_TIME_BITS64 || (__TIMESIZE == 64 && __WORDSIZE == 32)
> >> +# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32)
> >>    unsigned int modes;          /* mode selector */
> >>    int :32;                     /* pad */
> >>    long long offset;            /* time offset (usec) */
> >> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
> >> index fae50281c7..86296ca922 100644
> >> --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
> >> @@ -26,7 +26,7 @@
> >>     The type `struct msg' is opaque.  */
> >>  struct msqid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_msqid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> >> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
> >> index 3c277ed1d8..2ac89b3ce4 100644
> >> --- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a set of semaphores.  */
> >>  struct semid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_semid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm sem_perm;        /* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> >> index 09de0b4e3a..1012ed0317 100644
> >> --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a shared memory segment.  */
> >>  struct shmid_ds
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_shmid64_ds_helper.h>
> >>  #else
> >>      struct ipc_perm shm_perm;		/* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
> >> index 4b4822d6d0..47a9f0aaff 100644
> >> --- a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
> >> @@ -43,7 +43,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;		/* Device.  */
> >> @@ -88,7 +88,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;		/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/features-time64.h b/sysdeps/unix/sysv/linux/features-time64.h
> >> index dd3442c2ea..8d573cd23e 100644
> >> --- a/sysdeps/unix/sysv/linux/features-time64.h
> >> +++ b/sysdeps/unix/sysv/linux/features-time64.h
> >> @@ -24,9 +24,8 @@
> >>  # if _TIME_BITS == 64
> >>  #  if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
> >>  #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
> >> -#  elif __TIMESIZE == 32
> >> -#   define __USE_TIME_BITS64	1
> >>  #  endif
> >> +#  define __USE_TIME_BITS64	1
> >>  # elif _TIME_BITS == 32
> >>  #  if __TIMESIZE > 32
> >>  #   error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
> >> @@ -34,4 +33,10 @@
> >>  # else
> >>  #  error Invalid _TIME_BITS value (can only be 32 or 64-bit)
> >>  # endif
> >> +#elif __TIMESIZE == 64
> >> +# define __USE_TIME_BITS64      1
> >> +#endif
> >> +
> >> +#if defined __USE_TIME_BITS64 && __TIMESIZE == 32
> >> +# define __USE_TIME64_REDIRECTS 1
> >>  #endif
> >> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
> >> index 58b523d03a..80a76a17dc 100644
> >> --- a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
> >> +++ b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
> >> @@ -54,7 +54,7 @@
> >>  # define SO_TIMESTAMPNS_NEW 0x4039
> >>  # define SO_TIMESTAMPING_NEW 0x403A
> >>  
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> >>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> >>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> >> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
> >> index 069efdbc55..67f7c110cd 100644
> >> --- a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
> >> @@ -28,7 +28,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -89,7 +89,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
> >> index 2bc7cac06d..4995e0a4a5 100644
> >> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
> >> @@ -26,7 +26,7 @@
> >>     The type `struct msg' is opaque.  */
> >>  struct msqid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_msqid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> >> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
> >> index dd8fbebcf4..df88949dc2 100644
> >> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a set of semaphores.  */
> >>  struct semid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_semid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm sem_perm;   /* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> >> index 58ac572b6e..cb3b0303aa 100644
> >> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a shared memory segment.  */
> >>  struct shmid_ds
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_shmid64_ds_helper.h>
> >>  #else
> >>      struct ipc_perm shm_perm;		/* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
> >> index 3b1db157bc..2b662668e8 100644
> >> --- a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
> >> @@ -25,7 +25,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -86,7 +86,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
> >> index 0f4693fb1f..04686f30ec 100644
> >> --- a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
> >> @@ -26,7 +26,7 @@
> >>  #ifndef __USE_FILE_OFFSET64
> >>  struct stat
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>          __dev_t         st_dev;     /* Device.  */
> >> @@ -74,7 +74,7 @@ struct stat
> >>   * create one ifdef to separate stats structures.  */
> >>  struct stat
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>          unsigned long long      st_dev;     /* Device.  */
> >> @@ -119,7 +119,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>  {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>          unsigned long long      st_dev;     /* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
> >> index c6908a2793..77ffc8b890 100644
> >> --- a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
> >> +++ b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
> >> @@ -54,7 +54,7 @@
> >>  # define SO_TIMESTAMPNS_NEW 64
> >>  # define SO_TIMESTAMPING_NEW 65
> >>  
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> >>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> >>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> >> diff --git a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
> >> index 277ebad9b6..26682f8d4f 100644
> >> --- a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
> >> @@ -29,7 +29,7 @@
> >>  /* Structure describing file characteristics.  */
> >>  struct stat
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      unsigned long int st_dev;
> >> @@ -88,7 +88,7 @@ struct stat
> >>  # ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   include <bits/struct_stat_time64_helper.h>
> >>  #  else
> >>      unsigned long int st_dev;
> >> @@ -131,7 +131,7 @@ struct stat64
> >>  
> >>  struct stat
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;
> >> @@ -189,7 +189,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;
> >> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
> >> index 4e8bd51b0a..09c53648b7 100644
> >> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
> >> @@ -26,7 +26,7 @@
> >>     The type `struct msg' is opaque.  */
> >>  struct msqid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_msqid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> >> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
> >> index d1a30e3164..0746684a7d 100644
> >> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a set of semaphores.  */
> >>  struct semid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_semid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm sem_perm;		/* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> >> index 8771164b57..c665af1874 100644
> >> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a shared memory segment.  */
> >>  struct shmid_ds
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_shmid64_ds_helper.h>
> >>  #else
> >>      struct ipc_perm shm_perm;		/* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
> >> index 672c7c6bb8..dab466d881 100644
> >> --- a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
> >> @@ -43,7 +43,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;		/* Device.  */
> >> @@ -88,7 +88,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;		/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
> >> index 6be5055e65..0d3e095c5d 100644
> >> --- a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
> >> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
> >> @@ -54,7 +54,7 @@
> >>  # define SO_TIMESTAMPNS_NEW 64
> >>  # define SO_TIMESTAMPING_NEW 65
> >>  
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> >>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> >>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> >> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
> >> index f6328399cd..20ed8dd9b8 100644
> >> --- a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
> >> @@ -28,7 +28,7 @@
> >>  #if __WORDSIZE == 32
> >>  struct stat
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -85,7 +85,7 @@ struct stat
> >>  # ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   include <bits/struct_stat_time64_helper.h>
> >>  #  else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
> >> index 830629cd37..44ae08265d 100644
> >> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
> >> @@ -26,7 +26,7 @@
> >>     The type `struct msg' is opaque.  */
> >>  struct msqid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_msqid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> >> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
> >> index 4370257557..ccee57c28b 100644
> >> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a set of semaphores.  */
> >>  struct semid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_semid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm sem_perm;   /* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> >> index da1b4b3c56..58145d0a5d 100644
> >> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a shared memory segment.  */
> >>  struct shmid_ds
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_shmid64_ds_helper.h>
> >>  #else
> >>      struct ipc_perm shm_perm;		/* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> >> index 9911c47bb2..e5c9024fb2 100644
> >> --- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
> >> @@ -65,7 +65,7 @@ struct stat
> >>  #else
> >>  struct stat
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -166,7 +166,7 @@ struct stat64
> >>  # else
> >>  struct stat64
> >>    {
> >> -#  ifdef __USE_TIME_BITS64
> >> +#  ifdef __USE_TIME64_REDIRECTS
> >>  #   include <bits/struct_stat_time64_helper.h>
> >>  #  else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
> >> index cbd4bc0f31..9ad0943982 100644
> >> --- a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
> >> @@ -28,7 +28,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -89,7 +89,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
> >> index 59958611c4..e7a6b684cc 100644
> >> --- a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
> >> +++ b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
> >> @@ -54,7 +54,7 @@
> >>  # define SO_TIMESTAMPNS_NEW 0x0042
> >>  # define SO_TIMESTAMPING_NEW 0x0043
> >>  
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> >>  #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> >>  #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
> >> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
> >> index 4e48634edc..9ce67b289d 100644
> >> --- a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
> >> @@ -28,7 +28,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;			/* Device.  */
> >> @@ -85,7 +85,7 @@ struct stat
> >>  #ifdef __USE_LARGEFILE64
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;			/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
> >> index db783c28d4..ed8d47c9b6 100644
> >> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
> >> @@ -26,7 +26,7 @@
> >>     The type `struct msg' is opaque.  */
> >>  struct msqid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_msqid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm msg_perm;	/* structure describing operation permission */
> >> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
> >> index 1c8a3693db..b9e729b8b4 100644
> >> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a set of semaphores.  */
> >>  struct semid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_semid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm sem_perm;   /* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> >> index 35a0cc36ab..7885d2ab25 100644
> >> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a shared memory segment.  */
> >>  struct shmid_ds
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_shmid64_ds_helper.h>
> >>  #else
> >>      struct ipc_perm shm_perm;		/* operation permission struct */
> >> diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
> >> index 9b51e3bd14..fc8dce45c8 100644
> >> --- a/sysdeps/unix/sysv/linux/sys/epoll.h
> >> +++ b/sysdeps/unix/sysv/linux/sys/epoll.h
> >> @@ -140,7 +140,7 @@ extern int epoll_pwait (int __epfd, struct epoll_event *__events,
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
> >>  			 int __maxevents, const struct timespec *__timeout,
> >>  			 const __sigset_t *__ss)
> >> diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h
> >> index b13b846261..79a9b31273 100644
> >> --- a/sysdeps/unix/sysv/linux/sys/prctl.h
> >> +++ b/sysdeps/unix/sysv/linux/sys/prctl.h
> >> @@ -38,7 +38,7 @@
> >>  __BEGIN_DECLS
> >>  
> >>  /* Control process execution.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int prctl (int __option, ...) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT
> >> diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h
> >> index 19d0cbfae0..f66ece306a 100644
> >> --- a/sysdeps/unix/sysv/linux/sys/timerfd.h
> >> +++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
> >> @@ -47,7 +47,7 @@ extern int timerfd_settime (int __ufd, int __flags,
> >>  			    const struct itimerspec *__utmr,
> >>  			    struct itimerspec *__otmr) __THROW;
> >>  
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # if defined(__REDIRECT_NTH)
> >>  extern int __REDIRECT_NTH (timerfd_settime,
> >>                             (int __ufd, int __flags,
> >> @@ -62,7 +62,7 @@ extern int __REDIRECT_NTH (timerfd_settime,
> >>  /* Return the next expiration time of UFD.  */
> >>  extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
> >>  
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # if defined(__REDIRECT_NTH)
> >>  extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
> >>                                               struct itimerspec *__otmr),
> >> diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
> >> index 28ce022253..568748d767 100644
> >> --- a/sysdeps/unix/sysv/linux/sys/timex.h
> >> +++ b/sysdeps/unix/sysv/linux/sys/timex.h
> >> @@ -54,7 +54,7 @@ struct ntptimeval
> >>  
> >>  __BEGIN_DECLS
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1));
> >>  extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1));
> >>  
> >> diff --git a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
> >> index 21aa315d8d..b8b580fbde 100644
> >> --- a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
> >> +++ b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
> >> @@ -25,7 +25,7 @@
> >>  
> >>  struct stat
> >>    {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/struct_stat_time64_helper.h>
> >>  #else
> >>      __dev_t st_dev;		/* Device.  */
> >> @@ -102,7 +102,7 @@ struct stat
> >>  /* Note stat64 has the same shape as stat for x86-64.  */
> >>  struct stat64
> >>    {
> >> -# ifdef __USE_TIME_BITS64
> >> +# ifdef __USE_TIME64_REDIRECTS
> >>  #  include <bits/struct_stat_time64_helper.h>
> >>  # else
> >>      __dev_t st_dev;		/* Device.  */
> >> diff --git a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
> >> index 9f3d170b65..81867c0316 100644
> >> --- a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
> >> +++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
> >> @@ -23,7 +23,7 @@
> >>  /* Data structure describing a set of semaphores.  */
> >>  struct semid_ds
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  # include <bits/types/struct_semid64_ds_helper.h>
> >>  #else
> >>    struct ipc_perm sem_perm;   /* operation permission struct */
> >> diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
> >> index d0388b0522..4178ad9955 100644
> >> --- a/sysvipc/sys/msg.h
> >> +++ b/sysvipc/sys/msg.h
> >> @@ -58,7 +58,7 @@ struct msgbuf
> >>  __BEGIN_DECLS
> >>  
> >>  /* Message queue control operation.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT_NTH
> >> diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
> >> index 5d9ec39296..812f1303b3 100644
> >> --- a/sysvipc/sys/sem.h
> >> +++ b/sysvipc/sys/sem.h
> >> @@ -48,7 +48,7 @@ struct sembuf
> >>  __BEGIN_DECLS
> >>  
> >>  /* Semaphore control operation.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT_NTH
> >> @@ -68,7 +68,7 @@ extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
> >>  
> >>  #ifdef __USE_GNU
> >>  /* Operate on semaphore with timeout.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
> >>  		       const struct timespec *__timeout) __THROW;
> >>  # else
> >> diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
> >> index 04191656d5..496e57ef45 100644
> >> --- a/sysvipc/sys/shm.h
> >> +++ b/sysvipc/sys/shm.h
> >> @@ -46,7 +46,7 @@ __BEGIN_DECLS
> >>     facility.  The definition is found in XPG4.2.  */
> >>  
> >>  /* Shared memory control operation.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT_NTH
> >> diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h
> >> index 489e81136d..1141015f27 100644
> >> --- a/time/bits/types/struct_timespec.h
> >> +++ b/time/bits/types/struct_timespec.h
> >> @@ -10,14 +10,14 @@
> >>     has nanoseconds instead of microseconds.  */
> >>  struct timespec
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>    __time64_t tv_sec;		/* Seconds.  */
> >>  #else
> >>    __time_t tv_sec;		/* Seconds.  */
> >>  #endif
> >>  #if __WORDSIZE == 64 \
> >>    || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \
> >> -  || (__TIMESIZE == 32 && !defined __USE_TIME_BITS64)
> >> +  || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS)
> >>    __syscall_slong_t tv_nsec;	/* Nanoseconds.  */
> >>  #else
> >>  # if __BYTE_ORDER == __BIG_ENDIAN
> >> diff --git a/time/bits/types/struct_timeval.h b/time/bits/types/struct_timeval.h
> >> index 3466137c35..0c8e88c82c 100644
> >> --- a/time/bits/types/struct_timeval.h
> >> +++ b/time/bits/types/struct_timeval.h
> >> @@ -7,7 +7,7 @@
> >>     microsecond but also has a range of years.  */
> >>  struct timeval
> >>  {
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>    __time64_t tv_sec;		/* Seconds.  */
> >>    __suseconds64_t tv_usec;	/* Microseconds.  */
> >>  #else
> >> diff --git a/time/bits/types/time_t.h b/time/bits/types/time_t.h
> >> index 84d67f6ac3..00cde92c62 100644
> >> --- a/time/bits/types/time_t.h
> >> +++ b/time/bits/types/time_t.h
> >> @@ -4,7 +4,7 @@
> >>  #include <bits/types.h>
> >>  
> >>  /* Returned by `time'.  */
> >> -#ifdef __USE_TIME_BITS64
> >> +#ifdef __USE_TIME64_REDIRECTS
> >>  typedef __time64_t time_t;
> >>  #else
> >>  typedef __time_t time_t;
> >> diff --git a/time/sys/time.h b/time/sys/time.h
> >> index c8708198a5..8c3d0c3022 100644
> >> --- a/time/sys/time.h
> >> +++ b/time/sys/time.h
> >> @@ -63,7 +63,7 @@ struct timezone
> >>     use localtime etc. instead.
> >>     This function itself is semi-obsolete;
> >>     most callers should use time or clock_gettime instead. */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern int gettimeofday (struct timeval *__restrict __tv,
> >>  			 void *__restrict __tz) __THROW __nonnull ((1));
> >>  #else
> >> @@ -77,7 +77,7 @@ extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv,
> >>  #endif
> >>  
> >>  #ifdef __USE_MISC
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Set the current time of day and timezone information.
> >>     This call is restricted to the super-user.
> >>     Setting the timezone in this way is obsolete, but we don't yet
> >> @@ -143,7 +143,7 @@ typedef enum __itimer_which __itimer_which_t;
> >>  typedef int __itimer_which_t;
> >>  #endif
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  /* Set *VALUE to the current setting of timer WHICH.
> >>     Return 0 on success, -1 on errors.  */
> >>  extern int getitimer (__itimer_which_t __which,
> >> @@ -184,7 +184,7 @@ extern int __REDIRECT_NTH (utimes, (const char *__file,
> >>  #endif
> >>  
> >>  #ifdef __USE_MISC
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Same as `utimes', but does not follow symbolic links.  */
> >>  extern int lutimes (const char *__file, const struct timeval __tvp[2])
> >>       __THROW __nonnull ((1));
> >> @@ -207,7 +207,7 @@ extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]),
> >>  #endif
> >>  
> >>  #ifdef __USE_GNU
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Change the access time of FILE relative to FD to TVP[0] and the
> >>     modification time of FILE to TVP[1].  If TVP is a null pointer, use
> >>     the current time instead.  Returns 0 on success, -1 on errors.  */
> >> diff --git a/time/time.h b/time/time.h
> >> index 1609aaeffa..3785dc608f 100644
> >> --- a/time/time.h
> >> +++ b/time/time.h
> >> @@ -71,7 +71,7 @@ __BEGIN_DECLS
> >>     The result / CLOCKS_PER_SEC is program time in seconds.  */
> >>  extern clock_t clock (void) __THROW;
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  /* Return the current time and put it in *TIMER if TIMER is not NULL.  */
> >>  extern time_t time (time_t *__timer) __THROW;
> >>  
> >> @@ -127,7 +127,7 @@ extern char *strptime_l (const char *__restrict __s,
> >>  #endif
> >>  
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  /* Return the `struct tm' representation of *TIMER
> >>     in Universal Coordinated Time (aka Greenwich Mean Time).  */
> >>  extern struct tm *gmtime (const time_t *__timer) __THROW;
> >> @@ -149,7 +149,7 @@ extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer),
> >>  
> >>  
> >>  #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Return the `struct tm' representation of *TIMER in UTC,
> >>     using *TP to store the result.  */
> >>  extern struct tm *gmtime_r (const time_t *__restrict __timer,
> >> @@ -180,7 +180,7 @@ extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t,
> >>  extern char *asctime (const struct tm *__tp) __THROW;
> >>  
> >>  /* Equivalent to `asctime (localtime (timer))'.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern char *ctime (const time_t *__timer) __THROW;
> >>  #else
> >>  # ifdef __REDIRECT_NTH
> >> @@ -199,7 +199,7 @@ extern char *asctime_r (const struct tm *__restrict __tp,
> >>  			char *__restrict __buf) __THROW;
> >>  
> >>  /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  extern char *ctime_r (const time_t *__restrict __timer,
> >>  		      char *__restrict __buf) __THROW;
> >>  #else
> >> @@ -242,7 +242,7 @@ extern long int timezone;
> >>  
> >>  
> >>  #if defined __USE_MISC || __GLIBC_USE (ISOC2X)
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Like `mktime', but for TP represents Universal Time, not local time.  */
> >>  extern time_t timegm (struct tm *__tp) __THROW;
> >>  # else
> >> @@ -259,7 +259,7 @@ extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
> >>  /* Miscellaneous functions many Unices inherited from the public domain
> >>     localtime package.  These are included only for compatibility.  */
> >>  
> >> -#ifndef __USE_TIME_BITS64
> >> +#ifndef __USE_TIME64_REDIRECTS
> >>  /* Another name for `mktime'.  */
> >>  extern time_t timelocal (struct tm *__tp) __THROW;
> >>  #else
> >> @@ -274,7 +274,7 @@ extern int dysize (int __year) __THROW  __attribute__ ((__const__));
> >>  
> >>  
> >>  #ifdef __USE_POSIX199309
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Pause execution for a number of nanoseconds.
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >> @@ -320,7 +320,7 @@ extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
> >>  
> >>     This function is a cancellation point and therefore not marked with
> >>     __THROW.  */
> >> -#  ifndef __USE_TIME_BITS64
> >> +#  ifndef __USE_TIME64_REDIRECTS
> >>  extern int clock_nanosleep (clockid_t __clock_id, int __flags,
> >>  			    const struct timespec *__req,
> >>  			    struct timespec *__rem);
> >> @@ -349,7 +349,7 @@ extern int timer_create (clockid_t __clock_id,
> >>  extern int timer_delete (timer_t __timerid) __THROW;
> >>  
> >>  /* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  extern int timer_settime (timer_t __timerid, int __flags,
> >>  			  const struct itimerspec *__restrict __value,
> >>  			  struct itimerspec *__restrict __ovalue) __THROW;
> >> @@ -379,7 +379,7 @@ extern int timer_getoverrun (timer_t __timerid) __THROW;
> >>  
> >>  
> >>  #ifdef __USE_ISOC11
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Set TS to calendar time based in time base BASE.  */
> >>  extern int timespec_get (struct timespec *__ts, int __base)
> >>       __THROW __nonnull ((1));
> >> @@ -395,7 +395,7 @@ extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base),
> >>  
> >>  
> >>  #if __GLIBC_USE (ISOC2X)
> >> -# ifndef __USE_TIME_BITS64
> >> +# ifndef __USE_TIME64_REDIRECTS
> >>  /* Set TS to resolution of time base BASE.  */
> >>  extern int timespec_getres (struct timespec *__ts, int __base)
> >>       __THROW;
> >>
> > 
> > 
>
Florian Weimer Jan. 29, 2024, 4:40 p.m. UTC | #4
* Andreas K. Huettel:

> When rebuilding a riscv32 qemu chroot with this patch I get errors similar to
>
> (python)
> ceval.c:(.text+0x272a): undefined reference to `__pthread_cond_timedwait64'
> collect2: error: ld returned 1 exit status
>
> (gnupg)
> /usr/lib/gcc/riscv32-unknown-linux-gnu/13/../../../../riscv32-unknown-linux-gnu/bin/ld: /usr/lib32/ilp32d/libnpth.so: undefined reference to `__pthread_mutex_timedlock64'

This could happen if you build against a mixed of old and new headers.
(Old headers which check __USE_TIME_BITS64, but a new header that
defines __USE_TIME_BITS64 because the architecture has time64.)

Thanks,
Florian
Jonathan Wakely Jan. 31, 2024, 12:34 p.m. UTC | #5
On 18/01/24 10:18 -0300, Adhemerval Zanella wrote:
>It was raised on libc-help [1] that some Linux kernel interfaces expect
>the libc to define __USE_TIME_BITS64 to indicate the time_t size for the
>kABI.  Different than defined by the initial y2038 design document [2],
>the __USE_TIME_BITS64 is only defined for ABIs that support more than
>one time_t size (by defining the _TIME_BITS for each module).

Libstdc++ needs a way to detect "the traditional ABI for this target
used 32-bit time_t but this translation unit is using the new 64-bit
ABI". Previously __USE_TIME_BITS64 served exactly that purpose. With
this patch it just seems to mean sizeof(time_t) == 64 which is not
useful, I can find that out for myself (and a __TIME_WIDTH__ macro or
similar would be better and more consistent with standard macros for
integer types like int32_t).

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99832 for the
libstdc++ issue. I don't like relying on an internal glibc macro like
__USE_TIME_BITS64 but I need _some_ way at preprocessing time (not
when libstdc++ is configured) to detect that the current translation
unit is using new 64-bit APIs *which are different from the historical
APIs on that target*.

Is there some semi-stable / semi-public API I can use to detect that?
Is this appropriate?
#if __GLIBC_PREREQ(2, 34) && __TIMESIZE==32 && _TIME_BITS==64
I think this says "the traditional time_t size is 32 but the user has
requested 64 in this TU, and glibc is new enough to honour that
request".

Tangentially,
https://www.gnu.org/software/libc/manual/html_node/64_002dbit-time-symbol-handling.html
still says "In a later change, the public API will allow user code to
choose the time size for a given compilation unit." which should have
been updated by now.


>The 64 bit time_t redirects are now enabled using a different internal
>define (__USE_TIME64_REDIRECTS). There is no expected change in semantic
>or code generation.
>
>Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
>arm-linux-gnueabi
>
>[1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html
>[2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
>--
>Changes from v2:
>* Only defined __USE_TIME_BITS64 when 64 bit time_t is used.
>
>Changes from v1:
>* Use __USE_TIME64_REDIRECTS to allow replace the current macro.
>---
> io/bits/poll2.h                               |  2 +-
> io/fcntl.h                                    |  2 +-
> io/fts.h                                      |  6 ++---
> io/ftw.h                                      | 12 +++++-----
> io/sys/poll.h                                 |  2 +-
> io/sys/stat.h                                 | 16 ++++++-------
> io/utime.h                                    |  4 ++--
> misc/sys/ioctl.h                              |  2 +-
> misc/sys/select.h                             |  4 ++--
> posix/glob.h                                  |  4 ++--
> posix/sched.h                                 |  2 +-
> posix/sys/wait.h                              |  4 ++--
> resolv/netdb.h                                |  2 +-
> resource/sys/resource.h                       |  2 +-
> rt/aio.h                                      |  4 ++--
> rt/mqueue.h                                   |  2 +-
> signal/signal.h                               |  2 +-
> socket/sys/socket.h                           | 14 +++++------
> support/timespec.h                            |  2 +-
> support/xtime.h                               |  2 +-
> support/xunistd.h                             |  2 +-
> sysdeps/generic/features-time64.h             |  2 ++
> sysdeps/nptl/pthread.h                        | 18 +++++++-------
> sysdeps/pthread/semaphore.h                   |  4 ++--
> sysdeps/pthread/threads.h                     |  6 ++---
> .../unix/sysv/linux/arm/bits/struct_stat.h    |  4 ++--
> .../unix/sysv/linux/bits/socket-constants.h   |  2 +-
> sysdeps/unix/sysv/linux/bits/time.h           |  2 +-
> sysdeps/unix/sysv/linux/bits/timex.h          |  2 +-
> .../sysv/linux/bits/types/struct_msqid_ds.h   |  2 +-
> .../sysv/linux/bits/types/struct_semid_ds.h   |  2 +-
> .../sysv/linux/bits/types/struct_shmid_ds.h   |  2 +-
> .../unix/sysv/linux/csky/bits/struct_stat.h   |  4 ++--
> sysdeps/unix/sysv/linux/features-time64.h     |  9 +++++--
> .../sysv/linux/hppa/bits/socket-constants.h   |  2 +-
> .../unix/sysv/linux/hppa/bits/struct_stat.h   |  4 ++--
> .../linux/hppa/bits/types/struct_msqid_ds.h   |  2 +-
> .../linux/hppa/bits/types/struct_semid_ds.h   |  2 +-
> .../linux/hppa/bits/types/struct_shmid_ds.h   |  2 +-
> .../unix/sysv/linux/m68k/bits/struct_stat.h   |  4 ++--
> .../sysv/linux/microblaze/bits/struct_stat.h  |  6 ++---
> .../sysv/linux/mips/bits/socket-constants.h   |  2 +-
> .../unix/sysv/linux/mips/bits/struct_stat.h   |  8 +++----
> .../linux/mips/bits/types/struct_msqid_ds.h   |  2 +-
> .../linux/mips/bits/types/struct_semid_ds.h   |  2 +-
> .../linux/mips/bits/types/struct_shmid_ds.h   |  2 +-
> .../unix/sysv/linux/nios2/bits/struct_stat.h  |  4 ++--
> .../linux/powerpc/bits/socket-constants.h     |  2 +-
> .../sysv/linux/powerpc/bits/struct_stat.h     |  4 ++--
> .../powerpc/bits/types/struct_msqid_ds.h      |  2 +-
> .../powerpc/bits/types/struct_semid_ds.h      |  2 +-
> .../powerpc/bits/types/struct_shmid_ds.h      |  2 +-
> .../unix/sysv/linux/s390/bits/struct_stat.h   |  4 ++--
> sysdeps/unix/sysv/linux/sh/bits/struct_stat.h |  4 ++--
> .../sysv/linux/sparc/bits/socket-constants.h  |  2 +-
> .../unix/sysv/linux/sparc/bits/struct_stat.h  |  4 ++--
> .../linux/sparc/bits/types/struct_msqid_ds.h  |  2 +-
> .../linux/sparc/bits/types/struct_semid_ds.h  |  2 +-
> .../linux/sparc/bits/types/struct_shmid_ds.h  |  2 +-
> sysdeps/unix/sysv/linux/sys/epoll.h           |  2 +-
> sysdeps/unix/sysv/linux/sys/prctl.h           |  2 +-
> sysdeps/unix/sysv/linux/sys/timerfd.h         |  4 ++--
> sysdeps/unix/sysv/linux/sys/timex.h           |  2 +-
> .../unix/sysv/linux/x86/bits/struct_stat.h    |  4 ++--
> .../linux/x86/bits/types/struct_semid_ds.h    |  2 +-
> sysvipc/sys/msg.h                             |  2 +-
> sysvipc/sys/sem.h                             |  4 ++--
> sysvipc/sys/shm.h                             |  2 +-
> time/bits/types/struct_timespec.h             |  4 ++--
> time/bits/types/struct_timeval.h              |  2 +-
> time/bits/types/time_t.h                      |  2 +-
> time/sys/time.h                               | 10 ++++----
> time/time.h                                   | 24 +++++++++----------
> 73 files changed, 149 insertions(+), 142 deletions(-)
>
>diff --git a/io/bits/poll2.h b/io/bits/poll2.h
>index 6152a8c5e4..efc8b85403 100644
>--- a/io/bits/poll2.h
>+++ b/io/bits/poll2.h
>@@ -43,7 +43,7 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
>
>
> #ifdef __USE_GNU
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
> 				       const struct timespec *__timeout,
> 				       const __sigset_t *__ss), __ppoll64);
>diff --git a/io/fcntl.h b/io/fcntl.h
>index 9cee0b5900..0a493d1dd3 100644
>--- a/io/fcntl.h
>+++ b/io/fcntl.h
>@@ -172,7 +172,7 @@ typedef __pid_t pid_t;
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> # ifndef __USE_FILE_OFFSET64
> extern int fcntl (int __fd, int __cmd, ...);
> # else
>diff --git a/io/fts.h b/io/fts.h
>index 61f95bb441..97a031ebbd 100644
>--- a/io/fts.h
>+++ b/io/fts.h
>@@ -187,7 +187,7 @@ FTSENT	*fts_read (FTS *);
> int	 fts_set (FTS *, FTSENT *, int) __THROW;
> #else
> # ifdef __REDIRECT
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> FTSENT	*__REDIRECT (fts_children, (FTS *, int), fts64_children);
> int	 __REDIRECT (fts_close, (FTS *), fts64_close);
> FTS	*__REDIRECT (fts_open, (char * const *, int,
>@@ -206,7 +206,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
> 			 __fts64_set_time64);
> #  endif
> # else
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> #   define fts_children fts64_children
> #   define fts_close fts64_close
> #   define fts_open fts64_open
>@@ -217,7 +217,7 @@ int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
> # endif
> #endif
> #ifdef __USE_LARGEFILE64
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> FTSENT64 *fts64_children (FTS64 *, int);
> int	  fts64_close (FTS64 *);
> FTS64	 *fts64_open (char * const *, int,
>diff --git a/io/ftw.h b/io/ftw.h
>index e4d1b84d53..39cf595b27 100644
>--- a/io/ftw.h
>+++ b/io/ftw.h
>@@ -137,7 +137,7 @@ extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
>      __nonnull ((1, 2));
> #else
> # ifdef __REDIRECT
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
> 			     int __descriptors), ftw64) __nonnull ((1, 2));
> #  else
>@@ -146,7 +146,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>      __nonnull ((1, 2));
> #  endif
> # else
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> #   define ftw ftw64
> #  else
> #   define ftw __ftw64_time64
>@@ -154,7 +154,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
> # endif
> #endif
> #ifdef __USE_LARGEFILE64
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int ftw64 (const char *__dir, __ftw64_func_t __func,
> 		  int __descriptors) __nonnull ((1, 2));
> # else
>@@ -180,7 +180,7 @@ extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
> 		 int __flag) __nonnull ((1, 2));
> # else
> #  ifdef __REDIRECT
>-#   ifndef __USE_TIME_BITS64
>+#   ifndef __USE_TIME64_REDIRECTS
> extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
> 			      int __descriptors, int __flag), nftw64)
>      __nonnull ((1, 2));
>@@ -190,7 +190,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>      __nonnull ((1, 2));
> #   endif
> #  else
>-#   ifndef __USE_TIME_BITS64
>+#   ifndef __USE_TIME64_REDIRECTS
> #    define nftw nftw64
> #   else
> #    define nftw __nftw64_time64
>@@ -198,7 +198,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
> #  endif
> # endif
> # ifdef __USE_LARGEFILE64
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int nftw64 (const char *__dir, __nftw64_func_t __func,
> 		   int __descriptors, int __flag) __nonnull ((1, 2));
> #  else
>diff --git a/io/sys/poll.h b/io/sys/poll.h
>index 7858fad6b9..c324ff5dad 100644
>--- a/io/sys/poll.h
>+++ b/io/sys/poll.h
>@@ -66,7 +66,7 @@ extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
> 		  const __sigset_t *__ss)
>     __fortified_attr_access (__write_only__, 1, 2);
>
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  ifdef __REDIRECT
> extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
>                                const struct timespec *__timeout,
>diff --git a/io/sys/stat.h b/io/sys/stat.h
>index 1fa6d6e62e..3b4ba80132 100644
>--- a/io/sys/stat.h
>+++ b/io/sys/stat.h
>@@ -209,7 +209,7 @@ extern int stat (const char *__restrict __file,
>    that file descriptor FD is open on and put them in BUF.  */
> extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
> #else
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  ifdef __REDIRECT_NTH
> extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
> 				  struct stat *__restrict __buf),
>@@ -236,7 +236,7 @@ extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
> # endif
> #endif
> #ifdef __USE_LARGEFILE64
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int stat64 (const char *__restrict __file,
> 		   struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
> extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
>@@ -265,7 +265,7 @@ extern int fstatat (int __fd, const char *__restrict __file,
> 		    struct stat *__restrict __buf, int __flag)
>      __THROW __nonnull ((2, 3));
> # else
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   ifdef __REDIRECT_NTH
> extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
> 				     struct stat *__restrict __buf,
>@@ -287,7 +287,7 @@ extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
> # endif
>
> # ifdef __USE_LARGEFILE64
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int fstatat64 (int __fd, const char *__restrict __file,
> 		      struct stat64 *__restrict __buf, int __flag)
>      __THROW __nonnull ((2, 3));
>@@ -313,7 +313,7 @@ extern int __REDIRECT_NTH (fstatat64, (int __fd,
> extern int lstat (const char *__restrict __file,
> 		  struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
> # else
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   ifdef __REDIRECT_NTH
> extern int __REDIRECT_NTH (lstat,
> 			   (const char *__restrict __file,
>@@ -334,7 +334,7 @@ extern int __REDIRECT_NTH (lstat,
> #  endif
> # endif
> # ifdef __USE_LARGEFILE64
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int lstat64 (const char *__restrict __file,
> 		    struct stat64 *__restrict __buf)
>      __THROW __nonnull ((1, 2));
>@@ -427,7 +427,7 @@ extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
> #endif
> 
> #ifdef __USE_ATFILE
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Set file access and modification times relative to directory file
>    descriptor.  */
> extern int utimensat (int __fd, const char *__path,
>@@ -447,7 +447,7 @@ extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
> #endif
>
> #ifdef __USE_XOPEN2K8
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Set file access and modification times of the file associated with FD.  */
> extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
>
>diff --git a/io/utime.h b/io/utime.h
>index c5eacedd6a..1c7587d9c1 100644
>--- a/io/utime.h
>+++ b/io/utime.h
>@@ -35,7 +35,7 @@ __BEGIN_DECLS
> /* Structure describing file times.  */
> struct utimbuf
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
>     __time64_t actime;		/* Access time.  */
>     __time64_t modtime;		/* Modification time.  */
> #else
>@@ -46,7 +46,7 @@ struct utimbuf
>
> /* Set the access and modification times of FILE to those given in
>    *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int utime (const char *__file,
> 		  const struct utimbuf *__file_times)
>      __THROW __nonnull ((1));
>diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
>index 3f2338ddd3..ea6583e122 100644
>--- a/misc/sys/ioctl.h
>+++ b/misc/sys/ioctl.h
>@@ -38,7 +38,7 @@ __BEGIN_DECLS
> /* Perform the I/O control operation specified by REQUEST on FD.
>    One argument may follow; its presence and type depend on REQUEST.
>    Return value depends on REQUEST.  Usually -1 indicates error.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
> #else
> # ifdef __REDIRECT
>diff --git a/misc/sys/select.h b/misc/sys/select.h
>index e6a0c1b8b2..2e45e94bc1 100644
>--- a/misc/sys/select.h
>+++ b/misc/sys/select.h
>@@ -98,7 +98,7 @@ __BEGIN_DECLS
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int select (int __nfds, fd_set *__restrict __readfds,
> 		   fd_set *__restrict __writefds,
> 		   fd_set *__restrict __exceptfds,
>@@ -123,7 +123,7 @@ extern int __REDIRECT (select,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int pselect (int __nfds, fd_set *__restrict __readfds,
> 		    fd_set *__restrict __writefds,
> 		    fd_set *__restrict __exceptfds,
>diff --git a/posix/glob.h b/posix/glob.h
>index 3406662840..b6bba0fbcd 100644
>--- a/posix/glob.h
>+++ b/posix/glob.h
>@@ -150,7 +150,7 @@ extern int glob (const char *__restrict __pattern, int __flags,
> /* Free storage allocated in PGLOB by a previous `glob' call.  */
> extern void globfree (glob_t *__pglob) __THROW;
> #else
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
> 				    int __flags,
> 				    int (*__errfunc) (const char *, int),
>@@ -170,7 +170,7 @@ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
> #endif
>
> #ifdef __USE_LARGEFILE64
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
> 				      int __flags,
> 				      int (*__errfunc) (const char *, int),
>diff --git a/posix/sched.h b/posix/sched.h
>index 3eac206f35..49f504a488 100644
>--- a/posix/sched.h
>+++ b/posix/sched.h
>@@ -74,7 +74,7 @@ extern int sched_get_priority_max (int __algorithm) __THROW;
> extern int sched_get_priority_min (int __algorithm) __THROW;
>
> /* Get the SCHED_RR interval for the named process.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
> #else
> # ifdef __REDIRECT_NTH
>diff --git a/posix/sys/wait.h b/posix/sys/wait.h
>index edbb7b4392..1f44ee1145 100644
>--- a/posix/sys/wait.h
>+++ b/posix/sys/wait.h
>@@ -139,7 +139,7 @@ struct rusage;
>    nil, store information about the child's resource usage there.  If the
>    WUNTRACED bit is set in OPTIONS, return status for stopped children;
>    otherwise don't.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern __pid_t wait3 (int *__stat_loc, int __options,
> 		      struct rusage * __usage) __THROWNL;
> # else
>@@ -154,7 +154,7 @@ extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options,
> #endif
>
> #ifdef __USE_MISC
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* PID is like waitpid.  Other args are like wait3.  */
> extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options,
> 		      struct rusage *__usage) __THROWNL;
>diff --git a/resolv/netdb.h b/resolv/netdb.h
>index 14228b0d95..b7f473fafe 100644
>--- a/resolv/netdb.h
>+++ b/resolv/netdb.h
>@@ -701,7 +701,7 @@ extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
> extern int gai_suspend (const struct gaicb *const __list[], int __ent,
> 			const struct timespec *__timeout);
>
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  if defined(__REDIRECT)
> extern int __REDIRECT (gai_suspend, (const struct gaicb *const __list[],
>                                      int __ent,
>diff --git a/resource/sys/resource.h b/resource/sys/resource.h
>index a5634ba715..b0bf751e92 100644
>--- a/resource/sys/resource.h
>+++ b/resource/sys/resource.h
>@@ -88,7 +88,7 @@ extern int setrlimit64 (__rlimit_resource_t __resource,
>    and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
> extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
>
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # if defined(__REDIRECT_NTH)
> extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
>                                        struct rusage *__usage),
>diff --git a/rt/aio.h b/rt/aio.h
>index 37d19abf16..e71435733f 100644
>--- a/rt/aio.h
>+++ b/rt/aio.h
>@@ -193,7 +193,7 @@ extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
> extern int __REDIRECT_NTH (aio_cancel,
> 			   (int __fildes, struct aiocb *__aiocbp),
> 			   aio_cancel64);
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> extern int __REDIRECT_NTH (aio_suspend,
> 			   (const struct aiocb *const __list[], int __nent,
> 			    const struct timespec *__restrict __timeout),
>@@ -215,7 +215,7 @@ extern int __REDIRECT_NTH (aio_fsync,
> #  define aio_error aio_error64
> #  define aio_return aio_return64
> #  define aio_cancel aio_cancel64
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   define aio_suspend __aio_suspend_time64
> #  else
> #   define aio_suspend aio_suspend64
>diff --git a/rt/mqueue.h b/rt/mqueue.h
>index 787cc36df2..fd6fff4bb2 100644
>--- a/rt/mqueue.h
>+++ b/rt/mqueue.h
>@@ -71,7 +71,7 @@ extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
> 		    unsigned int __msg_prio) __nonnull ((2));
>
> #ifdef __USE_XOPEN2K
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Receive the oldest from highest priority messages in message queue
>    MQDES, stop waiting if ABS_TIMEOUT expires.  */
> extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
>diff --git a/signal/signal.h b/signal/signal.h
>index f37499ce60..8e07b041b1 100644
>--- a/signal/signal.h
>+++ b/signal/signal.h
>@@ -269,7 +269,7 @@ extern int sigwaitinfo (const sigset_t *__restrict __set,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int sigtimedwait (const sigset_t *__restrict __set,
> 			 siginfo_t *__restrict __info,
> 			 const struct timespec *__restrict __timeout)
>diff --git a/socket/sys/socket.h b/socket/sys/socket.h
>index 366eaab845..463cf3291b 100644
>--- a/socket/sys/socket.h
>+++ b/socket/sys/socket.h
>@@ -170,7 +170,7 @@ extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
> 			int __flags);
> #else
>@@ -191,7 +191,7 @@ extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
> 		     unsigned int __vlen, int __flags);
> # else
>@@ -204,7 +204,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
> 			 unsigned int __vlen, int __flags);
> #   define sendmmsg __sendmmsg64
> #  endif
>-# endif	 /* __USE_TIME_BITS64 */
>+# endif	 /* __USE_TIME64_REDIRECTS */
> #endif /* __USE_GNU */
>
> /* Receive a message as described by MESSAGE from socket FD.
>@@ -212,7 +212,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
> #else
> # ifdef __REDIRECT
>@@ -231,7 +231,7 @@ extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags);
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
> 		     unsigned int __vlen, int __flags,
> 		     struct timespec *__tmo);
>@@ -251,7 +251,7 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
> /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
>    into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
>    actual length.  Returns 0 on success, -1 for errors.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int getsockopt (int __fd, int __level, int __optname,
> 		       void *__restrict __optval,
> 		       socklen_t *__restrict __optlen) __THROW;
>@@ -273,7 +273,7 @@ extern int __getsockopt64 (int __fd, int __level, int __optname,
> /* Set socket FD's option OPTNAME at protocol level LEVEL
>    to *OPTVAL (which is OPTLEN bytes long).
>    Returns 0 on success, -1 for errors.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int setsockopt (int __fd, int __level, int __optname,
> 		       const void *__optval, socklen_t __optlen) __THROW;
> #else
>diff --git a/support/timespec.h b/support/timespec.h
>index 42f32bcc2c..5ccc7163a5 100644
>--- a/support/timespec.h
>+++ b/support/timespec.h
>@@ -35,7 +35,7 @@ make_timespec (time_t s, long int ns)
>
> enum { TIMESPEC_HZ = 1000000000 };
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> struct timespec timespec_add (struct timespec, struct timespec)
>   __attribute__((const));
> struct timespec timespec_sub (struct timespec, struct timespec)
>diff --git a/support/xtime.h b/support/xtime.h
>index 5200eef2e0..9961899634 100644
>--- a/support/xtime.h
>+++ b/support/xtime.h
>@@ -30,7 +30,7 @@ __BEGIN_DECLS
> /* The following functions call the corresponding libc functions and
>    terminate the process on error.  */
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> void xclock_gettime (clockid_t clock, struct timespec *ts);
> void xclock_settime (clockid_t clock, const struct timespec *ts);
> #else
>diff --git a/support/xunistd.h b/support/xunistd.h
>index b5e8c2f420..13be9a46a3 100644
>--- a/support/xunistd.h
>+++ b/support/xunistd.h
>@@ -36,7 +36,7 @@ pid_t xwaitpid (pid_t, int *status, int flags);
> void xpipe (int[2]);
> void xdup2 (int, int);
> int xopen (const char *path, int flags, mode_t);
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> # ifdef __USE_FILE_OFFSET64
> void xstat (const char *path, struct stat *);
> void xlstat (const char *path, struct stat *);
>diff --git a/sysdeps/generic/features-time64.h b/sysdeps/generic/features-time64.h
>index 4d38b8ba76..4d1c8319d4 100644
>--- a/sysdeps/generic/features-time64.h
>+++ b/sysdeps/generic/features-time64.h
>@@ -17,3 +17,5 @@
>    <https://www.gnu.org/licenses/>.  */
>
> /* The generic configuration only support _TIME_BITS=32.  */
>+#define __USE_TIME_BITS64       0
>+#define __USE_TIME64_REDIRECTS  0
>diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
>index 1607fdf29a..3d4f4a756c 100644
>--- a/sysdeps/nptl/pthread.h
>+++ b/sysdeps/nptl/pthread.h
>@@ -223,7 +223,7 @@ extern int pthread_join (pthread_t __th, void **__thread_return);
>    the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
> extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
>
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Make calling thread wait for termination of the thread TH, but only
>    until TIMEOUT.  The exit status of the thread is stored in
>    *THREAD_RETURN, if THREAD_RETURN is not NULL.
>@@ -796,7 +796,7 @@ extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
>
> #ifdef __USE_XOPEN2K
> /* Wait until lock becomes available, or specified time passes. */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
> 				    const struct timespec *__restrict
> 				    __abstime) __THROWNL __nonnull ((1, 2));
>@@ -813,7 +813,7 @@ extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
> #endif
>
> #ifdef __USE_GNU
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
> 				    clockid_t __clockid,
> 				    const struct timespec *__restrict
>@@ -982,7 +982,7 @@ extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
>
> # ifdef __USE_XOPEN2K
> /* Try to acquire read lock for RWLOCK or return after specified time.  */
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
> 				       const struct timespec *__restrict
> 				       __abstime) __THROWNL __nonnull ((1, 2));
>@@ -1000,7 +1000,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
> # endif
>
> # ifdef __USE_GNU
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
> 				       clockid_t __clockid,
> 				       const struct timespec *__restrict
>@@ -1029,7 +1029,7 @@ extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
>
> # ifdef __USE_XOPEN2K
> /* Try to acquire write lock for RWLOCK or return after specified time.  */
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
> 				       const struct timespec *__restrict
> 				       __abstime) __THROWNL __nonnull ((1, 2));
>@@ -1047,7 +1047,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
> # endif
>
> # ifdef __USE_GNU
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
> 				       clockid_t __clockid,
> 				       const struct timespec *__restrict
>@@ -1141,7 +1141,7 @@ extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
> 				   pthread_mutex_t *__restrict __mutex,
> 				   const struct timespec *__restrict __abstime)
>@@ -1167,7 +1167,7 @@ extern int __REDIRECT (pthread_cond_timedwait,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW. */
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
> 				   pthread_mutex_t *__restrict __mutex,
> 				   __clockid_t __clock_id,
>diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
>index c75ca4ce6d..8a09633699 100644
>--- a/sysdeps/pthread/semaphore.h
>+++ b/sysdeps/pthread/semaphore.h
>@@ -59,7 +59,7 @@ extern int sem_wait (sem_t *__sem) __nonnull ((1));
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int sem_timedwait (sem_t *__restrict __sem,
> 			  const struct timespec *__restrict __abstime)
>   __nonnull ((1, 2));
>@@ -77,7 +77,7 @@ extern int __REDIRECT (sem_timedwait,
> #endif
>
> #ifdef __USE_GNU
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int sem_clockwait (sem_t *__restrict __sem,
> 			  clockid_t clock,
> 			  const struct timespec *__restrict __abstime)
>diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
>index c5410b5c3a..7cade24e1f 100644
>--- a/sysdeps/pthread/threads.h
>+++ b/sysdeps/pthread/threads.h
>@@ -90,7 +90,7 @@ extern thrd_t thrd_current (void);
>    __TIME_POINT.  The current thread may resume if receives a signal.  In
>    that case, if __REMAINING is not NULL, the remaining time is stored in
>    the object pointed by it.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int thrd_sleep (const struct timespec *__time_point,
> 		       struct timespec *__remaining);
> #else
>@@ -143,7 +143,7 @@ extern int mtx_lock (mtx_t *__mutex);
> /* Block the current thread until the mutex pointed by __MUTEX is unlocked
>    or time pointed by __TIME_POINT is reached.  In case the mutex is unlock,
>    the current thread will not be blocked.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int mtx_timedlock (mtx_t *__restrict __mutex,
> 			  const struct timespec *__restrict __time_point);
> #else
>@@ -194,7 +194,7 @@ extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex);
> /* Block current thread on the condition variable until condition variable
>    pointed by __COND is signaled or time pointed by __TIME_POINT is
>    reached.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int cnd_timedwait (cnd_t *__restrict __cond,
> 			  mtx_t *__restrict __mutex,
> 			  const struct timespec *__restrict __time_point);
>diff --git a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>index 255feaa8cb..1fc5917b8e 100644
>--- a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>@@ -28,7 +28,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;			/* Device.  */
>@@ -89,7 +89,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
>index d997dbf594..b2102d3abf 100644
>--- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
>+++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
>@@ -64,7 +64,7 @@
> #  define SO_TIMESTAMPNS_NEW 64
> #  define SO_TIMESTAMPING_NEW 65
>
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   define SO_RCVTIMEO SO_RCVTIMEO_NEW
> #   define SO_SNDTIMEO SO_SNDTIMEO_NEW
> #   define SO_TIMESTAMP SO_TIMESTAMP_NEW
>diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
>index b70ba58a7d..cab4057971 100644
>--- a/sysdeps/unix/sysv/linux/bits/time.h
>+++ b/sysdeps/unix/sysv/linux/bits/time.h
>@@ -77,7 +77,7 @@ __BEGIN_DECLS
> /* Tune a POSIX clock.  */
> extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2));
>
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # if defined(__REDIRECT_NTH)
> extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
>                                            struct timex *__utx),
>diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h
>index 398d8094f2..03ccde6d0a 100644
>--- a/sysdeps/unix/sysv/linux/bits/timex.h
>+++ b/sysdeps/unix/sysv/linux/bits/timex.h
>@@ -25,7 +25,7 @@
>
> struct timex
> {
>-# if defined __USE_TIME_BITS64 || (__TIMESIZE == 64 && __WORDSIZE == 32)
>+# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32)
>   unsigned int modes;          /* mode selector */
>   int :32;                     /* pad */
>   long long offset;            /* time offset (usec) */
>diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>index fae50281c7..86296ca922 100644
>--- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>+++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>@@ -26,7 +26,7 @@
>    The type `struct msg' is opaque.  */
> struct msqid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_msqid64_ds_helper.h>
> #else
>   struct ipc_perm msg_perm;	/* structure describing operation permission */
>diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>index 3c277ed1d8..2ac89b3ce4 100644
>--- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>+++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a set of semaphores.  */
> struct semid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_semid64_ds_helper.h>
> #else
>   struct ipc_perm sem_perm;        /* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>index 09de0b4e3a..1012ed0317 100644
>--- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>+++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a shared memory segment.  */
> struct shmid_ds
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_shmid64_ds_helper.h>
> #else
>     struct ipc_perm shm_perm;		/* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>index 4b4822d6d0..47a9f0aaff 100644
>--- a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>@@ -43,7 +43,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;		/* Device.  */
>@@ -88,7 +88,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;		/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/features-time64.h b/sysdeps/unix/sysv/linux/features-time64.h
>index dd3442c2ea..8d573cd23e 100644
>--- a/sysdeps/unix/sysv/linux/features-time64.h
>+++ b/sysdeps/unix/sysv/linux/features-time64.h
>@@ -24,9 +24,8 @@
> # if _TIME_BITS == 64
> #  if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
> #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
>-#  elif __TIMESIZE == 32
>-#   define __USE_TIME_BITS64	1
> #  endif
>+#  define __USE_TIME_BITS64	1
> # elif _TIME_BITS == 32
> #  if __TIMESIZE > 32
> #   error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
>@@ -34,4 +33,10 @@
> # else
> #  error Invalid _TIME_BITS value (can only be 32 or 64-bit)
> # endif
>+#elif __TIMESIZE == 64
>+# define __USE_TIME_BITS64      1
>+#endif
>+
>+#if defined __USE_TIME_BITS64 && __TIMESIZE == 32
>+# define __USE_TIME64_REDIRECTS 1
> #endif
>diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>index 58b523d03a..80a76a17dc 100644
>--- a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>+++ b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>@@ -54,7 +54,7 @@
> # define SO_TIMESTAMPNS_NEW 0x4039
> # define SO_TIMESTAMPING_NEW 0x403A
>
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>diff --git a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>index 069efdbc55..67f7c110cd 100644
>--- a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>@@ -28,7 +28,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;			/* Device.  */
>@@ -89,7 +89,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>index 2bc7cac06d..4995e0a4a5 100644
>--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>@@ -26,7 +26,7 @@
>    The type `struct msg' is opaque.  */
> struct msqid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_msqid64_ds_helper.h>
> #else
>   struct ipc_perm msg_perm;	/* structure describing operation permission */
>diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>index dd8fbebcf4..df88949dc2 100644
>--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a set of semaphores.  */
> struct semid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_semid64_ds_helper.h>
> #else
>   struct ipc_perm sem_perm;   /* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>index 58ac572b6e..cb3b0303aa 100644
>--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a shared memory segment.  */
> struct shmid_ds
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_shmid64_ds_helper.h>
> #else
>     struct ipc_perm shm_perm;		/* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>index 3b1db157bc..2b662668e8 100644
>--- a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>@@ -25,7 +25,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;			/* Device.  */
>@@ -86,7 +86,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>index 0f4693fb1f..04686f30ec 100644
>--- a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>@@ -26,7 +26,7 @@
> #ifndef __USE_FILE_OFFSET64
> struct stat
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>         __dev_t         st_dev;     /* Device.  */
>@@ -74,7 +74,7 @@ struct stat
>  * create one ifdef to separate stats structures.  */
> struct stat
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>         unsigned long long      st_dev;     /* Device.  */
>@@ -119,7 +119,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
> {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>         unsigned long long      st_dev;     /* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>index c6908a2793..77ffc8b890 100644
>--- a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>+++ b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>@@ -54,7 +54,7 @@
> # define SO_TIMESTAMPNS_NEW 64
> # define SO_TIMESTAMPING_NEW 65
>
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>diff --git a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>index 277ebad9b6..26682f8d4f 100644
>--- a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>@@ -29,7 +29,7 @@
> /* Structure describing file characteristics.  */
> struct stat
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     unsigned long int st_dev;
>@@ -88,7 +88,7 @@ struct stat
> # ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   include <bits/struct_stat_time64_helper.h>
> #  else
>     unsigned long int st_dev;
>@@ -131,7 +131,7 @@ struct stat64
>
> struct stat
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;
>@@ -189,7 +189,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;
>diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>index 4e8bd51b0a..09c53648b7 100644
>--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>@@ -26,7 +26,7 @@
>    The type `struct msg' is opaque.  */
> struct msqid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_msqid64_ds_helper.h>
> #else
>   struct ipc_perm msg_perm;	/* structure describing operation permission */
>diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>index d1a30e3164..0746684a7d 100644
>--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a set of semaphores.  */
> struct semid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_semid64_ds_helper.h>
> #else
>   struct ipc_perm sem_perm;		/* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>index 8771164b57..c665af1874 100644
>--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a shared memory segment.  */
> struct shmid_ds
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_shmid64_ds_helper.h>
> #else
>     struct ipc_perm shm_perm;		/* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>index 672c7c6bb8..dab466d881 100644
>--- a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>@@ -43,7 +43,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;		/* Device.  */
>@@ -88,7 +88,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;		/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>index 6be5055e65..0d3e095c5d 100644
>--- a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>+++ b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>@@ -54,7 +54,7 @@
> # define SO_TIMESTAMPNS_NEW 64
> # define SO_TIMESTAMPING_NEW 65
>
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>index f6328399cd..20ed8dd9b8 100644
>--- a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>@@ -28,7 +28,7 @@
> #if __WORDSIZE == 32
> struct stat
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>@@ -85,7 +85,7 @@ struct stat
> # ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   include <bits/struct_stat_time64_helper.h>
> #  else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>index 830629cd37..44ae08265d 100644
>--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>@@ -26,7 +26,7 @@
>    The type `struct msg' is opaque.  */
> struct msqid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_msqid64_ds_helper.h>
> #else
>   struct ipc_perm msg_perm;	/* structure describing operation permission */
>diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>index 4370257557..ccee57c28b 100644
>--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a set of semaphores.  */
> struct semid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_semid64_ds_helper.h>
> #else
>   struct ipc_perm sem_perm;   /* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>index da1b4b3c56..58145d0a5d 100644
>--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a shared memory segment.  */
> struct shmid_ds
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_shmid64_ds_helper.h>
> #else
>     struct ipc_perm shm_perm;		/* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>index 9911c47bb2..e5c9024fb2 100644
>--- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>@@ -65,7 +65,7 @@ struct stat
> #else
> struct stat
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>@@ -166,7 +166,7 @@ struct stat64
> # else
> struct stat64
>   {
>-#  ifdef __USE_TIME_BITS64
>+#  ifdef __USE_TIME64_REDIRECTS
> #   include <bits/struct_stat_time64_helper.h>
> #  else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>index cbd4bc0f31..9ad0943982 100644
>--- a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>@@ -28,7 +28,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;			/* Device.  */
>@@ -89,7 +89,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>index 59958611c4..e7a6b684cc 100644
>--- a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>+++ b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>@@ -54,7 +54,7 @@
> # define SO_TIMESTAMPNS_NEW 0x0042
> # define SO_TIMESTAMPING_NEW 0x0043
>
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>diff --git a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>index 4e48634edc..9ce67b289d 100644
>--- a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>@@ -28,7 +28,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;			/* Device.  */
>@@ -85,7 +85,7 @@ struct stat
> #ifdef __USE_LARGEFILE64
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;			/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>index db783c28d4..ed8d47c9b6 100644
>--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>@@ -26,7 +26,7 @@
>    The type `struct msg' is opaque.  */
> struct msqid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_msqid64_ds_helper.h>
> #else
>   struct ipc_perm msg_perm;	/* structure describing operation permission */
>diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>index 1c8a3693db..b9e729b8b4 100644
>--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a set of semaphores.  */
> struct semid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_semid64_ds_helper.h>
> #else
>   struct ipc_perm sem_perm;   /* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>index 35a0cc36ab..7885d2ab25 100644
>--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a shared memory segment.  */
> struct shmid_ds
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_shmid64_ds_helper.h>
> #else
>     struct ipc_perm shm_perm;		/* operation permission struct */
>diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
>index 9b51e3bd14..fc8dce45c8 100644
>--- a/sysdeps/unix/sysv/linux/sys/epoll.h
>+++ b/sysdeps/unix/sysv/linux/sys/epoll.h
>@@ -140,7 +140,7 @@ extern int epoll_pwait (int __epfd, struct epoll_event *__events,
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
> 			 int __maxevents, const struct timespec *__timeout,
> 			 const __sigset_t *__ss)
>diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h
>index b13b846261..79a9b31273 100644
>--- a/sysdeps/unix/sysv/linux/sys/prctl.h
>+++ b/sysdeps/unix/sysv/linux/sys/prctl.h
>@@ -38,7 +38,7 @@
> __BEGIN_DECLS
>
> /* Control process execution.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int prctl (int __option, ...) __THROW;
> #else
> # ifdef __REDIRECT
>diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h
>index 19d0cbfae0..f66ece306a 100644
>--- a/sysdeps/unix/sysv/linux/sys/timerfd.h
>+++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
>@@ -47,7 +47,7 @@ extern int timerfd_settime (int __ufd, int __flags,
> 			    const struct itimerspec *__utmr,
> 			    struct itimerspec *__otmr) __THROW;
>
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # if defined(__REDIRECT_NTH)
> extern int __REDIRECT_NTH (timerfd_settime,
>                            (int __ufd, int __flags,
>@@ -62,7 +62,7 @@ extern int __REDIRECT_NTH (timerfd_settime,
> /* Return the next expiration time of UFD.  */
> extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
>
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # if defined(__REDIRECT_NTH)
> extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
>                                              struct itimerspec *__otmr),
>diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
>index 28ce022253..568748d767 100644
>--- a/sysdeps/unix/sysv/linux/sys/timex.h
>+++ b/sysdeps/unix/sysv/linux/sys/timex.h
>@@ -54,7 +54,7 @@ struct ntptimeval
>
> __BEGIN_DECLS
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1));
> extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1));
>
>diff --git a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>index 21aa315d8d..b8b580fbde 100644
>--- a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>+++ b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>@@ -25,7 +25,7 @@
>
> struct stat
>   {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/struct_stat_time64_helper.h>
> #else
>     __dev_t st_dev;		/* Device.  */
>@@ -102,7 +102,7 @@ struct stat
> /* Note stat64 has the same shape as stat for x86-64.  */
> struct stat64
>   {
>-# ifdef __USE_TIME_BITS64
>+# ifdef __USE_TIME64_REDIRECTS
> #  include <bits/struct_stat_time64_helper.h>
> # else
>     __dev_t st_dev;		/* Device.  */
>diff --git a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>index 9f3d170b65..81867c0316 100644
>--- a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>+++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>@@ -23,7 +23,7 @@
> /* Data structure describing a set of semaphores.  */
> struct semid_ds
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> # include <bits/types/struct_semid64_ds_helper.h>
> #else
>   struct ipc_perm sem_perm;   /* operation permission struct */
>diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
>index d0388b0522..4178ad9955 100644
>--- a/sysvipc/sys/msg.h
>+++ b/sysvipc/sys/msg.h
>@@ -58,7 +58,7 @@ struct msgbuf
> __BEGIN_DECLS
>
> /* Message queue control operation.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
> #else
> # ifdef __REDIRECT_NTH
>diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
>index 5d9ec39296..812f1303b3 100644
>--- a/sysvipc/sys/sem.h
>+++ b/sysvipc/sys/sem.h
>@@ -48,7 +48,7 @@ struct sembuf
> __BEGIN_DECLS
>
> /* Semaphore control operation.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
> #else
> # ifdef __REDIRECT_NTH
>@@ -68,7 +68,7 @@ extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
>
> #ifdef __USE_GNU
> /* Operate on semaphore with timeout.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
> 		       const struct timespec *__timeout) __THROW;
> # else
>diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
>index 04191656d5..496e57ef45 100644
>--- a/sysvipc/sys/shm.h
>+++ b/sysvipc/sys/shm.h
>@@ -46,7 +46,7 @@ __BEGIN_DECLS
>    facility.  The definition is found in XPG4.2.  */
>
> /* Shared memory control operation.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
> #else
> # ifdef __REDIRECT_NTH
>diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h
>index 489e81136d..1141015f27 100644
>--- a/time/bits/types/struct_timespec.h
>+++ b/time/bits/types/struct_timespec.h
>@@ -10,14 +10,14 @@
>    has nanoseconds instead of microseconds.  */
> struct timespec
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
>   __time64_t tv_sec;		/* Seconds.  */
> #else
>   __time_t tv_sec;		/* Seconds.  */
> #endif
> #if __WORDSIZE == 64 \
>   || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \
>-  || (__TIMESIZE == 32 && !defined __USE_TIME_BITS64)
>+  || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS)
>   __syscall_slong_t tv_nsec;	/* Nanoseconds.  */
> #else
> # if __BYTE_ORDER == __BIG_ENDIAN
>diff --git a/time/bits/types/struct_timeval.h b/time/bits/types/struct_timeval.h
>index 3466137c35..0c8e88c82c 100644
>--- a/time/bits/types/struct_timeval.h
>+++ b/time/bits/types/struct_timeval.h
>@@ -7,7 +7,7 @@
>    microsecond but also has a range of years.  */
> struct timeval
> {
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
>   __time64_t tv_sec;		/* Seconds.  */
>   __suseconds64_t tv_usec;	/* Microseconds.  */
> #else
>diff --git a/time/bits/types/time_t.h b/time/bits/types/time_t.h
>index 84d67f6ac3..00cde92c62 100644
>--- a/time/bits/types/time_t.h
>+++ b/time/bits/types/time_t.h
>@@ -4,7 +4,7 @@
> #include <bits/types.h>
>
> /* Returned by `time'.  */
>-#ifdef __USE_TIME_BITS64
>+#ifdef __USE_TIME64_REDIRECTS
> typedef __time64_t time_t;
> #else
> typedef __time_t time_t;
>diff --git a/time/sys/time.h b/time/sys/time.h
>index c8708198a5..8c3d0c3022 100644
>--- a/time/sys/time.h
>+++ b/time/sys/time.h
>@@ -63,7 +63,7 @@ struct timezone
>    use localtime etc. instead.
>    This function itself is semi-obsolete;
>    most callers should use time or clock_gettime instead. */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern int gettimeofday (struct timeval *__restrict __tv,
> 			 void *__restrict __tz) __THROW __nonnull ((1));
> #else
>@@ -77,7 +77,7 @@ extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv,
> #endif
>
> #ifdef __USE_MISC
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Set the current time of day and timezone information.
>    This call is restricted to the super-user.
>    Setting the timezone in this way is obsolete, but we don't yet
>@@ -143,7 +143,7 @@ typedef enum __itimer_which __itimer_which_t;
> typedef int __itimer_which_t;
> #endif
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> /* Set *VALUE to the current setting of timer WHICH.
>    Return 0 on success, -1 on errors.  */
> extern int getitimer (__itimer_which_t __which,
>@@ -184,7 +184,7 @@ extern int __REDIRECT_NTH (utimes, (const char *__file,
> #endif
>
> #ifdef __USE_MISC
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Same as `utimes', but does not follow symbolic links.  */
> extern int lutimes (const char *__file, const struct timeval __tvp[2])
>      __THROW __nonnull ((1));
>@@ -207,7 +207,7 @@ extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]),
> #endif
>
> #ifdef __USE_GNU
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Change the access time of FILE relative to FD to TVP[0] and the
>    modification time of FILE to TVP[1].  If TVP is a null pointer, use
>    the current time instead.  Returns 0 on success, -1 on errors.  */
>diff --git a/time/time.h b/time/time.h
>index 1609aaeffa..3785dc608f 100644
>--- a/time/time.h
>+++ b/time/time.h
>@@ -71,7 +71,7 @@ __BEGIN_DECLS
>    The result / CLOCKS_PER_SEC is program time in seconds.  */
> extern clock_t clock (void) __THROW;
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> /* Return the current time and put it in *TIMER if TIMER is not NULL.  */
> extern time_t time (time_t *__timer) __THROW;
>
>@@ -127,7 +127,7 @@ extern char *strptime_l (const char *__restrict __s,
> #endif
>
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> /* Return the `struct tm' representation of *TIMER
>    in Universal Coordinated Time (aka Greenwich Mean Time).  */
> extern struct tm *gmtime (const time_t *__timer) __THROW;
>@@ -149,7 +149,7 @@ extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer),
>
>
> #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Return the `struct tm' representation of *TIMER in UTC,
>    using *TP to store the result.  */
> extern struct tm *gmtime_r (const time_t *__restrict __timer,
>@@ -180,7 +180,7 @@ extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t,
> extern char *asctime (const struct tm *__tp) __THROW;
>
> /* Equivalent to `asctime (localtime (timer))'.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern char *ctime (const time_t *__timer) __THROW;
> #else
> # ifdef __REDIRECT_NTH
>@@ -199,7 +199,7 @@ extern char *asctime_r (const struct tm *__restrict __tp,
> 			char *__restrict __buf) __THROW;
>
> /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> extern char *ctime_r (const time_t *__restrict __timer,
> 		      char *__restrict __buf) __THROW;
> #else
>@@ -242,7 +242,7 @@ extern long int timezone;
>
>
> #if defined __USE_MISC || __GLIBC_USE (ISOC2X)
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Like `mktime', but for TP represents Universal Time, not local time.  */
> extern time_t timegm (struct tm *__tp) __THROW;
> # else
>@@ -259,7 +259,7 @@ extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
> /* Miscellaneous functions many Unices inherited from the public domain
>    localtime package.  These are included only for compatibility.  */
>
>-#ifndef __USE_TIME_BITS64
>+#ifndef __USE_TIME64_REDIRECTS
> /* Another name for `mktime'.  */
> extern time_t timelocal (struct tm *__tp) __THROW;
> #else
>@@ -274,7 +274,7 @@ extern int dysize (int __year) __THROW  __attribute__ ((__const__));
>
>
> #ifdef __USE_POSIX199309
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Pause execution for a number of nanoseconds.
>
>    This function is a cancellation point and therefore not marked with
>@@ -320,7 +320,7 @@ extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
>
>    This function is a cancellation point and therefore not marked with
>    __THROW.  */
>-#  ifndef __USE_TIME_BITS64
>+#  ifndef __USE_TIME64_REDIRECTS
> extern int clock_nanosleep (clockid_t __clock_id, int __flags,
> 			    const struct timespec *__req,
> 			    struct timespec *__rem);
>@@ -349,7 +349,7 @@ extern int timer_create (clockid_t __clock_id,
> extern int timer_delete (timer_t __timerid) __THROW;
>
> /* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> extern int timer_settime (timer_t __timerid, int __flags,
> 			  const struct itimerspec *__restrict __value,
> 			  struct itimerspec *__restrict __ovalue) __THROW;
>@@ -379,7 +379,7 @@ extern int timer_getoverrun (timer_t __timerid) __THROW;
>
>
> #ifdef __USE_ISOC11
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Set TS to calendar time based in time base BASE.  */
> extern int timespec_get (struct timespec *__ts, int __base)
>      __THROW __nonnull ((1));
>@@ -395,7 +395,7 @@ extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base),
>
>
> #if __GLIBC_USE (ISOC2X)
>-# ifndef __USE_TIME_BITS64
>+# ifndef __USE_TIME64_REDIRECTS
> /* Set TS to resolution of time base BASE.  */
> extern int timespec_getres (struct timespec *__ts, int __base)
>      __THROW;
>-- 
>2.34.1
>
Adhemerval Zanella Jan. 31, 2024, 5:48 p.m. UTC | #6
On 31/01/24 09:34, Jonathan Wakely wrote:
> On 18/01/24 10:18 -0300, Adhemerval Zanella wrote:
>> It was raised on libc-help [1] that some Linux kernel interfaces expect
>> the libc to define __USE_TIME_BITS64 to indicate the time_t size for the
>> kABI.  Different than defined by the initial y2038 design document [2],
>> the __USE_TIME_BITS64 is only defined for ABIs that support more than
>> one time_t size (by defining the _TIME_BITS for each module).
> 
> Libstdc++ needs a way to detect "the traditional ABI for this target
> used 32-bit time_t but this translation unit is using the new 64-bit
> ABI". Previously __USE_TIME_BITS64 served exactly that purpose. With
> this patch it just seems to mean sizeof(time_t) == 64 which is not
> useful, I can find that out for myself (and a __TIME_WIDTH__ macro or
> similar would be better and more consistent with standard macros for
> integer types like int32_t).
> 
> See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99832 for the
> libstdc++ issue. I don't like relying on an internal glibc macro like
> __USE_TIME_BITS64 but I need _some_ way at preprocessing time (not
> when libstdc++ is configured) to detect that the current translation
> unit is using new 64-bit APIs *which are different from the historical
> APIs on that target*.
> 
> Is there some semi-stable / semi-public API I can use to detect that?
> Is this appropriate?
> #if __GLIBC_PREREQ(2, 34) && __TIMESIZE==32 && _TIME_BITS==64
> I think this says "the traditional time_t size is 32 but the user has
> requested 64 in this TU, and glibc is new enough to honour that
> request".

The '__GLIBC_PREREQ(2, 34) && __TIMESIZE==32 && _TIME_BITS==64' does
work, although this patch also adds the __USE_TIME64_REDIRECTS, which is
essentially what __USE_TIME_BITS64 current means internally.  I do
plan to backport this fix once it is reviewed, so I am not sure which
one libstdc++ would prefer.

> 
> Tangentially,
> https://www.gnu.org/software/libc/manual/html_node/64_002dbit-time-symbol-handling.html
> still says "In a later change, the public API will allow user code to
> choose the time size for a given compilation unit." which should have
> been updated by now.

Thanks, I will send a patch to update it.

> 
> 
>> The 64 bit time_t redirects are now enabled using a different internal
>> define (__USE_TIME64_REDIRECTS). There is no expected change in semantic
>> or code generation.
>>
>> Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and
>> arm-linux-gnueabi
>>
>> [1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html
>> [2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
>> -- 
>> Changes from v2:
>> * Only defined __USE_TIME_BITS64 when 64 bit time_t is used.
>>
>> Changes from v1:
>> * Use __USE_TIME64_REDIRECTS to allow replace the current macro.
>> ---
>> io/bits/poll2.h                               |  2 +-
>> io/fcntl.h                                    |  2 +-
>> io/fts.h                                      |  6 ++---
>> io/ftw.h                                      | 12 +++++-----
>> io/sys/poll.h                                 |  2 +-
>> io/sys/stat.h                                 | 16 ++++++-------
>> io/utime.h                                    |  4 ++--
>> misc/sys/ioctl.h                              |  2 +-
>> misc/sys/select.h                             |  4 ++--
>> posix/glob.h                                  |  4 ++--
>> posix/sched.h                                 |  2 +-
>> posix/sys/wait.h                              |  4 ++--
>> resolv/netdb.h                                |  2 +-
>> resource/sys/resource.h                       |  2 +-
>> rt/aio.h                                      |  4 ++--
>> rt/mqueue.h                                   |  2 +-
>> signal/signal.h                               |  2 +-
>> socket/sys/socket.h                           | 14 +++++------
>> support/timespec.h                            |  2 +-
>> support/xtime.h                               |  2 +-
>> support/xunistd.h                             |  2 +-
>> sysdeps/generic/features-time64.h             |  2 ++
>> sysdeps/nptl/pthread.h                        | 18 +++++++-------
>> sysdeps/pthread/semaphore.h                   |  4 ++--
>> sysdeps/pthread/threads.h                     |  6 ++---
>> .../unix/sysv/linux/arm/bits/struct_stat.h    |  4 ++--
>> .../unix/sysv/linux/bits/socket-constants.h   |  2 +-
>> sysdeps/unix/sysv/linux/bits/time.h           |  2 +-
>> sysdeps/unix/sysv/linux/bits/timex.h          |  2 +-
>> .../sysv/linux/bits/types/struct_msqid_ds.h   |  2 +-
>> .../sysv/linux/bits/types/struct_semid_ds.h   |  2 +-
>> .../sysv/linux/bits/types/struct_shmid_ds.h   |  2 +-
>> .../unix/sysv/linux/csky/bits/struct_stat.h   |  4 ++--
>> sysdeps/unix/sysv/linux/features-time64.h     |  9 +++++--
>> .../sysv/linux/hppa/bits/socket-constants.h   |  2 +-
>> .../unix/sysv/linux/hppa/bits/struct_stat.h   |  4 ++--
>> .../linux/hppa/bits/types/struct_msqid_ds.h   |  2 +-
>> .../linux/hppa/bits/types/struct_semid_ds.h   |  2 +-
>> .../linux/hppa/bits/types/struct_shmid_ds.h   |  2 +-
>> .../unix/sysv/linux/m68k/bits/struct_stat.h   |  4 ++--
>> .../sysv/linux/microblaze/bits/struct_stat.h  |  6 ++---
>> .../sysv/linux/mips/bits/socket-constants.h   |  2 +-
>> .../unix/sysv/linux/mips/bits/struct_stat.h   |  8 +++----
>> .../linux/mips/bits/types/struct_msqid_ds.h   |  2 +-
>> .../linux/mips/bits/types/struct_semid_ds.h   |  2 +-
>> .../linux/mips/bits/types/struct_shmid_ds.h   |  2 +-
>> .../unix/sysv/linux/nios2/bits/struct_stat.h  |  4 ++--
>> .../linux/powerpc/bits/socket-constants.h     |  2 +-
>> .../sysv/linux/powerpc/bits/struct_stat.h     |  4 ++--
>> .../powerpc/bits/types/struct_msqid_ds.h      |  2 +-
>> .../powerpc/bits/types/struct_semid_ds.h      |  2 +-
>> .../powerpc/bits/types/struct_shmid_ds.h      |  2 +-
>> .../unix/sysv/linux/s390/bits/struct_stat.h   |  4 ++--
>> sysdeps/unix/sysv/linux/sh/bits/struct_stat.h |  4 ++--
>> .../sysv/linux/sparc/bits/socket-constants.h  |  2 +-
>> .../unix/sysv/linux/sparc/bits/struct_stat.h  |  4 ++--
>> .../linux/sparc/bits/types/struct_msqid_ds.h  |  2 +-
>> .../linux/sparc/bits/types/struct_semid_ds.h  |  2 +-
>> .../linux/sparc/bits/types/struct_shmid_ds.h  |  2 +-
>> sysdeps/unix/sysv/linux/sys/epoll.h           |  2 +-
>> sysdeps/unix/sysv/linux/sys/prctl.h           |  2 +-
>> sysdeps/unix/sysv/linux/sys/timerfd.h         |  4 ++--
>> sysdeps/unix/sysv/linux/sys/timex.h           |  2 +-
>> .../unix/sysv/linux/x86/bits/struct_stat.h    |  4 ++--
>> .../linux/x86/bits/types/struct_semid_ds.h    |  2 +-
>> sysvipc/sys/msg.h                             |  2 +-
>> sysvipc/sys/sem.h                             |  4 ++--
>> sysvipc/sys/shm.h                             |  2 +-
>> time/bits/types/struct_timespec.h             |  4 ++--
>> time/bits/types/struct_timeval.h              |  2 +-
>> time/bits/types/time_t.h                      |  2 +-
>> time/sys/time.h                               | 10 ++++----
>> time/time.h                                   | 24 +++++++++----------
>> 73 files changed, 149 insertions(+), 142 deletions(-)
>>
>> diff --git a/io/bits/poll2.h b/io/bits/poll2.h
>> index 6152a8c5e4..efc8b85403 100644
>> --- a/io/bits/poll2.h
>> +++ b/io/bits/poll2.h
>> @@ -43,7 +43,7 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
>>
>>
>> #ifdef __USE_GNU
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
>>                        const struct timespec *__timeout,
>>                        const __sigset_t *__ss), __ppoll64);
>> diff --git a/io/fcntl.h b/io/fcntl.h
>> index 9cee0b5900..0a493d1dd3 100644
>> --- a/io/fcntl.h
>> +++ b/io/fcntl.h
>> @@ -172,7 +172,7 @@ typedef __pid_t pid_t;
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> # ifndef __USE_FILE_OFFSET64
>> extern int fcntl (int __fd, int __cmd, ...);
>> # else
>> diff --git a/io/fts.h b/io/fts.h
>> index 61f95bb441..97a031ebbd 100644
>> --- a/io/fts.h
>> +++ b/io/fts.h
>> @@ -187,7 +187,7 @@ FTSENT    *fts_read (FTS *);
>> int     fts_set (FTS *, FTSENT *, int) __THROW;
>> #else
>> # ifdef __REDIRECT
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> FTSENT    *__REDIRECT (fts_children, (FTS *, int), fts64_children);
>> int     __REDIRECT (fts_close, (FTS *), fts64_close);
>> FTS    *__REDIRECT (fts_open, (char * const *, int,
>> @@ -206,7 +206,7 @@ int     __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
>>              __fts64_set_time64);
>> #  endif
>> # else
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> #   define fts_children fts64_children
>> #   define fts_close fts64_close
>> #   define fts_open fts64_open
>> @@ -217,7 +217,7 @@ int     __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
>> # endif
>> #endif
>> #ifdef __USE_LARGEFILE64
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> FTSENT64 *fts64_children (FTS64 *, int);
>> int      fts64_close (FTS64 *);
>> FTS64     *fts64_open (char * const *, int,
>> diff --git a/io/ftw.h b/io/ftw.h
>> index e4d1b84d53..39cf595b27 100644
>> --- a/io/ftw.h
>> +++ b/io/ftw.h
>> @@ -137,7 +137,7 @@ extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
>>      __nonnull ((1, 2));
>> #else
>> # ifdef __REDIRECT
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>>                  int __descriptors), ftw64) __nonnull ((1, 2));
>> #  else
>> @@ -146,7 +146,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>>      __nonnull ((1, 2));
>> #  endif
>> # else
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> #   define ftw ftw64
>> #  else
>> #   define ftw __ftw64_time64
>> @@ -154,7 +154,7 @@ extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
>> # endif
>> #endif
>> #ifdef __USE_LARGEFILE64
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int ftw64 (const char *__dir, __ftw64_func_t __func,
>>           int __descriptors) __nonnull ((1, 2));
>> # else
>> @@ -180,7 +180,7 @@ extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
>>          int __flag) __nonnull ((1, 2));
>> # else
>> #  ifdef __REDIRECT
>> -#   ifndef __USE_TIME_BITS64
>> +#   ifndef __USE_TIME64_REDIRECTS
>> extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>>                   int __descriptors, int __flag), nftw64)
>>      __nonnull ((1, 2));
>> @@ -190,7 +190,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>>      __nonnull ((1, 2));
>> #   endif
>> #  else
>> -#   ifndef __USE_TIME_BITS64
>> +#   ifndef __USE_TIME64_REDIRECTS
>> #    define nftw nftw64
>> #   else
>> #    define nftw __nftw64_time64
>> @@ -198,7 +198,7 @@ extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
>> #  endif
>> # endif
>> # ifdef __USE_LARGEFILE64
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int nftw64 (const char *__dir, __nftw64_func_t __func,
>>            int __descriptors, int __flag) __nonnull ((1, 2));
>> #  else
>> diff --git a/io/sys/poll.h b/io/sys/poll.h
>> index 7858fad6b9..c324ff5dad 100644
>> --- a/io/sys/poll.h
>> +++ b/io/sys/poll.h
>> @@ -66,7 +66,7 @@ extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
>>           const __sigset_t *__ss)
>>     __fortified_attr_access (__write_only__, 1, 2);
>>
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  ifdef __REDIRECT
>> extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
>>                                const struct timespec *__timeout,
>> diff --git a/io/sys/stat.h b/io/sys/stat.h
>> index 1fa6d6e62e..3b4ba80132 100644
>> --- a/io/sys/stat.h
>> +++ b/io/sys/stat.h
>> @@ -209,7 +209,7 @@ extern int stat (const char *__restrict __file,
>>    that file descriptor FD is open on and put them in BUF.  */
>> extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
>> #else
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  ifdef __REDIRECT_NTH
>> extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
>>                   struct stat *__restrict __buf),
>> @@ -236,7 +236,7 @@ extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
>> # endif
>> #endif
>> #ifdef __USE_LARGEFILE64
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int stat64 (const char *__restrict __file,
>>            struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
>> extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
>> @@ -265,7 +265,7 @@ extern int fstatat (int __fd, const char *__restrict __file,
>>             struct stat *__restrict __buf, int __flag)
>>      __THROW __nonnull ((2, 3));
>> # else
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   ifdef __REDIRECT_NTH
>> extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
>>                      struct stat *__restrict __buf,
>> @@ -287,7 +287,7 @@ extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
>> # endif
>>
>> # ifdef __USE_LARGEFILE64
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int fstatat64 (int __fd, const char *__restrict __file,
>>               struct stat64 *__restrict __buf, int __flag)
>>      __THROW __nonnull ((2, 3));
>> @@ -313,7 +313,7 @@ extern int __REDIRECT_NTH (fstatat64, (int __fd,
>> extern int lstat (const char *__restrict __file,
>>           struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
>> # else
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   ifdef __REDIRECT_NTH
>> extern int __REDIRECT_NTH (lstat,
>>                (const char *__restrict __file,
>> @@ -334,7 +334,7 @@ extern int __REDIRECT_NTH (lstat,
>> #  endif
>> # endif
>> # ifdef __USE_LARGEFILE64
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int lstat64 (const char *__restrict __file,
>>             struct stat64 *__restrict __buf)
>>      __THROW __nonnull ((1, 2));
>> @@ -427,7 +427,7 @@ extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
>> #endif
>> 
>> #ifdef __USE_ATFILE
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Set file access and modification times relative to directory file
>>    descriptor.  */
>> extern int utimensat (int __fd, const char *__path,
>> @@ -447,7 +447,7 @@ extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
>> #endif
>>
>> #ifdef __USE_XOPEN2K8
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Set file access and modification times of the file associated with FD.  */
>> extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
>>
>> diff --git a/io/utime.h b/io/utime.h
>> index c5eacedd6a..1c7587d9c1 100644
>> --- a/io/utime.h
>> +++ b/io/utime.h
>> @@ -35,7 +35,7 @@ __BEGIN_DECLS
>> /* Structure describing file times.  */
>> struct utimbuf
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>     __time64_t actime;        /* Access time.  */
>>     __time64_t modtime;        /* Modification time.  */
>> #else
>> @@ -46,7 +46,7 @@ struct utimbuf
>>
>> /* Set the access and modification times of FILE to those given in
>>    *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int utime (const char *__file,
>>           const struct utimbuf *__file_times)
>>      __THROW __nonnull ((1));
>> diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
>> index 3f2338ddd3..ea6583e122 100644
>> --- a/misc/sys/ioctl.h
>> +++ b/misc/sys/ioctl.h
>> @@ -38,7 +38,7 @@ __BEGIN_DECLS
>> /* Perform the I/O control operation specified by REQUEST on FD.
>>    One argument may follow; its presence and type depend on REQUEST.
>>    Return value depends on REQUEST.  Usually -1 indicates error.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
>> #else
>> # ifdef __REDIRECT
>> diff --git a/misc/sys/select.h b/misc/sys/select.h
>> index e6a0c1b8b2..2e45e94bc1 100644
>> --- a/misc/sys/select.h
>> +++ b/misc/sys/select.h
>> @@ -98,7 +98,7 @@ __BEGIN_DECLS
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int select (int __nfds, fd_set *__restrict __readfds,
>>            fd_set *__restrict __writefds,
>>            fd_set *__restrict __exceptfds,
>> @@ -123,7 +123,7 @@ extern int __REDIRECT (select,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int pselect (int __nfds, fd_set *__restrict __readfds,
>>             fd_set *__restrict __writefds,
>>             fd_set *__restrict __exceptfds,
>> diff --git a/posix/glob.h b/posix/glob.h
>> index 3406662840..b6bba0fbcd 100644
>> --- a/posix/glob.h
>> +++ b/posix/glob.h
>> @@ -150,7 +150,7 @@ extern int glob (const char *__restrict __pattern, int __flags,
>> /* Free storage allocated in PGLOB by a previous `glob' call.  */
>> extern void globfree (glob_t *__pglob) __THROW;
>> #else
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
>>                     int __flags,
>>                     int (*__errfunc) (const char *, int),
>> @@ -170,7 +170,7 @@ extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
>> #endif
>>
>> #ifdef __USE_LARGEFILE64
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
>>                       int __flags,
>>                       int (*__errfunc) (const char *, int),
>> diff --git a/posix/sched.h b/posix/sched.h
>> index 3eac206f35..49f504a488 100644
>> --- a/posix/sched.h
>> +++ b/posix/sched.h
>> @@ -74,7 +74,7 @@ extern int sched_get_priority_max (int __algorithm) __THROW;
>> extern int sched_get_priority_min (int __algorithm) __THROW;
>>
>> /* Get the SCHED_RR interval for the named process.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
>> #else
>> # ifdef __REDIRECT_NTH
>> diff --git a/posix/sys/wait.h b/posix/sys/wait.h
>> index edbb7b4392..1f44ee1145 100644
>> --- a/posix/sys/wait.h
>> +++ b/posix/sys/wait.h
>> @@ -139,7 +139,7 @@ struct rusage;
>>    nil, store information about the child's resource usage there.  If the
>>    WUNTRACED bit is set in OPTIONS, return status for stopped children;
>>    otherwise don't.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern __pid_t wait3 (int *__stat_loc, int __options,
>>               struct rusage * __usage) __THROWNL;
>> # else
>> @@ -154,7 +154,7 @@ extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options,
>> #endif
>>
>> #ifdef __USE_MISC
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* PID is like waitpid.  Other args are like wait3.  */
>> extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options,
>>               struct rusage *__usage) __THROWNL;
>> diff --git a/resolv/netdb.h b/resolv/netdb.h
>> index 14228b0d95..b7f473fafe 100644
>> --- a/resolv/netdb.h
>> +++ b/resolv/netdb.h
>> @@ -701,7 +701,7 @@ extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
>> extern int gai_suspend (const struct gaicb *const __list[], int __ent,
>>             const struct timespec *__timeout);
>>
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  if defined(__REDIRECT)
>> extern int __REDIRECT (gai_suspend, (const struct gaicb *const __list[],
>>                                      int __ent,
>> diff --git a/resource/sys/resource.h b/resource/sys/resource.h
>> index a5634ba715..b0bf751e92 100644
>> --- a/resource/sys/resource.h
>> +++ b/resource/sys/resource.h
>> @@ -88,7 +88,7 @@ extern int setrlimit64 (__rlimit_resource_t __resource,
>>    and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
>> extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
>>
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # if defined(__REDIRECT_NTH)
>> extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
>>                                        struct rusage *__usage),
>> diff --git a/rt/aio.h b/rt/aio.h
>> index 37d19abf16..e71435733f 100644
>> --- a/rt/aio.h
>> +++ b/rt/aio.h
>> @@ -193,7 +193,7 @@ extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
>> extern int __REDIRECT_NTH (aio_cancel,
>>                (int __fildes, struct aiocb *__aiocbp),
>>                aio_cancel64);
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> extern int __REDIRECT_NTH (aio_suspend,
>>                (const struct aiocb *const __list[], int __nent,
>>                 const struct timespec *__restrict __timeout),
>> @@ -215,7 +215,7 @@ extern int __REDIRECT_NTH (aio_fsync,
>> #  define aio_error aio_error64
>> #  define aio_return aio_return64
>> #  define aio_cancel aio_cancel64
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   define aio_suspend __aio_suspend_time64
>> #  else
>> #   define aio_suspend aio_suspend64
>> diff --git a/rt/mqueue.h b/rt/mqueue.h
>> index 787cc36df2..fd6fff4bb2 100644
>> --- a/rt/mqueue.h
>> +++ b/rt/mqueue.h
>> @@ -71,7 +71,7 @@ extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
>>             unsigned int __msg_prio) __nonnull ((2));
>>
>> #ifdef __USE_XOPEN2K
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Receive the oldest from highest priority messages in message queue
>>    MQDES, stop waiting if ABS_TIMEOUT expires.  */
>> extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
>> diff --git a/signal/signal.h b/signal/signal.h
>> index f37499ce60..8e07b041b1 100644
>> --- a/signal/signal.h
>> +++ b/signal/signal.h
>> @@ -269,7 +269,7 @@ extern int sigwaitinfo (const sigset_t *__restrict __set,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int sigtimedwait (const sigset_t *__restrict __set,
>>              siginfo_t *__restrict __info,
>>              const struct timespec *__restrict __timeout)
>> diff --git a/socket/sys/socket.h b/socket/sys/socket.h
>> index 366eaab845..463cf3291b 100644
>> --- a/socket/sys/socket.h
>> +++ b/socket/sys/socket.h
>> @@ -170,7 +170,7 @@ extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
>>             int __flags);
>> #else
>> @@ -191,7 +191,7 @@ extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
>>              unsigned int __vlen, int __flags);
>> # else
>> @@ -204,7 +204,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>>              unsigned int __vlen, int __flags);
>> #   define sendmmsg __sendmmsg64
>> #  endif
>> -# endif     /* __USE_TIME_BITS64 */
>> +# endif     /* __USE_TIME64_REDIRECTS */
>> #endif /* __USE_GNU */
>>
>> /* Receive a message as described by MESSAGE from socket FD.
>> @@ -212,7 +212,7 @@ extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
>> #else
>> # ifdef __REDIRECT
>> @@ -231,7 +231,7 @@ extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags);
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
>>              unsigned int __vlen, int __flags,
>>              struct timespec *__tmo);
>> @@ -251,7 +251,7 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
>> /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
>>    into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
>>    actual length.  Returns 0 on success, -1 for errors.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int getsockopt (int __fd, int __level, int __optname,
>>                void *__restrict __optval,
>>                socklen_t *__restrict __optlen) __THROW;
>> @@ -273,7 +273,7 @@ extern int __getsockopt64 (int __fd, int __level, int __optname,
>> /* Set socket FD's option OPTNAME at protocol level LEVEL
>>    to *OPTVAL (which is OPTLEN bytes long).
>>    Returns 0 on success, -1 for errors.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int setsockopt (int __fd, int __level, int __optname,
>>                const void *__optval, socklen_t __optlen) __THROW;
>> #else
>> diff --git a/support/timespec.h b/support/timespec.h
>> index 42f32bcc2c..5ccc7163a5 100644
>> --- a/support/timespec.h
>> +++ b/support/timespec.h
>> @@ -35,7 +35,7 @@ make_timespec (time_t s, long int ns)
>>
>> enum { TIMESPEC_HZ = 1000000000 };
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> struct timespec timespec_add (struct timespec, struct timespec)
>>   __attribute__((const));
>> struct timespec timespec_sub (struct timespec, struct timespec)
>> diff --git a/support/xtime.h b/support/xtime.h
>> index 5200eef2e0..9961899634 100644
>> --- a/support/xtime.h
>> +++ b/support/xtime.h
>> @@ -30,7 +30,7 @@ __BEGIN_DECLS
>> /* The following functions call the corresponding libc functions and
>>    terminate the process on error.  */
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> void xclock_gettime (clockid_t clock, struct timespec *ts);
>> void xclock_settime (clockid_t clock, const struct timespec *ts);
>> #else
>> diff --git a/support/xunistd.h b/support/xunistd.h
>> index b5e8c2f420..13be9a46a3 100644
>> --- a/support/xunistd.h
>> +++ b/support/xunistd.h
>> @@ -36,7 +36,7 @@ pid_t xwaitpid (pid_t, int *status, int flags);
>> void xpipe (int[2]);
>> void xdup2 (int, int);
>> int xopen (const char *path, int flags, mode_t);
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> # ifdef __USE_FILE_OFFSET64
>> void xstat (const char *path, struct stat *);
>> void xlstat (const char *path, struct stat *);
>> diff --git a/sysdeps/generic/features-time64.h b/sysdeps/generic/features-time64.h
>> index 4d38b8ba76..4d1c8319d4 100644
>> --- a/sysdeps/generic/features-time64.h
>> +++ b/sysdeps/generic/features-time64.h
>> @@ -17,3 +17,5 @@
>>    <https://www.gnu.org/licenses/>.  */
>>
>> /* The generic configuration only support _TIME_BITS=32.  */
>> +#define __USE_TIME_BITS64       0
>> +#define __USE_TIME64_REDIRECTS  0
>> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
>> index 1607fdf29a..3d4f4a756c 100644
>> --- a/sysdeps/nptl/pthread.h
>> +++ b/sysdeps/nptl/pthread.h
>> @@ -223,7 +223,7 @@ extern int pthread_join (pthread_t __th, void **__thread_return);
>>    the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
>> extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
>>
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Make calling thread wait for termination of the thread TH, but only
>>    until TIMEOUT.  The exit status of the thread is stored in
>>    *THREAD_RETURN, if THREAD_RETURN is not NULL.
>> @@ -796,7 +796,7 @@ extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
>>
>> #ifdef __USE_XOPEN2K
>> /* Wait until lock becomes available, or specified time passes. */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
>>                     const struct timespec *__restrict
>>                     __abstime) __THROWNL __nonnull ((1, 2));
>> @@ -813,7 +813,7 @@ extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
>> #endif
>>
>> #ifdef __USE_GNU
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
>>                     clockid_t __clockid,
>>                     const struct timespec *__restrict
>> @@ -982,7 +982,7 @@ extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
>>
>> # ifdef __USE_XOPEN2K
>> /* Try to acquire read lock for RWLOCK or return after specified time.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
>>                        const struct timespec *__restrict
>>                        __abstime) __THROWNL __nonnull ((1, 2));
>> @@ -1000,7 +1000,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
>> # endif
>>
>> # ifdef __USE_GNU
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
>>                        clockid_t __clockid,
>>                        const struct timespec *__restrict
>> @@ -1029,7 +1029,7 @@ extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
>>
>> # ifdef __USE_XOPEN2K
>> /* Try to acquire write lock for RWLOCK or return after specified time.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
>>                        const struct timespec *__restrict
>>                        __abstime) __THROWNL __nonnull ((1, 2));
>> @@ -1047,7 +1047,7 @@ extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
>> # endif
>>
>> # ifdef __USE_GNU
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
>>                        clockid_t __clockid,
>>                        const struct timespec *__restrict
>> @@ -1141,7 +1141,7 @@ extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
>>                    pthread_mutex_t *__restrict __mutex,
>>                    const struct timespec *__restrict __abstime)
>> @@ -1167,7 +1167,7 @@ extern int __REDIRECT (pthread_cond_timedwait,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW. */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
>>                    pthread_mutex_t *__restrict __mutex,
>>                    __clockid_t __clock_id,
>> diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
>> index c75ca4ce6d..8a09633699 100644
>> --- a/sysdeps/pthread/semaphore.h
>> +++ b/sysdeps/pthread/semaphore.h
>> @@ -59,7 +59,7 @@ extern int sem_wait (sem_t *__sem) __nonnull ((1));
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int sem_timedwait (sem_t *__restrict __sem,
>>               const struct timespec *__restrict __abstime)
>>   __nonnull ((1, 2));
>> @@ -77,7 +77,7 @@ extern int __REDIRECT (sem_timedwait,
>> #endif
>>
>> #ifdef __USE_GNU
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int sem_clockwait (sem_t *__restrict __sem,
>>               clockid_t clock,
>>               const struct timespec *__restrict __abstime)
>> diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
>> index c5410b5c3a..7cade24e1f 100644
>> --- a/sysdeps/pthread/threads.h
>> +++ b/sysdeps/pthread/threads.h
>> @@ -90,7 +90,7 @@ extern thrd_t thrd_current (void);
>>    __TIME_POINT.  The current thread may resume if receives a signal.  In
>>    that case, if __REMAINING is not NULL, the remaining time is stored in
>>    the object pointed by it.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int thrd_sleep (const struct timespec *__time_point,
>>                struct timespec *__remaining);
>> #else
>> @@ -143,7 +143,7 @@ extern int mtx_lock (mtx_t *__mutex);
>> /* Block the current thread until the mutex pointed by __MUTEX is unlocked
>>    or time pointed by __TIME_POINT is reached.  In case the mutex is unlock,
>>    the current thread will not be blocked.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int mtx_timedlock (mtx_t *__restrict __mutex,
>>               const struct timespec *__restrict __time_point);
>> #else
>> @@ -194,7 +194,7 @@ extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex);
>> /* Block current thread on the condition variable until condition variable
>>    pointed by __COND is signaled or time pointed by __TIME_POINT is
>>    reached.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int cnd_timedwait (cnd_t *__restrict __cond,
>>               mtx_t *__restrict __mutex,
>>               const struct timespec *__restrict __time_point);
>> diff --git a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>> index 255feaa8cb..1fc5917b8e 100644
>> --- a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -89,7 +89,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
>> index d997dbf594..b2102d3abf 100644
>> --- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
>> @@ -64,7 +64,7 @@
>> #  define SO_TIMESTAMPNS_NEW 64
>> #  define SO_TIMESTAMPING_NEW 65
>>
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   define SO_RCVTIMEO SO_RCVTIMEO_NEW
>> #   define SO_SNDTIMEO SO_SNDTIMEO_NEW
>> #   define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
>> index b70ba58a7d..cab4057971 100644
>> --- a/sysdeps/unix/sysv/linux/bits/time.h
>> +++ b/sysdeps/unix/sysv/linux/bits/time.h
>> @@ -77,7 +77,7 @@ __BEGIN_DECLS
>> /* Tune a POSIX clock.  */
>> extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2));
>>
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # if defined(__REDIRECT_NTH)
>> extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
>>                                            struct timex *__utx),
>> diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h
>> index 398d8094f2..03ccde6d0a 100644
>> --- a/sysdeps/unix/sysv/linux/bits/timex.h
>> +++ b/sysdeps/unix/sysv/linux/bits/timex.h
>> @@ -25,7 +25,7 @@
>>
>> struct timex
>> {
>> -# if defined __USE_TIME_BITS64 || (__TIMESIZE == 64 && __WORDSIZE == 32)
>> +# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32)
>>   unsigned int modes;          /* mode selector */
>>   int :32;                     /* pad */
>>   long long offset;            /* time offset (usec) */
>> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>> index fae50281c7..86296ca922 100644
>> --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>    The type `struct msg' is opaque.  */
>> struct msqid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_msqid64_ds_helper.h>
>> #else
>>   struct ipc_perm msg_perm;    /* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>> index 3c277ed1d8..2ac89b3ce4 100644
>> --- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a set of semaphores.  */
>> struct semid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_semid64_ds_helper.h>
>> #else
>>   struct ipc_perm sem_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>> index 09de0b4e3a..1012ed0317 100644
>> --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a shared memory segment.  */
>> struct shmid_ds
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_shmid64_ds_helper.h>
>> #else
>>     struct ipc_perm shm_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>> index 4b4822d6d0..47a9f0aaff 100644
>> --- a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
>> @@ -43,7 +43,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;        /* Device.  */
>> @@ -88,7 +88,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;        /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/features-time64.h b/sysdeps/unix/sysv/linux/features-time64.h
>> index dd3442c2ea..8d573cd23e 100644
>> --- a/sysdeps/unix/sysv/linux/features-time64.h
>> +++ b/sysdeps/unix/sysv/linux/features-time64.h
>> @@ -24,9 +24,8 @@
>> # if _TIME_BITS == 64
>> #  if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
>> #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
>> -#  elif __TIMESIZE == 32
>> -#   define __USE_TIME_BITS64    1
>> #  endif
>> +#  define __USE_TIME_BITS64    1
>> # elif _TIME_BITS == 32
>> #  if __TIMESIZE > 32
>> #   error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
>> @@ -34,4 +33,10 @@
>> # else
>> #  error Invalid _TIME_BITS value (can only be 32 or 64-bit)
>> # endif
>> +#elif __TIMESIZE == 64
>> +# define __USE_TIME_BITS64      1
>> +#endif
>> +
>> +#if defined __USE_TIME_BITS64 && __TIMESIZE == 32
>> +# define __USE_TIME64_REDIRECTS 1
>> #endif
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>> index 58b523d03a..80a76a17dc 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>> # define SO_TIMESTAMPNS_NEW 0x4039
>> # define SO_TIMESTAMPING_NEW 0x403A
>>
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>> index 069efdbc55..67f7c110cd 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -89,7 +89,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>> index 2bc7cac06d..4995e0a4a5 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>    The type `struct msg' is opaque.  */
>> struct msqid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_msqid64_ds_helper.h>
>> #else
>>   struct ipc_perm msg_perm;    /* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>> index dd8fbebcf4..df88949dc2 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a set of semaphores.  */
>> struct semid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_semid64_ds_helper.h>
>> #else
>>   struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>> index 58ac572b6e..cb3b0303aa 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a shared memory segment.  */
>> struct shmid_ds
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_shmid64_ds_helper.h>
>> #else
>>     struct ipc_perm shm_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>> index 3b1db157bc..2b662668e8 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
>> @@ -25,7 +25,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -86,7 +86,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>> index 0f4693fb1f..04686f30ec 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
>> @@ -26,7 +26,7 @@
>> #ifndef __USE_FILE_OFFSET64
>> struct stat
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>         __dev_t         st_dev;     /* Device.  */
>> @@ -74,7 +74,7 @@ struct stat
>>  * create one ifdef to separate stats structures.  */
>> struct stat
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>         unsigned long long      st_dev;     /* Device.  */
>> @@ -119,7 +119,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>> {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>         unsigned long long      st_dev;     /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>> index c6908a2793..77ffc8b890 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>> # define SO_TIMESTAMPNS_NEW 64
>> # define SO_TIMESTAMPING_NEW 65
>>
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>> index 277ebad9b6..26682f8d4f 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
>> @@ -29,7 +29,7 @@
>> /* Structure describing file characteristics.  */
>> struct stat
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     unsigned long int st_dev;
>> @@ -88,7 +88,7 @@ struct stat
>> # ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   include <bits/struct_stat_time64_helper.h>
>> #  else
>>     unsigned long int st_dev;
>> @@ -131,7 +131,7 @@ struct stat64
>>
>> struct stat
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;
>> @@ -189,7 +189,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>> index 4e8bd51b0a..09c53648b7 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>    The type `struct msg' is opaque.  */
>> struct msqid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_msqid64_ds_helper.h>
>> #else
>>   struct ipc_perm msg_perm;    /* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>> index d1a30e3164..0746684a7d 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a set of semaphores.  */
>> struct semid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_semid64_ds_helper.h>
>> #else
>>   struct ipc_perm sem_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>> index 8771164b57..c665af1874 100644
>> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a shared memory segment.  */
>> struct shmid_ds
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_shmid64_ds_helper.h>
>> #else
>>     struct ipc_perm shm_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>> index 672c7c6bb8..dab466d881 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
>> @@ -43,7 +43,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;        /* Device.  */
>> @@ -88,7 +88,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;        /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>> index 6be5055e65..0d3e095c5d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>> # define SO_TIMESTAMPNS_NEW 64
>> # define SO_TIMESTAMPING_NEW 65
>>
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>> index f6328399cd..20ed8dd9b8 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>> #if __WORDSIZE == 32
>> struct stat
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -85,7 +85,7 @@ struct stat
>> # ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   include <bits/struct_stat_time64_helper.h>
>> #  else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>> index 830629cd37..44ae08265d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>    The type `struct msg' is opaque.  */
>> struct msqid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_msqid64_ds_helper.h>
>> #else
>>   struct ipc_perm msg_perm;    /* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>> index 4370257557..ccee57c28b 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a set of semaphores.  */
>> struct semid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_semid64_ds_helper.h>
>> #else
>>   struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>> index da1b4b3c56..58145d0a5d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a shared memory segment.  */
>> struct shmid_ds
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_shmid64_ds_helper.h>
>> #else
>>     struct ipc_perm shm_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>> index 9911c47bb2..e5c9024fb2 100644
>> --- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
>> @@ -65,7 +65,7 @@ struct stat
>> #else
>> struct stat
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -166,7 +166,7 @@ struct stat64
>> # else
>> struct stat64
>>   {
>> -#  ifdef __USE_TIME_BITS64
>> +#  ifdef __USE_TIME64_REDIRECTS
>> #   include <bits/struct_stat_time64_helper.h>
>> #  else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>> index cbd4bc0f31..9ad0943982 100644
>> --- a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -89,7 +89,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>> index 59958611c4..e7a6b684cc 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
>> @@ -54,7 +54,7 @@
>> # define SO_TIMESTAMPNS_NEW 0x0042
>> # define SO_TIMESTAMPING_NEW 0x0043
>>
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
>> #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
>> #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>> index 4e48634edc..9ce67b289d 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
>> @@ -28,7 +28,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;            /* Device.  */
>> @@ -85,7 +85,7 @@ struct stat
>> #ifdef __USE_LARGEFILE64
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;            /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>> index db783c28d4..ed8d47c9b6 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
>> @@ -26,7 +26,7 @@
>>    The type `struct msg' is opaque.  */
>> struct msqid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_msqid64_ds_helper.h>
>> #else
>>   struct ipc_perm msg_perm;    /* structure describing operation permission */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>> index 1c8a3693db..b9e729b8b4 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a set of semaphores.  */
>> struct semid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_semid64_ds_helper.h>
>> #else
>>   struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>> index 35a0cc36ab..7885d2ab25 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a shared memory segment.  */
>> struct shmid_ds
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_shmid64_ds_helper.h>
>> #else
>>     struct ipc_perm shm_perm;        /* operation permission struct */
>> diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
>> index 9b51e3bd14..fc8dce45c8 100644
>> --- a/sysdeps/unix/sysv/linux/sys/epoll.h
>> +++ b/sysdeps/unix/sysv/linux/sys/epoll.h
>> @@ -140,7 +140,7 @@ extern int epoll_pwait (int __epfd, struct epoll_event *__events,
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
>>              int __maxevents, const struct timespec *__timeout,
>>              const __sigset_t *__ss)
>> diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h
>> index b13b846261..79a9b31273 100644
>> --- a/sysdeps/unix/sysv/linux/sys/prctl.h
>> +++ b/sysdeps/unix/sysv/linux/sys/prctl.h
>> @@ -38,7 +38,7 @@
>> __BEGIN_DECLS
>>
>> /* Control process execution.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int prctl (int __option, ...) __THROW;
>> #else
>> # ifdef __REDIRECT
>> diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h
>> index 19d0cbfae0..f66ece306a 100644
>> --- a/sysdeps/unix/sysv/linux/sys/timerfd.h
>> +++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
>> @@ -47,7 +47,7 @@ extern int timerfd_settime (int __ufd, int __flags,
>>                 const struct itimerspec *__utmr,
>>                 struct itimerspec *__otmr) __THROW;
>>
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # if defined(__REDIRECT_NTH)
>> extern int __REDIRECT_NTH (timerfd_settime,
>>                            (int __ufd, int __flags,
>> @@ -62,7 +62,7 @@ extern int __REDIRECT_NTH (timerfd_settime,
>> /* Return the next expiration time of UFD.  */
>> extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
>>
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # if defined(__REDIRECT_NTH)
>> extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
>>                                              struct itimerspec *__otmr),
>> diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
>> index 28ce022253..568748d767 100644
>> --- a/sysdeps/unix/sysv/linux/sys/timex.h
>> +++ b/sysdeps/unix/sysv/linux/sys/timex.h
>> @@ -54,7 +54,7 @@ struct ntptimeval
>>
>> __BEGIN_DECLS
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1));
>> extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1));
>>
>> diff --git a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>> index 21aa315d8d..b8b580fbde 100644
>> --- a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>> +++ b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
>> @@ -25,7 +25,7 @@
>>
>> struct stat
>>   {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/struct_stat_time64_helper.h>
>> #else
>>     __dev_t st_dev;        /* Device.  */
>> @@ -102,7 +102,7 @@ struct stat
>> /* Note stat64 has the same shape as stat for x86-64.  */
>> struct stat64
>>   {
>> -# ifdef __USE_TIME_BITS64
>> +# ifdef __USE_TIME64_REDIRECTS
>> #  include <bits/struct_stat_time64_helper.h>
>> # else
>>     __dev_t st_dev;        /* Device.  */
>> diff --git a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>> index 9f3d170b65..81867c0316 100644
>> --- a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>> +++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
>> @@ -23,7 +23,7 @@
>> /* Data structure describing a set of semaphores.  */
>> struct semid_ds
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> # include <bits/types/struct_semid64_ds_helper.h>
>> #else
>>   struct ipc_perm sem_perm;   /* operation permission struct */
>> diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
>> index d0388b0522..4178ad9955 100644
>> --- a/sysvipc/sys/msg.h
>> +++ b/sysvipc/sys/msg.h
>> @@ -58,7 +58,7 @@ struct msgbuf
>> __BEGIN_DECLS
>>
>> /* Message queue control operation.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
>> #else
>> # ifdef __REDIRECT_NTH
>> diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
>> index 5d9ec39296..812f1303b3 100644
>> --- a/sysvipc/sys/sem.h
>> +++ b/sysvipc/sys/sem.h
>> @@ -48,7 +48,7 @@ struct sembuf
>> __BEGIN_DECLS
>>
>> /* Semaphore control operation.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
>> #else
>> # ifdef __REDIRECT_NTH
>> @@ -68,7 +68,7 @@ extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
>>
>> #ifdef __USE_GNU
>> /* Operate on semaphore with timeout.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
>>                const struct timespec *__timeout) __THROW;
>> # else
>> diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
>> index 04191656d5..496e57ef45 100644
>> --- a/sysvipc/sys/shm.h
>> +++ b/sysvipc/sys/shm.h
>> @@ -46,7 +46,7 @@ __BEGIN_DECLS
>>    facility.  The definition is found in XPG4.2.  */
>>
>> /* Shared memory control operation.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
>> #else
>> # ifdef __REDIRECT_NTH
>> diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h
>> index 489e81136d..1141015f27 100644
>> --- a/time/bits/types/struct_timespec.h
>> +++ b/time/bits/types/struct_timespec.h
>> @@ -10,14 +10,14 @@
>>    has nanoseconds instead of microseconds.  */
>> struct timespec
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>   __time64_t tv_sec;        /* Seconds.  */
>> #else
>>   __time_t tv_sec;        /* Seconds.  */
>> #endif
>> #if __WORDSIZE == 64 \
>>   || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \
>> -  || (__TIMESIZE == 32 && !defined __USE_TIME_BITS64)
>> +  || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS)
>>   __syscall_slong_t tv_nsec;    /* Nanoseconds.  */
>> #else
>> # if __BYTE_ORDER == __BIG_ENDIAN
>> diff --git a/time/bits/types/struct_timeval.h b/time/bits/types/struct_timeval.h
>> index 3466137c35..0c8e88c82c 100644
>> --- a/time/bits/types/struct_timeval.h
>> +++ b/time/bits/types/struct_timeval.h
>> @@ -7,7 +7,7 @@
>>    microsecond but also has a range of years.  */
>> struct timeval
>> {
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>>   __time64_t tv_sec;        /* Seconds.  */
>>   __suseconds64_t tv_usec;    /* Microseconds.  */
>> #else
>> diff --git a/time/bits/types/time_t.h b/time/bits/types/time_t.h
>> index 84d67f6ac3..00cde92c62 100644
>> --- a/time/bits/types/time_t.h
>> +++ b/time/bits/types/time_t.h
>> @@ -4,7 +4,7 @@
>> #include <bits/types.h>
>>
>> /* Returned by `time'.  */
>> -#ifdef __USE_TIME_BITS64
>> +#ifdef __USE_TIME64_REDIRECTS
>> typedef __time64_t time_t;
>> #else
>> typedef __time_t time_t;
>> diff --git a/time/sys/time.h b/time/sys/time.h
>> index c8708198a5..8c3d0c3022 100644
>> --- a/time/sys/time.h
>> +++ b/time/sys/time.h
>> @@ -63,7 +63,7 @@ struct timezone
>>    use localtime etc. instead.
>>    This function itself is semi-obsolete;
>>    most callers should use time or clock_gettime instead. */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern int gettimeofday (struct timeval *__restrict __tv,
>>              void *__restrict __tz) __THROW __nonnull ((1));
>> #else
>> @@ -77,7 +77,7 @@ extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv,
>> #endif
>>
>> #ifdef __USE_MISC
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Set the current time of day and timezone information.
>>    This call is restricted to the super-user.
>>    Setting the timezone in this way is obsolete, but we don't yet
>> @@ -143,7 +143,7 @@ typedef enum __itimer_which __itimer_which_t;
>> typedef int __itimer_which_t;
>> #endif
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> /* Set *VALUE to the current setting of timer WHICH.
>>    Return 0 on success, -1 on errors.  */
>> extern int getitimer (__itimer_which_t __which,
>> @@ -184,7 +184,7 @@ extern int __REDIRECT_NTH (utimes, (const char *__file,
>> #endif
>>
>> #ifdef __USE_MISC
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Same as `utimes', but does not follow symbolic links.  */
>> extern int lutimes (const char *__file, const struct timeval __tvp[2])
>>      __THROW __nonnull ((1));
>> @@ -207,7 +207,7 @@ extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]),
>> #endif
>>
>> #ifdef __USE_GNU
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Change the access time of FILE relative to FD to TVP[0] and the
>>    modification time of FILE to TVP[1].  If TVP is a null pointer, use
>>    the current time instead.  Returns 0 on success, -1 on errors.  */
>> diff --git a/time/time.h b/time/time.h
>> index 1609aaeffa..3785dc608f 100644
>> --- a/time/time.h
>> +++ b/time/time.h
>> @@ -71,7 +71,7 @@ __BEGIN_DECLS
>>    The result / CLOCKS_PER_SEC is program time in seconds.  */
>> extern clock_t clock (void) __THROW;
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> /* Return the current time and put it in *TIMER if TIMER is not NULL.  */
>> extern time_t time (time_t *__timer) __THROW;
>>
>> @@ -127,7 +127,7 @@ extern char *strptime_l (const char *__restrict __s,
>> #endif
>>
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> /* Return the `struct tm' representation of *TIMER
>>    in Universal Coordinated Time (aka Greenwich Mean Time).  */
>> extern struct tm *gmtime (const time_t *__timer) __THROW;
>> @@ -149,7 +149,7 @@ extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer),
>>
>>
>> #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Return the `struct tm' representation of *TIMER in UTC,
>>    using *TP to store the result.  */
>> extern struct tm *gmtime_r (const time_t *__restrict __timer,
>> @@ -180,7 +180,7 @@ extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t,
>> extern char *asctime (const struct tm *__tp) __THROW;
>>
>> /* Equivalent to `asctime (localtime (timer))'.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern char *ctime (const time_t *__timer) __THROW;
>> #else
>> # ifdef __REDIRECT_NTH
>> @@ -199,7 +199,7 @@ extern char *asctime_r (const struct tm *__restrict __tp,
>>             char *__restrict __buf) __THROW;
>>
>> /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> extern char *ctime_r (const time_t *__restrict __timer,
>>               char *__restrict __buf) __THROW;
>> #else
>> @@ -242,7 +242,7 @@ extern long int timezone;
>>
>>
>> #if defined __USE_MISC || __GLIBC_USE (ISOC2X)
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Like `mktime', but for TP represents Universal Time, not local time.  */
>> extern time_t timegm (struct tm *__tp) __THROW;
>> # else
>> @@ -259,7 +259,7 @@ extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
>> /* Miscellaneous functions many Unices inherited from the public domain
>>    localtime package.  These are included only for compatibility.  */
>>
>> -#ifndef __USE_TIME_BITS64
>> +#ifndef __USE_TIME64_REDIRECTS
>> /* Another name for `mktime'.  */
>> extern time_t timelocal (struct tm *__tp) __THROW;
>> #else
>> @@ -274,7 +274,7 @@ extern int dysize (int __year) __THROW  __attribute__ ((__const__));
>>
>>
>> #ifdef __USE_POSIX199309
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Pause execution for a number of nanoseconds.
>>
>>    This function is a cancellation point and therefore not marked with
>> @@ -320,7 +320,7 @@ extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
>>
>>    This function is a cancellation point and therefore not marked with
>>    __THROW.  */
>> -#  ifndef __USE_TIME_BITS64
>> +#  ifndef __USE_TIME64_REDIRECTS
>> extern int clock_nanosleep (clockid_t __clock_id, int __flags,
>>                 const struct timespec *__req,
>>                 struct timespec *__rem);
>> @@ -349,7 +349,7 @@ extern int timer_create (clockid_t __clock_id,
>> extern int timer_delete (timer_t __timerid) __THROW;
>>
>> /* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> extern int timer_settime (timer_t __timerid, int __flags,
>>               const struct itimerspec *__restrict __value,
>>               struct itimerspec *__restrict __ovalue) __THROW;
>> @@ -379,7 +379,7 @@ extern int timer_getoverrun (timer_t __timerid) __THROW;
>>
>>
>> #ifdef __USE_ISOC11
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Set TS to calendar time based in time base BASE.  */
>> extern int timespec_get (struct timespec *__ts, int __base)
>>      __THROW __nonnull ((1));
>> @@ -395,7 +395,7 @@ extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base),
>>
>>
>> #if __GLIBC_USE (ISOC2X)
>> -# ifndef __USE_TIME_BITS64
>> +# ifndef __USE_TIME64_REDIRECTS
>> /* Set TS to resolution of time base BASE.  */
>> extern int timespec_getres (struct timespec *__ts, int __base)
>>      __THROW;
>> -- 
>> 2.34.1
>>
>
diff mbox series

Patch

diff --git a/io/bits/poll2.h b/io/bits/poll2.h
index 6152a8c5e4..efc8b85403 100644
--- a/io/bits/poll2.h
+++ b/io/bits/poll2.h
@@ -43,7 +43,7 @@  poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
 
 
 #ifdef __USE_GNU
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
 				       const struct timespec *__timeout,
 				       const __sigset_t *__ss), __ppoll64);
diff --git a/io/fcntl.h b/io/fcntl.h
index 9cee0b5900..0a493d1dd3 100644
--- a/io/fcntl.h
+++ b/io/fcntl.h
@@ -172,7 +172,7 @@  typedef __pid_t pid_t;
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 # ifndef __USE_FILE_OFFSET64
 extern int fcntl (int __fd, int __cmd, ...);
 # else
diff --git a/io/fts.h b/io/fts.h
index 61f95bb441..97a031ebbd 100644
--- a/io/fts.h
+++ b/io/fts.h
@@ -187,7 +187,7 @@  FTSENT	*fts_read (FTS *);
 int	 fts_set (FTS *, FTSENT *, int) __THROW;
 #else
 # ifdef __REDIRECT
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 FTSENT	*__REDIRECT (fts_children, (FTS *, int), fts64_children);
 int	 __REDIRECT (fts_close, (FTS *), fts64_close);
 FTS	*__REDIRECT (fts_open, (char * const *, int,
@@ -206,7 +206,7 @@  int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
 			 __fts64_set_time64);
 #  endif
 # else
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 #   define fts_children fts64_children
 #   define fts_close fts64_close
 #   define fts_open fts64_open
@@ -217,7 +217,7 @@  int	 __REDIRECT_NTH (fts_set, (FTS *, FTSENT *, int),
 # endif
 #endif
 #ifdef __USE_LARGEFILE64
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 FTSENT64 *fts64_children (FTS64 *, int);
 int	  fts64_close (FTS64 *);
 FTS64	 *fts64_open (char * const *, int,
diff --git a/io/ftw.h b/io/ftw.h
index e4d1b84d53..39cf595b27 100644
--- a/io/ftw.h
+++ b/io/ftw.h
@@ -137,7 +137,7 @@  extern int ftw (const char *__dir, __ftw_func_t __func, int __descriptors)
      __nonnull ((1, 2));
 #else
 # ifdef __REDIRECT
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
 			     int __descriptors), ftw64) __nonnull ((1, 2));
 #  else
@@ -146,7 +146,7 @@  extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
      __nonnull ((1, 2));
 #  endif
 # else
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 #   define ftw ftw64
 #  else
 #   define ftw __ftw64_time64
@@ -154,7 +154,7 @@  extern int __REDIRECT (ftw, (const char *__dir, __ftw_func_t __func,
 # endif
 #endif
 #ifdef __USE_LARGEFILE64
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int ftw64 (const char *__dir, __ftw64_func_t __func,
 		  int __descriptors) __nonnull ((1, 2));
 # else
@@ -180,7 +180,7 @@  extern int nftw (const char *__dir, __nftw_func_t __func, int __descriptors,
 		 int __flag) __nonnull ((1, 2));
 # else
 #  ifdef __REDIRECT
-#   ifndef __USE_TIME_BITS64
+#   ifndef __USE_TIME64_REDIRECTS
 extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
 			      int __descriptors, int __flag), nftw64)
      __nonnull ((1, 2));
@@ -190,7 +190,7 @@  extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
      __nonnull ((1, 2));
 #   endif
 #  else
-#   ifndef __USE_TIME_BITS64
+#   ifndef __USE_TIME64_REDIRECTS
 #    define nftw nftw64
 #   else
 #    define nftw __nftw64_time64
@@ -198,7 +198,7 @@  extern int __REDIRECT (nftw, (const char *__dir, __nftw_func_t __func,
 #  endif
 # endif
 # ifdef __USE_LARGEFILE64
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int nftw64 (const char *__dir, __nftw64_func_t __func,
 		   int __descriptors, int __flag) __nonnull ((1, 2));
 #  else
diff --git a/io/sys/poll.h b/io/sys/poll.h
index 7858fad6b9..c324ff5dad 100644
--- a/io/sys/poll.h
+++ b/io/sys/poll.h
@@ -66,7 +66,7 @@  extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
 		  const __sigset_t *__ss)
     __fortified_attr_access (__write_only__, 1, 2);
 
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  ifdef __REDIRECT
 extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
                                const struct timespec *__timeout,
diff --git a/io/sys/stat.h b/io/sys/stat.h
index 1fa6d6e62e..3b4ba80132 100644
--- a/io/sys/stat.h
+++ b/io/sys/stat.h
@@ -209,7 +209,7 @@  extern int stat (const char *__restrict __file,
    that file descriptor FD is open on and put them in BUF.  */
 extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
 #else
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  ifdef __REDIRECT_NTH
 extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
 				  struct stat *__restrict __buf),
@@ -236,7 +236,7 @@  extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
 # endif
 #endif
 #ifdef __USE_LARGEFILE64
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int stat64 (const char *__restrict __file,
 		   struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
 extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
@@ -265,7 +265,7 @@  extern int fstatat (int __fd, const char *__restrict __file,
 		    struct stat *__restrict __buf, int __flag)
      __THROW __nonnull ((2, 3));
 # else
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   ifdef __REDIRECT_NTH
 extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
 				     struct stat *__restrict __buf,
@@ -287,7 +287,7 @@  extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file,
 # endif
 
 # ifdef __USE_LARGEFILE64
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int fstatat64 (int __fd, const char *__restrict __file,
 		      struct stat64 *__restrict __buf, int __flag)
      __THROW __nonnull ((2, 3));
@@ -313,7 +313,7 @@  extern int __REDIRECT_NTH (fstatat64, (int __fd,
 extern int lstat (const char *__restrict __file,
 		  struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
 # else
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   ifdef __REDIRECT_NTH
 extern int __REDIRECT_NTH (lstat,
 			   (const char *__restrict __file,
@@ -334,7 +334,7 @@  extern int __REDIRECT_NTH (lstat,
 #  endif
 # endif
 # ifdef __USE_LARGEFILE64
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int lstat64 (const char *__restrict __file,
 		    struct stat64 *__restrict __buf)
      __THROW __nonnull ((1, 2));
@@ -427,7 +427,7 @@  extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
 #endif
 
 #ifdef __USE_ATFILE
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Set file access and modification times relative to directory file
    descriptor.  */
 extern int utimensat (int __fd, const char *__path,
@@ -447,7 +447,7 @@  extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
 #endif
 
 #ifdef __USE_XOPEN2K8
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Set file access and modification times of the file associated with FD.  */
 extern int futimens (int __fd, const struct timespec __times[2]) __THROW;
 
diff --git a/io/utime.h b/io/utime.h
index c5eacedd6a..1c7587d9c1 100644
--- a/io/utime.h
+++ b/io/utime.h
@@ -35,7 +35,7 @@  __BEGIN_DECLS
 /* Structure describing file times.  */
 struct utimbuf
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
     __time64_t actime;		/* Access time.  */
     __time64_t modtime;		/* Modification time.  */
 #else
@@ -46,7 +46,7 @@  struct utimbuf
 
 /* Set the access and modification times of FILE to those given in
    *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int utime (const char *__file,
 		  const struct utimbuf *__file_times)
      __THROW __nonnull ((1));
diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
index 3f2338ddd3..ea6583e122 100644
--- a/misc/sys/ioctl.h
+++ b/misc/sys/ioctl.h
@@ -38,7 +38,7 @@  __BEGIN_DECLS
 /* Perform the I/O control operation specified by REQUEST on FD.
    One argument may follow; its presence and type depend on REQUEST.
    Return value depends on REQUEST.  Usually -1 indicates error.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
 #else
 # ifdef __REDIRECT
diff --git a/misc/sys/select.h b/misc/sys/select.h
index e6a0c1b8b2..2e45e94bc1 100644
--- a/misc/sys/select.h
+++ b/misc/sys/select.h
@@ -98,7 +98,7 @@  __BEGIN_DECLS
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int select (int __nfds, fd_set *__restrict __readfds,
 		   fd_set *__restrict __writefds,
 		   fd_set *__restrict __exceptfds,
@@ -123,7 +123,7 @@  extern int __REDIRECT (select,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int pselect (int __nfds, fd_set *__restrict __readfds,
 		    fd_set *__restrict __writefds,
 		    fd_set *__restrict __exceptfds,
diff --git a/posix/glob.h b/posix/glob.h
index 3406662840..b6bba0fbcd 100644
--- a/posix/glob.h
+++ b/posix/glob.h
@@ -150,7 +150,7 @@  extern int glob (const char *__restrict __pattern, int __flags,
 /* Free storage allocated in PGLOB by a previous `glob' call.  */
 extern void globfree (glob_t *__pglob) __THROW;
 #else
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 extern int __REDIRECT_NTHNL (glob, (const char *__restrict __pattern,
 				    int __flags,
 				    int (*__errfunc) (const char *, int),
@@ -170,7 +170,7 @@  extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
 #endif
 
 #ifdef __USE_LARGEFILE64
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 extern int __REDIRECT_NTHNL (glob64, (const char *__restrict __pattern,
 				      int __flags,
 				      int (*__errfunc) (const char *, int),
diff --git a/posix/sched.h b/posix/sched.h
index 3eac206f35..49f504a488 100644
--- a/posix/sched.h
+++ b/posix/sched.h
@@ -74,7 +74,7 @@  extern int sched_get_priority_max (int __algorithm) __THROW;
 extern int sched_get_priority_min (int __algorithm) __THROW;
 
 /* Get the SCHED_RR interval for the named process.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
 #else
 # ifdef __REDIRECT_NTH
diff --git a/posix/sys/wait.h b/posix/sys/wait.h
index edbb7b4392..1f44ee1145 100644
--- a/posix/sys/wait.h
+++ b/posix/sys/wait.h
@@ -139,7 +139,7 @@  struct rusage;
    nil, store information about the child's resource usage there.  If the
    WUNTRACED bit is set in OPTIONS, return status for stopped children;
    otherwise don't.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern __pid_t wait3 (int *__stat_loc, int __options,
 		      struct rusage * __usage) __THROWNL;
 # else
@@ -154,7 +154,7 @@  extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options,
 #endif
 
 #ifdef __USE_MISC
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* PID is like waitpid.  Other args are like wait3.  */
 extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options,
 		      struct rusage *__usage) __THROWNL;
diff --git a/resolv/netdb.h b/resolv/netdb.h
index 14228b0d95..b7f473fafe 100644
--- a/resolv/netdb.h
+++ b/resolv/netdb.h
@@ -701,7 +701,7 @@  extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
 extern int gai_suspend (const struct gaicb *const __list[], int __ent,
 			const struct timespec *__timeout);
 
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  if defined(__REDIRECT)
 extern int __REDIRECT (gai_suspend, (const struct gaicb *const __list[],
                                      int __ent,
diff --git a/resource/sys/resource.h b/resource/sys/resource.h
index a5634ba715..b0bf751e92 100644
--- a/resource/sys/resource.h
+++ b/resource/sys/resource.h
@@ -88,7 +88,7 @@  extern int setrlimit64 (__rlimit_resource_t __resource,
    and put it in *USAGE.  Returns 0 for success, -1 for failure.  */
 extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW;
 
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # if defined(__REDIRECT_NTH)
 extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
                                        struct rusage *__usage),
diff --git a/rt/aio.h b/rt/aio.h
index 37d19abf16..e71435733f 100644
--- a/rt/aio.h
+++ b/rt/aio.h
@@ -193,7 +193,7 @@  extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp),
 extern int __REDIRECT_NTH (aio_cancel,
 			   (int __fildes, struct aiocb *__aiocbp),
 			   aio_cancel64);
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 extern int __REDIRECT_NTH (aio_suspend,
 			   (const struct aiocb *const __list[], int __nent,
 			    const struct timespec *__restrict __timeout),
@@ -215,7 +215,7 @@  extern int __REDIRECT_NTH (aio_fsync,
 #  define aio_error aio_error64
 #  define aio_return aio_return64
 #  define aio_cancel aio_cancel64
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   define aio_suspend __aio_suspend_time64
 #  else
 #   define aio_suspend aio_suspend64
diff --git a/rt/mqueue.h b/rt/mqueue.h
index 787cc36df2..fd6fff4bb2 100644
--- a/rt/mqueue.h
+++ b/rt/mqueue.h
@@ -71,7 +71,7 @@  extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len,
 		    unsigned int __msg_prio) __nonnull ((2));
 
 #ifdef __USE_XOPEN2K
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Receive the oldest from highest priority messages in message queue
    MQDES, stop waiting if ABS_TIMEOUT expires.  */
 extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr,
diff --git a/signal/signal.h b/signal/signal.h
index f37499ce60..8e07b041b1 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -269,7 +269,7 @@  extern int sigwaitinfo (const sigset_t *__restrict __set,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int sigtimedwait (const sigset_t *__restrict __set,
 			 siginfo_t *__restrict __info,
 			 const struct timespec *__restrict __timeout)
diff --git a/socket/sys/socket.h b/socket/sys/socket.h
index 366eaab845..463cf3291b 100644
--- a/socket/sys/socket.h
+++ b/socket/sys/socket.h
@@ -170,7 +170,7 @@  extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
 			int __flags);
 #else
@@ -191,7 +191,7 @@  extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
 		     unsigned int __vlen, int __flags);
 # else
@@ -204,7 +204,7 @@  extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
 			 unsigned int __vlen, int __flags);
 #   define sendmmsg __sendmmsg64
 #  endif
-# endif	 /* __USE_TIME_BITS64 */
+# endif	 /* __USE_TIME64_REDIRECTS */
 #endif /* __USE_GNU */
 
 /* Receive a message as described by MESSAGE from socket FD.
@@ -212,7 +212,7 @@  extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
 #else
 # ifdef __REDIRECT
@@ -231,7 +231,7 @@  extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags);
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
 		     unsigned int __vlen, int __flags,
 		     struct timespec *__tmo);
@@ -251,7 +251,7 @@  extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
 /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
    into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
    actual length.  Returns 0 on success, -1 for errors.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int getsockopt (int __fd, int __level, int __optname,
 		       void *__restrict __optval,
 		       socklen_t *__restrict __optlen) __THROW;
@@ -273,7 +273,7 @@  extern int __getsockopt64 (int __fd, int __level, int __optname,
 /* Set socket FD's option OPTNAME at protocol level LEVEL
    to *OPTVAL (which is OPTLEN bytes long).
    Returns 0 on success, -1 for errors.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int setsockopt (int __fd, int __level, int __optname,
 		       const void *__optval, socklen_t __optlen) __THROW;
 #else
diff --git a/support/timespec.h b/support/timespec.h
index 42f32bcc2c..5ccc7163a5 100644
--- a/support/timespec.h
+++ b/support/timespec.h
@@ -35,7 +35,7 @@  make_timespec (time_t s, long int ns)
 
 enum { TIMESPEC_HZ = 1000000000 };
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 struct timespec timespec_add (struct timespec, struct timespec)
   __attribute__((const));
 struct timespec timespec_sub (struct timespec, struct timespec)
diff --git a/support/xtime.h b/support/xtime.h
index 5200eef2e0..9961899634 100644
--- a/support/xtime.h
+++ b/support/xtime.h
@@ -30,7 +30,7 @@  __BEGIN_DECLS
 /* The following functions call the corresponding libc functions and
    terminate the process on error.  */
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 void xclock_gettime (clockid_t clock, struct timespec *ts);
 void xclock_settime (clockid_t clock, const struct timespec *ts);
 #else
diff --git a/support/xunistd.h b/support/xunistd.h
index b5e8c2f420..13be9a46a3 100644
--- a/support/xunistd.h
+++ b/support/xunistd.h
@@ -36,7 +36,7 @@  pid_t xwaitpid (pid_t, int *status, int flags);
 void xpipe (int[2]);
 void xdup2 (int, int);
 int xopen (const char *path, int flags, mode_t);
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 # ifdef __USE_FILE_OFFSET64
 void xstat (const char *path, struct stat *);
 void xlstat (const char *path, struct stat *);
diff --git a/sysdeps/generic/features-time64.h b/sysdeps/generic/features-time64.h
index 4d38b8ba76..4d1c8319d4 100644
--- a/sysdeps/generic/features-time64.h
+++ b/sysdeps/generic/features-time64.h
@@ -17,3 +17,5 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 /* The generic configuration only support _TIME_BITS=32.  */
+#define __USE_TIME_BITS64       0
+#define __USE_TIME64_REDIRECTS  0
diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
index 1607fdf29a..3d4f4a756c 100644
--- a/sysdeps/nptl/pthread.h
+++ b/sysdeps/nptl/pthread.h
@@ -223,7 +223,7 @@  extern int pthread_join (pthread_t __th, void **__thread_return);
    the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
 extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
 
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Make calling thread wait for termination of the thread TH, but only
    until TIMEOUT.  The exit status of the thread is stored in
    *THREAD_RETURN, if THREAD_RETURN is not NULL.
@@ -796,7 +796,7 @@  extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
 
 #ifdef __USE_XOPEN2K
 /* Wait until lock becomes available, or specified time passes. */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
 				    const struct timespec *__restrict
 				    __abstime) __THROWNL __nonnull ((1, 2));
@@ -813,7 +813,7 @@  extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
 #endif
 
 #ifdef __USE_GNU
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
 				    clockid_t __clockid,
 				    const struct timespec *__restrict
@@ -982,7 +982,7 @@  extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
 
 # ifdef __USE_XOPEN2K
 /* Try to acquire read lock for RWLOCK or return after specified time.  */
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
 				       const struct timespec *__restrict
 				       __abstime) __THROWNL __nonnull ((1, 2));
@@ -1000,7 +1000,7 @@  extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
 # endif
 
 # ifdef __USE_GNU
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
 				       clockid_t __clockid,
 				       const struct timespec *__restrict
@@ -1029,7 +1029,7 @@  extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
 
 # ifdef __USE_XOPEN2K
 /* Try to acquire write lock for RWLOCK or return after specified time.  */
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
 				       const struct timespec *__restrict
 				       __abstime) __THROWNL __nonnull ((1, 2));
@@ -1047,7 +1047,7 @@  extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
 # endif
 
 # ifdef __USE_GNU
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
 				       clockid_t __clockid,
 				       const struct timespec *__restrict
@@ -1141,7 +1141,7 @@  extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
 				   pthread_mutex_t *__restrict __mutex,
 				   const struct timespec *__restrict __abstime)
@@ -1167,7 +1167,7 @@  extern int __REDIRECT (pthread_cond_timedwait,
 
    This function is a cancellation point and therefore not marked with
    __THROW. */
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
 				   pthread_mutex_t *__restrict __mutex,
 				   __clockid_t __clock_id,
diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
index c75ca4ce6d..8a09633699 100644
--- a/sysdeps/pthread/semaphore.h
+++ b/sysdeps/pthread/semaphore.h
@@ -59,7 +59,7 @@  extern int sem_wait (sem_t *__sem) __nonnull ((1));
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int sem_timedwait (sem_t *__restrict __sem,
 			  const struct timespec *__restrict __abstime)
   __nonnull ((1, 2));
@@ -77,7 +77,7 @@  extern int __REDIRECT (sem_timedwait,
 #endif
 
 #ifdef __USE_GNU
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int sem_clockwait (sem_t *__restrict __sem,
 			  clockid_t clock,
 			  const struct timespec *__restrict __abstime)
diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
index c5410b5c3a..7cade24e1f 100644
--- a/sysdeps/pthread/threads.h
+++ b/sysdeps/pthread/threads.h
@@ -90,7 +90,7 @@  extern thrd_t thrd_current (void);
    __TIME_POINT.  The current thread may resume if receives a signal.  In
    that case, if __REMAINING is not NULL, the remaining time is stored in
    the object pointed by it.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int thrd_sleep (const struct timespec *__time_point,
 		       struct timespec *__remaining);
 #else
@@ -143,7 +143,7 @@  extern int mtx_lock (mtx_t *__mutex);
 /* Block the current thread until the mutex pointed by __MUTEX is unlocked
    or time pointed by __TIME_POINT is reached.  In case the mutex is unlock,
    the current thread will not be blocked.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int mtx_timedlock (mtx_t *__restrict __mutex,
 			  const struct timespec *__restrict __time_point);
 #else
@@ -194,7 +194,7 @@  extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex);
 /* Block current thread on the condition variable until condition variable
    pointed by __COND is signaled or time pointed by __TIME_POINT is
    reached.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int cnd_timedwait (cnd_t *__restrict __cond,
 			  mtx_t *__restrict __mutex,
 			  const struct timespec *__restrict __time_point);
diff --git a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
index 255feaa8cb..1fc5917b8e 100644
--- a/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/arm/bits/struct_stat.h
@@ -28,7 +28,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;			/* Device.  */
@@ -89,7 +89,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
index d997dbf594..b2102d3abf 100644
--- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
+++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
@@ -64,7 +64,7 @@ 
 #  define SO_TIMESTAMPNS_NEW 64
 #  define SO_TIMESTAMPING_NEW 65
 
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   define SO_RCVTIMEO SO_RCVTIMEO_NEW
 #   define SO_SNDTIMEO SO_SNDTIMEO_NEW
 #   define SO_TIMESTAMP SO_TIMESTAMP_NEW
diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h
index b70ba58a7d..cab4057971 100644
--- a/sysdeps/unix/sysv/linux/bits/time.h
+++ b/sysdeps/unix/sysv/linux/bits/time.h
@@ -77,7 +77,7 @@  __BEGIN_DECLS
 /* Tune a POSIX clock.  */
 extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW __nonnull((2));
 
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # if defined(__REDIRECT_NTH)
 extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
                                            struct timex *__utx),
diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h
index 398d8094f2..03ccde6d0a 100644
--- a/sysdeps/unix/sysv/linux/bits/timex.h
+++ b/sysdeps/unix/sysv/linux/bits/timex.h
@@ -25,7 +25,7 @@ 
 
 struct timex
 {
-# if defined __USE_TIME_BITS64 || (__TIMESIZE == 64 && __WORDSIZE == 32)
+# if defined __USE_TIME64_REDIRECTS || (__TIMESIZE == 64 && __WORDSIZE == 32)
   unsigned int modes;          /* mode selector */
   int :32;                     /* pad */
   long long offset;            /* time offset (usec) */
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
index fae50281c7..86296ca922 100644
--- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
@@ -26,7 +26,7 @@ 
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_msqid64_ds_helper.h>
 #else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
index 3c277ed1d8..2ac89b3ce4 100644
--- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a set of semaphores.  */
 struct semid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_semid64_ds_helper.h>
 #else
   struct ipc_perm sem_perm;        /* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
index 09de0b4e3a..1012ed0317 100644
--- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a shared memory segment.  */
 struct shmid_ds
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_shmid64_ds_helper.h>
 #else
     struct ipc_perm shm_perm;		/* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
index 4b4822d6d0..47a9f0aaff 100644
--- a/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/csky/bits/struct_stat.h
@@ -43,7 +43,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;		/* Device.  */
@@ -88,7 +88,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;		/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/features-time64.h b/sysdeps/unix/sysv/linux/features-time64.h
index dd3442c2ea..8d573cd23e 100644
--- a/sysdeps/unix/sysv/linux/features-time64.h
+++ b/sysdeps/unix/sysv/linux/features-time64.h
@@ -24,9 +24,8 @@ 
 # if _TIME_BITS == 64
 #  if ! defined (_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64
 #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
-#  elif __TIMESIZE == 32
-#   define __USE_TIME_BITS64	1
 #  endif
+#  define __USE_TIME_BITS64	1
 # elif _TIME_BITS == 32
 #  if __TIMESIZE > 32
 #   error "_TIME_BITS=32 is not compatible with __TIMESIZE > 32"
@@ -34,4 +33,10 @@ 
 # else
 #  error Invalid _TIME_BITS value (can only be 32 or 64-bit)
 # endif
+#elif __TIMESIZE == 64
+# define __USE_TIME_BITS64      1
+#endif
+
+#if defined __USE_TIME_BITS64 && __TIMESIZE == 32
+# define __USE_TIME64_REDIRECTS 1
 #endif
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
index 58b523d03a..80a76a17dc 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/socket-constants.h
@@ -54,7 +54,7 @@ 
 # define SO_TIMESTAMPNS_NEW 0x4039
 # define SO_TIMESTAMPING_NEW 0x403A
 
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
 #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
 #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
index 069efdbc55..67f7c110cd 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h
@@ -28,7 +28,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;			/* Device.  */
@@ -89,7 +89,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
index 2bc7cac06d..4995e0a4a5 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
@@ -26,7 +26,7 @@ 
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_msqid64_ds_helper.h>
 #else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
index dd8fbebcf4..df88949dc2 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a set of semaphores.  */
 struct semid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_semid64_ds_helper.h>
 #else
   struct ipc_perm sem_perm;   /* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
index 58ac572b6e..cb3b0303aa 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a shared memory segment.  */
 struct shmid_ds
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_shmid64_ds_helper.h>
 #else
     struct ipc_perm shm_perm;		/* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
index 3b1db157bc..2b662668e8 100644
--- a/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h
@@ -25,7 +25,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;			/* Device.  */
@@ -86,7 +86,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
index 0f4693fb1f..04686f30ec 100644
--- a/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h
@@ -26,7 +26,7 @@ 
 #ifndef __USE_FILE_OFFSET64
 struct stat
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
         __dev_t         st_dev;     /* Device.  */
@@ -74,7 +74,7 @@  struct stat
  * create one ifdef to separate stats structures.  */
 struct stat
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
         unsigned long long      st_dev;     /* Device.  */
@@ -119,7 +119,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
 {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
         unsigned long long      st_dev;     /* Device.  */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
index c6908a2793..77ffc8b890 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/socket-constants.h
@@ -54,7 +54,7 @@ 
 # define SO_TIMESTAMPNS_NEW 64
 # define SO_TIMESTAMPING_NEW 65
 
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
 #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
 #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
diff --git a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
index 277ebad9b6..26682f8d4f 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/struct_stat.h
@@ -29,7 +29,7 @@ 
 /* Structure describing file characteristics.  */
 struct stat
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     unsigned long int st_dev;
@@ -88,7 +88,7 @@  struct stat
 # ifdef __USE_LARGEFILE64
 struct stat64
   {
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   include <bits/struct_stat_time64_helper.h>
 #  else
     unsigned long int st_dev;
@@ -131,7 +131,7 @@  struct stat64
 
 struct stat
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;
@@ -189,7 +189,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;
diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
index 4e8bd51b0a..09c53648b7 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
@@ -26,7 +26,7 @@ 
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_msqid64_ds_helper.h>
 #else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
index d1a30e3164..0746684a7d 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a set of semaphores.  */
 struct semid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_semid64_ds_helper.h>
 #else
   struct ipc_perm sem_perm;		/* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
index 8771164b57..c665af1874 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a shared memory segment.  */
 struct shmid_ds
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_shmid64_ds_helper.h>
 #else
     struct ipc_perm shm_perm;		/* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
index 672c7c6bb8..dab466d881 100644
--- a/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/nios2/bits/struct_stat.h
@@ -43,7 +43,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;		/* Device.  */
@@ -88,7 +88,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;		/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
index 6be5055e65..0d3e095c5d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h
@@ -54,7 +54,7 @@ 
 # define SO_TIMESTAMPNS_NEW 64
 # define SO_TIMESTAMPING_NEW 65
 
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
 #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
 #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
index f6328399cd..20ed8dd9b8 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h
@@ -28,7 +28,7 @@ 
 #if __WORDSIZE == 32
 struct stat
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
@@ -85,7 +85,7 @@  struct stat
 # ifdef __USE_LARGEFILE64
 struct stat64
   {
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   include <bits/struct_stat_time64_helper.h>
 #  else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
index 830629cd37..44ae08265d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
@@ -26,7 +26,7 @@ 
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_msqid64_ds_helper.h>
 #else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
index 4370257557..ccee57c28b 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a set of semaphores.  */
 struct semid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_semid64_ds_helper.h>
 #else
   struct ipc_perm sem_perm;   /* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
index da1b4b3c56..58145d0a5d 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a shared memory segment.  */
 struct shmid_ds
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_shmid64_ds_helper.h>
 #else
     struct ipc_perm shm_perm;		/* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
index 9911c47bb2..e5c9024fb2 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/struct_stat.h
@@ -65,7 +65,7 @@  struct stat
 #else
 struct stat
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
@@ -166,7 +166,7 @@  struct stat64
 # else
 struct stat64
   {
-#  ifdef __USE_TIME_BITS64
+#  ifdef __USE_TIME64_REDIRECTS
 #   include <bits/struct_stat_time64_helper.h>
 #  else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
index cbd4bc0f31..9ad0943982 100644
--- a/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/sh/bits/struct_stat.h
@@ -28,7 +28,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;			/* Device.  */
@@ -89,7 +89,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
index 59958611c4..e7a6b684cc 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/socket-constants.h
@@ -54,7 +54,7 @@ 
 # define SO_TIMESTAMPNS_NEW 0x0042
 # define SO_TIMESTAMPING_NEW 0x0043
 
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  define SO_RCVTIMEO SO_RCVTIMEO_NEW
 #  define SO_SNDTIMEO SO_SNDTIMEO_NEW
 #  define SO_TIMESTAMP SO_TIMESTAMP_NEW
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
index 4e48634edc..9ce67b289d 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h
@@ -28,7 +28,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;			/* Device.  */
@@ -85,7 +85,7 @@  struct stat
 #ifdef __USE_LARGEFILE64
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;			/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
index db783c28d4..ed8d47c9b6 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
@@ -26,7 +26,7 @@ 
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_msqid64_ds_helper.h>
 #else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
index 1c8a3693db..b9e729b8b4 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a set of semaphores.  */
 struct semid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_semid64_ds_helper.h>
 #else
   struct ipc_perm sem_perm;   /* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
index 35a0cc36ab..7885d2ab25 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a shared memory segment.  */
 struct shmid_ds
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_shmid64_ds_helper.h>
 #else
     struct ipc_perm shm_perm;		/* operation permission struct */
diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h
index 9b51e3bd14..fc8dce45c8 100644
--- a/sysdeps/unix/sysv/linux/sys/epoll.h
+++ b/sysdeps/unix/sysv/linux/sys/epoll.h
@@ -140,7 +140,7 @@  extern int epoll_pwait (int __epfd, struct epoll_event *__events,
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
 			 int __maxevents, const struct timespec *__timeout,
 			 const __sigset_t *__ss)
diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h
index b13b846261..79a9b31273 100644
--- a/sysdeps/unix/sysv/linux/sys/prctl.h
+++ b/sysdeps/unix/sysv/linux/sys/prctl.h
@@ -38,7 +38,7 @@ 
 __BEGIN_DECLS
 
 /* Control process execution.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int prctl (int __option, ...) __THROW;
 #else
 # ifdef __REDIRECT
diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h
index 19d0cbfae0..f66ece306a 100644
--- a/sysdeps/unix/sysv/linux/sys/timerfd.h
+++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
@@ -47,7 +47,7 @@  extern int timerfd_settime (int __ufd, int __flags,
 			    const struct itimerspec *__utmr,
 			    struct itimerspec *__otmr) __THROW;
 
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # if defined(__REDIRECT_NTH)
 extern int __REDIRECT_NTH (timerfd_settime,
                            (int __ufd, int __flags,
@@ -62,7 +62,7 @@  extern int __REDIRECT_NTH (timerfd_settime,
 /* Return the next expiration time of UFD.  */
 extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
 
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # if defined(__REDIRECT_NTH)
 extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
                                              struct itimerspec *__otmr),
diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h
index 28ce022253..568748d767 100644
--- a/sysdeps/unix/sysv/linux/sys/timex.h
+++ b/sysdeps/unix/sysv/linux/sys/timex.h
@@ -54,7 +54,7 @@  struct ntptimeval
 
 __BEGIN_DECLS
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1));
 extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1));
 
diff --git a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
index 21aa315d8d..b8b580fbde 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/struct_stat.h
@@ -25,7 +25,7 @@ 
 
 struct stat
   {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/struct_stat_time64_helper.h>
 #else
     __dev_t st_dev;		/* Device.  */
@@ -102,7 +102,7 @@  struct stat
 /* Note stat64 has the same shape as stat for x86-64.  */
 struct stat64
   {
-# ifdef __USE_TIME_BITS64
+# ifdef __USE_TIME64_REDIRECTS
 #  include <bits/struct_stat_time64_helper.h>
 # else
     __dev_t st_dev;		/* Device.  */
diff --git a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
index 9f3d170b65..81867c0316 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
@@ -23,7 +23,7 @@ 
 /* Data structure describing a set of semaphores.  */
 struct semid_ds
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 # include <bits/types/struct_semid64_ds_helper.h>
 #else
   struct ipc_perm sem_perm;   /* operation permission struct */
diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
index d0388b0522..4178ad9955 100644
--- a/sysvipc/sys/msg.h
+++ b/sysvipc/sys/msg.h
@@ -58,7 +58,7 @@  struct msgbuf
 __BEGIN_DECLS
 
 /* Message queue control operation.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW;
 #else
 # ifdef __REDIRECT_NTH
diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
index 5d9ec39296..812f1303b3 100644
--- a/sysvipc/sys/sem.h
+++ b/sysvipc/sys/sem.h
@@ -48,7 +48,7 @@  struct sembuf
 __BEGIN_DECLS
 
 /* Semaphore control operation.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW;
 #else
 # ifdef __REDIRECT_NTH
@@ -68,7 +68,7 @@  extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW;
 
 #ifdef __USE_GNU
 /* Operate on semaphore with timeout.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops,
 		       const struct timespec *__timeout) __THROW;
 # else
diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
index 04191656d5..496e57ef45 100644
--- a/sysvipc/sys/shm.h
+++ b/sysvipc/sys/shm.h
@@ -46,7 +46,7 @@  __BEGIN_DECLS
    facility.  The definition is found in XPG4.2.  */
 
 /* Shared memory control operation.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW;
 #else
 # ifdef __REDIRECT_NTH
diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h
index 489e81136d..1141015f27 100644
--- a/time/bits/types/struct_timespec.h
+++ b/time/bits/types/struct_timespec.h
@@ -10,14 +10,14 @@ 
    has nanoseconds instead of microseconds.  */
 struct timespec
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
   __time64_t tv_sec;		/* Seconds.  */
 #else
   __time_t tv_sec;		/* Seconds.  */
 #endif
 #if __WORDSIZE == 64 \
   || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \
-  || (__TIMESIZE == 32 && !defined __USE_TIME_BITS64)
+  || (__TIMESIZE == 32 && !defined __USE_TIME64_REDIRECTS)
   __syscall_slong_t tv_nsec;	/* Nanoseconds.  */
 #else
 # if __BYTE_ORDER == __BIG_ENDIAN
diff --git a/time/bits/types/struct_timeval.h b/time/bits/types/struct_timeval.h
index 3466137c35..0c8e88c82c 100644
--- a/time/bits/types/struct_timeval.h
+++ b/time/bits/types/struct_timeval.h
@@ -7,7 +7,7 @@ 
    microsecond but also has a range of years.  */
 struct timeval
 {
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
   __time64_t tv_sec;		/* Seconds.  */
   __suseconds64_t tv_usec;	/* Microseconds.  */
 #else
diff --git a/time/bits/types/time_t.h b/time/bits/types/time_t.h
index 84d67f6ac3..00cde92c62 100644
--- a/time/bits/types/time_t.h
+++ b/time/bits/types/time_t.h
@@ -4,7 +4,7 @@ 
 #include <bits/types.h>
 
 /* Returned by `time'.  */
-#ifdef __USE_TIME_BITS64
+#ifdef __USE_TIME64_REDIRECTS
 typedef __time64_t time_t;
 #else
 typedef __time_t time_t;
diff --git a/time/sys/time.h b/time/sys/time.h
index c8708198a5..8c3d0c3022 100644
--- a/time/sys/time.h
+++ b/time/sys/time.h
@@ -63,7 +63,7 @@  struct timezone
    use localtime etc. instead.
    This function itself is semi-obsolete;
    most callers should use time or clock_gettime instead. */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern int gettimeofday (struct timeval *__restrict __tv,
 			 void *__restrict __tz) __THROW __nonnull ((1));
 #else
@@ -77,7 +77,7 @@  extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv,
 #endif
 
 #ifdef __USE_MISC
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Set the current time of day and timezone information.
    This call is restricted to the super-user.
    Setting the timezone in this way is obsolete, but we don't yet
@@ -143,7 +143,7 @@  typedef enum __itimer_which __itimer_which_t;
 typedef int __itimer_which_t;
 #endif
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 /* Set *VALUE to the current setting of timer WHICH.
    Return 0 on success, -1 on errors.  */
 extern int getitimer (__itimer_which_t __which,
@@ -184,7 +184,7 @@  extern int __REDIRECT_NTH (utimes, (const char *__file,
 #endif
 
 #ifdef __USE_MISC
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Same as `utimes', but does not follow symbolic links.  */
 extern int lutimes (const char *__file, const struct timeval __tvp[2])
      __THROW __nonnull ((1));
@@ -207,7 +207,7 @@  extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]),
 #endif
 
 #ifdef __USE_GNU
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Change the access time of FILE relative to FD to TVP[0] and the
    modification time of FILE to TVP[1].  If TVP is a null pointer, use
    the current time instead.  Returns 0 on success, -1 on errors.  */
diff --git a/time/time.h b/time/time.h
index 1609aaeffa..3785dc608f 100644
--- a/time/time.h
+++ b/time/time.h
@@ -71,7 +71,7 @@  __BEGIN_DECLS
    The result / CLOCKS_PER_SEC is program time in seconds.  */
 extern clock_t clock (void) __THROW;
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 /* Return the current time and put it in *TIMER if TIMER is not NULL.  */
 extern time_t time (time_t *__timer) __THROW;
 
@@ -127,7 +127,7 @@  extern char *strptime_l (const char *__restrict __s,
 #endif
 
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 /* Return the `struct tm' representation of *TIMER
    in Universal Coordinated Time (aka Greenwich Mean Time).  */
 extern struct tm *gmtime (const time_t *__timer) __THROW;
@@ -149,7 +149,7 @@  extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer),
 
 
 #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Return the `struct tm' representation of *TIMER in UTC,
    using *TP to store the result.  */
 extern struct tm *gmtime_r (const time_t *__restrict __timer,
@@ -180,7 +180,7 @@  extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t,
 extern char *asctime (const struct tm *__tp) __THROW;
 
 /* Equivalent to `asctime (localtime (timer))'.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern char *ctime (const time_t *__timer) __THROW;
 #else
 # ifdef __REDIRECT_NTH
@@ -199,7 +199,7 @@  extern char *asctime_r (const struct tm *__restrict __tp,
 			char *__restrict __buf) __THROW;
 
 /* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'.  */
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 extern char *ctime_r (const time_t *__restrict __timer,
 		      char *__restrict __buf) __THROW;
 #else
@@ -242,7 +242,7 @@  extern long int timezone;
 
 
 #if defined __USE_MISC || __GLIBC_USE (ISOC2X)
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Like `mktime', but for TP represents Universal Time, not local time.  */
 extern time_t timegm (struct tm *__tp) __THROW;
 # else
@@ -259,7 +259,7 @@  extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
 /* Miscellaneous functions many Unices inherited from the public domain
    localtime package.  These are included only for compatibility.  */
 
-#ifndef __USE_TIME_BITS64
+#ifndef __USE_TIME64_REDIRECTS
 /* Another name for `mktime'.  */
 extern time_t timelocal (struct tm *__tp) __THROW;
 #else
@@ -274,7 +274,7 @@  extern int dysize (int __year) __THROW  __attribute__ ((__const__));
 
 
 #ifdef __USE_POSIX199309
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Pause execution for a number of nanoseconds.
 
    This function is a cancellation point and therefore not marked with
@@ -320,7 +320,7 @@  extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct
 
    This function is a cancellation point and therefore not marked with
    __THROW.  */
-#  ifndef __USE_TIME_BITS64
+#  ifndef __USE_TIME64_REDIRECTS
 extern int clock_nanosleep (clockid_t __clock_id, int __flags,
 			    const struct timespec *__req,
 			    struct timespec *__rem);
@@ -349,7 +349,7 @@  extern int timer_create (clockid_t __clock_id,
 extern int timer_delete (timer_t __timerid) __THROW;
 
 /* Set timer TIMERID to VALUE, returning old value in OVALUE.  */
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 extern int timer_settime (timer_t __timerid, int __flags,
 			  const struct itimerspec *__restrict __value,
 			  struct itimerspec *__restrict __ovalue) __THROW;
@@ -379,7 +379,7 @@  extern int timer_getoverrun (timer_t __timerid) __THROW;
 
 
 #ifdef __USE_ISOC11
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Set TS to calendar time based in time base BASE.  */
 extern int timespec_get (struct timespec *__ts, int __base)
      __THROW __nonnull ((1));
@@ -395,7 +395,7 @@  extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base),
 
 
 #if __GLIBC_USE (ISOC2X)
-# ifndef __USE_TIME_BITS64
+# ifndef __USE_TIME64_REDIRECTS
 /* Set TS to resolution of time base BASE.  */
 extern int timespec_getres (struct timespec *__ts, int __base)
      __THROW;