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

Message ID 20240118131801.600373-1-adhemerval.zanella@linaro.org
State Superseded, archived
Delegated to: DJ Delorie
Headers
Series [v3] Always define __USE_TIME_BITS64 when 64 bit time_t is used |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
redhat-pt-bot/TryBot-32bit success Build for i686
linaro-tcwg-bot/tcwg_glibc_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_glibc_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 success Testing passed

Commit Message

Adhemerval Zanella Netto 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 Netto 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 Netto 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
>>
>
  
DJ Delorie March 15, 2024, 2:23 a.m. UTC | #7
Sorry for the delay in this.

This looks like a mostly mechanical patch, but I have a few general
comments...

First, the patch no longer applies cleanly, but only because three
instances of __GLIBC_USE (ISOC2X) have been replaced with __GLIBC_USE
(ISOC23) in the context around your changes in time/time.h.  I don't
consider this a problem with the patch, just making you aware.

Second, this new macro is not documented anywhere.  Given the confusion
about the old macros, I think a comment in manual/maint.texi (@node
64-bit time symbol handling) or sysdeps/generic/features-time64.h would
be useful.  Especially if it's not intended to be used outside of glibc,
yet is visible outside of glibc.  It would be better if it could be made
to be not visible outside of glibc or glibc's headers, but...

Third, there are many cases of an if/else/endif clause where the change
was made to the if but not the else or endif:

./io/fcntl.h:	#else /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/arm/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/arm/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/hppa/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/m68k/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/microblaze/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/mips/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/mips/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/mips/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/powerpc/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/sh/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/sh/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/sparc/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/x86/bits/struct_stat.h:	#endif /* __USE_TIME_BITS64 */ 
./sysdeps/unix/sysv/linux/x86/bits/struct_stat.h:	# endif /* __USE_TIME_BITS64 */
  

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;