[PATCH] y2038: Redirect to 64 bit time functions when __USE_TIME_BITS64 is defined
Lukasz Majewski
lukma@denx.de
Tue Dec 29 10:27:01 GMT 2020
Dear Community,
I do know that the "freeze" time for glibc release is coming, but I
would be very happy to receive feedback on this patch.
It is the attempt to divide the Y2038 support to smaller chunks, so it
would be easier to review.
> Exported headers have been modified to provide redirections to 64 bit
> functions when __USE_TIME_BITS64 is defined - this exported flag is
> set only when _TIME_BITS=64 and _FILE_OFFSET_BITS=64 are set on
> compilation time.
> For example, when __USE_TIME_BIT64 is defined - calls to clock_settime
> are redirected to clock_settime64, which supports setting 64 bit time
> in glibc ports with __WORDSIZE==32 and __TIMESIZE != 64.
>
> This patch is the preparatory one for addressing Y2038 issue and as
> such will be inactive until support for _TIME_BITS exported flag is
> added, which in turn causes definition of __USE_TIME_BITS64.
To emphasize - this patch set will not introduce any harm, as
__USE_TIME_BITS64 will be NOT defined until the support for 64 bit time
is added to glibc.
> ---
> io/sys/poll.h | 11 ++
> io/sys/stat.h | 20 ++++
> io/utime.h | 10 ++
> misc/sys/select.h | 27 +++++
> posix/sched.h | 9 ++
> posix/sys/wait.h | 20 ++++
> resolv/netdb.h | 11 ++
> resource/sys/resource.h | 10 ++
> rt/aio.h | 25 ++++-
> rt/mqueue.h | 25 +++++
> signal/signal.h | 12 +++
> socket/sys/socket.h | 11 ++
> sysdeps/nptl/pthread.h | 117 +++++++++++++++++++++
> sysdeps/pthread/semaphore.h | 23 ++++
> sysdeps/pthread/threads.h | 33 ++++++
> sysdeps/unix/sysv/linux/bits/time.h | 10 ++
> sysdeps/unix/sysv/linux/sys/timerfd.h | 22 ++++
> sysdeps/unix/sysv/linux/sys/timex.h | 37 ++++++-
> sysvipc/sys/msg.h | 10 ++
> sysvipc/sys/sem.h | 21 ++++
> sysvipc/sys/shm.h | 10 ++
> time/sys/time.h | 91 ++++++++++++++++
> time/time.h | 146
> ++++++++++++++++++++++++++ 23 files changed, 705 insertions(+), 6
> deletions(-)
>
> diff --git a/io/sys/poll.h b/io/sys/poll.h
> index 857be0f5ac..4a725ed18e 100644
> --- a/io/sys/poll.h
> +++ b/io/sys/poll.h
> @@ -63,6 +63,17 @@ extern int poll (struct pollfd *__fds, nfds_t
> __nfds, int __timeout); extern int ppoll (struct pollfd *__fds,
> nfds_t __nfds, const struct timespec *__timeout,
> const __sigset_t *__ss);
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds,
> + const struct timespec *__timeout,
> + const __sigset_t *__ss),
> + __ppoll64);
> +# else
> +# define ppoll __ppoll64
> +# endif
> +# endif
> #endif
>
> __END_DECLS
> diff --git a/io/sys/stat.h b/io/sys/stat.h
> index 58c3770622..b3f2f0da99 100644
> --- a/io/sys/stat.h
> +++ b/io/sys/stat.h
> @@ -361,11 +361,31 @@ extern int utimensat (int __fd, const char
> *__path, const struct timespec __times[2],
> int __flags)
> __THROW __nonnull ((2));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path,
> + const struct timespec
> __times[2],
> + int flags),
> + __utimensat64) __nonnull ((2));
> +# else
> +# define utimensat __utimensat64
> +# endif
> +# endif
> #endif
>
> #ifdef __USE_XOPEN2K8
> /* Set file access and modification times of the file associated
> with FD. */ extern int futimens (int __fd, const struct timespec
> __times[2]) __THROW; +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (futimens, (int fd, const struct timespec
> __times[2]),
> + __futimens64);
> +# else
> +# define futimens __futimens64
> +# endif
> +# endif
> #endif
>
> #ifdef __USE_GNU
> diff --git a/io/utime.h b/io/utime.h
> index 07659016ab..f607bf0aad 100644
> --- a/io/utime.h
> +++ b/io/utime.h
> @@ -45,6 +45,16 @@ extern int utime (const char *__file,
> const struct utimbuf *__file_times)
> __THROW __nonnull ((1));
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (utime, (const char *__file,
> + const struct utimbuf
> *__file_times),
> + __utime64);
> +# else
> +# define utime __utime64
> +# endif
> +#endif
> +
> __END_DECLS
>
> #endif /* utime.h */
> diff --git a/misc/sys/select.h b/misc/sys/select.h
> index 29d011c2d5..779a6e81b6 100644
> --- a/misc/sys/select.h
> +++ b/misc/sys/select.h
> @@ -103,6 +103,19 @@ extern int select (int __nfds, fd_set
> *__restrict __readfds, fd_set *__restrict __exceptfds,
> struct timeval *__restrict __timeout);
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (select,
> + (int __nfds, fd_set *__restrict __readfds,
> + fd_set *__restrict __writefds,
> + fd_set *__restrict __exceptfds,
> + struct timeval *__restrict __timeout),
> + __select64);
> +# else
> +# define select __select64
> +# endif
> +#endif
> +
> #ifdef __USE_XOPEN2K
> /* Same as above only that the TIMEOUT value is given with higher
> resolution and a sigmask which is been set temporarily. This
> version @@ -115,6 +128,20 @@ extern int pselect (int __nfds, fd_set
> *__restrict __readfds, fd_set *__restrict __exceptfds,
> const struct timespec *__restrict __timeout,
> const __sigset_t *__restrict __sigmask);
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (pselect,
> + (int __nfds, fd_set *__restrict __readfds,
> + fd_set *__restrict __writefds,
> + fd_set *__restrict __exceptfds,
> + const struct timespec *__restrict __timeout,
> + const __sigset_t *__restrict __sigmask),
> + __pselect64);
> +# else
> +# define pselect __pselect64
> +# endif
> +# endif
> #endif
>
>
> diff --git a/posix/sched.h b/posix/sched.h
> index 60c9c3c710..0d9cbc5bb2 100644
> --- a/posix/sched.h
> +++ b/posix/sched.h
> @@ -76,6 +76,15 @@ extern int sched_get_priority_min (int
> __algorithm) __THROW; /* Get the SCHED_RR interval for the named
> process. */ extern int sched_rr_get_interval (__pid_t __pid, struct
> timespec *__t) __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (sched_rr_get_interval,
> + (__pid_t __pid, struct timespec *__t),
> + __sched_rr_get_interval64);
> +# else
> +# define sched_rr_get_interval __sched_rr_get_interval64
> +# endif
> +#endif
>
> #ifdef __USE_GNU
> /* Access macros for `cpu_set'. */
> diff --git a/posix/sys/wait.h b/posix/sys/wait.h
> index a42e16c1b0..68ec036b29 100644
> --- a/posix/sys/wait.h
> +++ b/posix/sys/wait.h
> @@ -146,12 +146,32 @@ struct rusage;
> otherwise don't. */
> extern __pid_t wait3 (int *__stat_loc, int __options,
> struct rusage * __usage) __THROWNL;
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int
> __options,
> + struct rusage * __usage)
> + __wait3_time64);
> +# else
> +# define wait3 __wait3_time64
> +# endif
> +# endif
> #endif
>
> #ifdef __USE_MISC
> /* 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;
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern __pid_t __REDIRECT_NTHNL (wait4, (__pid_t __pid, int
> *__stat_loc,
> + int __options, struct
> rusage *__usage),
> + __wait4_time64);
> +# else
> +# define wait4 __wait4_time64
> +# endif
> +# endif
> #endif /* Use misc. */
>
>
> diff --git a/resolv/netdb.h b/resolv/netdb.h
> index 575e416dac..bd0832988f 100644
> --- a/resolv/netdb.h
> +++ b/resolv/netdb.h
> @@ -701,6 +701,17 @@ 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
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (gai_suspend, (const struct gaicb *const
> __list[],
> + int __ent,
> + const struct timespec
> *__timeout),
> + __gai_suspend_time64);
> +# else
> +# define gai_suspend __gai_suspend_time64
> +# endif
> +# endif
> +
> /* Get the error status of the request REQ. */
> extern int gai_error (struct gaicb *__req) __THROW;
>
> diff --git a/resource/sys/resource.h b/resource/sys/resource.h
> index 4edafb50d5..98f05cf1c4 100644
> --- a/resource/sys/resource.h
> +++ b/resource/sys/resource.h
> @@ -86,6 +86,16 @@ 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
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who,
> + struct rusage *__usage),
> + __getrusage64);
> +# else
> +# define getrusage __getrusage64
> +# endif
> +#endif
> +
> /* Return the highest priority of any process specified by WHICH and
> WHO (see above); if WHO is zero, the current process, process group,
> or user (as specified by WHO) is used. A lower priority number means
> higher diff --git a/rt/aio.h b/rt/aio.h
> index 148d31a0af..2c35f1b04c 100644
> --- a/rt/aio.h
> +++ b/rt/aio.h
> @@ -193,12 +193,17 @@ 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
> +extern int __REDIRECT_NTH (aio_suspend,
> + (const struct aiocb *const __list[], int
> __nent,
> + const struct timespec *__restrict
> __timeout),
> + __aio_suspend_time64) __nonnull ((1));
> +# else
> extern int __REDIRECT_NTH (aio_suspend,
> (const struct aiocb *const __list[], int
> __nent, const struct timespec *__restrict __timeout),
> aio_suspend64) __nonnull ((1));
> -
> +# endif
> extern int __REDIRECT_NTH (aio_fsync,
> (int __operation, struct aiocb *__aiocbp),
> aio_fsync64) __nonnull ((2));
> @@ -210,7 +215,11 @@ extern int __REDIRECT_NTH (aio_fsync,
> # define aio_error aio_error64
> # define aio_return aio_return64
> # define aio_cancel aio_cancel64
> -# define aio_suspend aio_suspend64
> +# ifdef __USE_TIME_BITS64
> +# define aio_suspend __aio_suspend_time64
> +# else
> +# define aio_suspend aio_suspend64
> +# endif
> # define aio_fsync aio_fsync64
> # endif
> #endif
> @@ -234,6 +243,16 @@ extern int aio_cancel64 (int __fildes, struct
> aiocb64 *__aiocbp) __THROW; extern int aio_suspend64 (const struct
> aiocb64 *const __list[], int __nent, const struct timespec
> *__restrict __timeout) __THROW __nonnull ((1));
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (aio_suspend64,
> + (const struct aiocb *const __list[], int
> __nent,
> + const struct timespec *__restrict
> __timeout),
> + __aio_suspend_time64) __nonnull ((1));
> +# else
> +# define aio_suspend64 __aio_suspend_time64
> +# endif
> +# endif
>
> extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp)
> __THROW __nonnull ((2));
> diff --git a/rt/mqueue.h b/rt/mqueue.h
> index a2a2aa1771..e6b8641c62 100644
> --- a/rt/mqueue.h
> +++ b/rt/mqueue.h
> @@ -79,12 +79,37 @@ extern ssize_t mq_timedreceive (mqd_t __mqdes,
> char *__restrict __msg_ptr, const struct timespec *__restrict
> __abs_timeout) __nonnull ((2, 5));
>
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (mq_timedreceive, (mqd_t __mqdes,
> + char *__restrict __msg_ptr,
> + size_t __msg_len,
> + unsigned int *__restrict __msg_prio,
> + const struct timespec *__restrict
> __abs_timeout),
> + __mq_timedreceive_time64);
> +# else
> +# define mq_timedreceive __mq_timedreceive_time64
> +# endif
> +# endif
> +
> /* Add message pointed by MSG_PTR to message queue MQDES, stop
> blocking on full message queue if ABS_TIMEOUT expires. */
> extern int mq_timedsend (mqd_t __mqdes, const char *__msg_ptr,
> size_t __msg_len, unsigned int __msg_prio,
> const struct timespec *__abs_timeout)
> __nonnull ((2, 5));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (mq_timedsend, (mqd_t __mqdes,
> + const char *__msg_ptr, size_t __msg_len,
> + unsigned int __msg_prio,
> + const struct timespec *__abs_timeout),
> + __mq_timedsend_time64);
> +# else
> +# define mq_timedsend __mq_timedsend_time64
> +# endif
> +# endif
> #endif
>
> /* Define some inlines helping to catch common problems. */
> diff --git a/signal/signal.h b/signal/signal.h
> index effe3d698f..564820e366 100644
> --- a/signal/signal.h
> +++ b/signal/signal.h
> @@ -274,6 +274,18 @@ extern int sigtimedwait (const sigset_t
> *__restrict __set, const struct timespec *__restrict __timeout)
> __nonnull ((1));
>
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (sigtimedwait,
> + (const sigset_t *__restrict __set,
> + siginfo_t *__restrict __info,
> + const struct timespec *__restrict __timeout),
> + __sigtimedwait64);
> +# else
> +# define sigtimedwait __sigtimedwait64
> +# endif
> +# endif
> +
> /* Send signal SIG to the process PID. Associate data in VAL with
> the signal. */
> extern int sigqueue (__pid_t __pid, int __sig, const union sigval
> __val) diff --git a/socket/sys/socket.h b/socket/sys/socket.h
> index 7780c00ecb..2273c52cdf 100644
> --- a/socket/sys/socket.h
> +++ b/socket/sys/socket.h
> @@ -199,6 +199,17 @@ extern ssize_t recvmsg (int __fd, struct msghdr
> *__message, int __flags); extern int recvmmsg (int __fd, struct
> mmsghdr *__vmessages, unsigned int __vlen, int __flags,
> struct timespec *__tmo);
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr
> *__vmessages,
> + unsigned int __vlen, int __flags,
> + struct timespec *__tmo),
> + __recvmmsg64);
> +# else
> +# define recvmmsg __recvmmsg64
> +# endif
> +# endif
> #endif
>
>
> diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h
> index 3a34d82342..982ed32baa 100644
> --- a/sysdeps/nptl/pthread.h
> +++ b/sysdeps/nptl/pthread.h
> @@ -230,6 +230,17 @@ extern int pthread_tryjoin_np (pthread_t __th,
> void **__thread_return) __THROW; extern int pthread_timedjoin_np
> (pthread_t __th, void **__thread_return, const struct timespec
> *__abstime);
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (pthread_timedjoin_np,
> + (pthread_t __th, void **__thread_return,
> + const struct timespec *__abstime),
> + __pthread_timedjoin_np64);
> +# else
> +# define pthread_timedjoin_np __pthread_timedjoin_np64
> +# endif
> +# endif
> +
> /* Make calling thread wait for termination of the thread TH, but
> only until TIMEOUT measured against the clock specified by CLOCKID.
> The exit status of the thread is stored in *THREAD_RETURN, if
> @@ -240,6 +251,18 @@ extern int pthread_timedjoin_np (pthread_t __th,
> void **__thread_return, extern int pthread_clockjoin_np (pthread_t
> __th, void **__thread_return, clockid_t __clockid,
> const struct timespec *__abstime);
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (pthread_clockjoin_np,
> + (pthread_t __th, void **__thread_return,
> + clockid_t __clockid,
> + const struct timespec *__abstime),
> + __pthread_clockjoin_np64);
> +# else
> +# define pthread_clockjoin_np __pthread_clockjoin_np64
> +# endif
> +# endif
> #endif
>
> /* Indicate that the thread TH is never to be joined with
> PTHREAD_JOIN. @@ -776,6 +799,17 @@ extern int pthread_mutex_lock
> (pthread_mutex_t *__mutex) extern int pthread_mutex_timedlock
> (pthread_mutex_t *__restrict __mutex, const struct timespec
> *__restrict __abstime) __THROWNL __nonnull ((1, 2));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern int __REDIRECT_NTHNL (pthread_mutex_timedlock,
> + (pthread_mutex_t *__restrict __mutex,
> + const struct timespec *__restrict
> __abstime),
> + __pthread_mutex_timedlock64);
> +# else
> +# define pthread_mutex_timedlock __pthread_mutex_timedlock64
> +# endif
> +# endif
> #endif
>
> #ifdef __USE_GNU
> @@ -783,6 +817,18 @@ extern int pthread_mutex_clocklock
> (pthread_mutex_t *__restrict __mutex, clockid_t __clockid,
> const struct timespec *__restrict
> __abstime) __THROWNL __nonnull
> ((1, 3)); +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern int __REDIRECT_NTHNL (pthread_mutex_clocklock,
> + (pthread_mutex_t *__restrict __mutex,
> + clockid_t __clockid,
> + const struct timespec *__restrict
> __abstime),
> + __pthread_mutex_clocklock64);
> +# else
> +# define pthread_mutex_clocklock __pthread_mutex_clocklock64
> +# endif
> +# endif
> #endif
>
> /* Unlock a mutex. */
> @@ -922,6 +968,17 @@ extern int pthread_rwlock_tryrdlock
> (pthread_rwlock_t *__rwlock) extern int pthread_rwlock_timedrdlock
> (pthread_rwlock_t *__restrict __rwlock, const struct timespec
> *__restrict __abstime) __THROWNL __nonnull ((1, 2));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern int __REDIRECT_NTHNL (pthread_rwlock_timedrdlock,
> + (pthread_rwlock_t *__restrict __rwlock,
> + const struct timespec *__restrict
> __abstime),
> + __pthread_rwlock_timedrdlock64);
> +# else
> +# define pthread_rwlock_timedrdlock __pthread_rwlock_timedrdlock64
> +# endif
> +# endif
> # endif
>
> # ifdef __USE_GNU
> @@ -929,6 +986,18 @@ extern int pthread_rwlock_clockrdlock
> (pthread_rwlock_t *__restrict __rwlock, clockid_t __clockid,
> const struct timespec
> *__restrict __abstime) __THROWNL __nonnull ((1, 3));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern int __REDIRECT_NTHNL (pthread_rwlock_clockrdlock,
> + (pthread_rwlock_t *__restrict __rwlock,
> + clockid_t __clockid,
> + const struct timespec *__restrict
> __abstime),
> + __pthread_rwlock_clockrdlock64);
> +# else
> +# define pthread_rwlock_clockrdlock __pthread_rwlock_clockrdlock64
> +# endif
> +# endif
> # endif
>
> /* Acquire write lock for RWLOCK. */
> @@ -944,6 +1013,17 @@ extern int pthread_rwlock_trywrlock
> (pthread_rwlock_t *__rwlock) extern int pthread_rwlock_timedwrlock
> (pthread_rwlock_t *__restrict __rwlock, const struct timespec
> *__restrict __abstime) __THROWNL __nonnull ((1, 2));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern int __REDIRECT_NTHNL (pthread_rwlock_timedwrlock,
> + (pthread_rwlock_t *__restrict __rwlock,
> + const struct timespec *__restrict
> __abstime),
> + __pthread_rwlock_timedwrlock64);
> +# else
> +# define pthread_rwlock_timedwrlock __pthread_rwlock_timedwrlock64
> +# endif
> +# endif
> # endif
>
> # ifdef __USE_GNU
> @@ -951,6 +1031,18 @@ extern int pthread_rwlock_clockwrlock
> (pthread_rwlock_t *__restrict __rwlock, clockid_t __clockid,
> const struct timespec
> *__restrict __abstime) __THROWNL __nonnull ((1, 3));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTHNL)
> +extern int __REDIRECT_NTHNL (pthread_rwlock_clockwrlock,
> + (pthread_rwlock_t *__restrict __rwlock,
> + clockid_t __clockid,
> + const struct timespec *__restrict
> __abstime),
> + __pthread_rwlock_clockwrlock64);
> +# else
> +# define pthread_rwlock_clockwrlock __pthread_rwlock_clockwrlock64
> +# endif
> +# endif
> # endif
>
> /* Unlock RWLOCK. */
> @@ -1032,6 +1124,18 @@ extern int pthread_cond_timedwait
> (pthread_cond_t *__restrict __cond, const struct timespec *__restrict
> __abstime) __nonnull ((1, 2, 3));
>
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (pthread_cond_timedwait,
> + (pthread_cond_t *__restrict __cond,
> + pthread_mutex_t *__restrict __mutex,
> + const struct timespec *__restrict __abstime),
> + __pthread_cond_timedwait64);
> +# else
> +# define pthread_cond_timedwait __pthread_cond_timedwait64
> +# endif
> +# endif
> +
> # ifdef __USE_GNU
> /* Wait for condition variable COND to be signaled or broadcast until
> ABSTIME measured by the specified clock. MUTEX is assumed to be
> @@ -1045,6 +1149,19 @@ extern int pthread_cond_clockwait
> (pthread_cond_t *__restrict __cond, __clockid_t __clock_id,
> const struct timespec *__restrict
> __abstime) __nonnull ((1, 2, 4));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (pthread_cond_clockwait,
> + (pthread_cond_t *__restrict __cond,
> + pthread_mutex_t *__restrict __mutex,
> + __clockid_t __clock_id,
> + const struct timespec *__restrict __abstime),
> + __pthread_cond_clockwait64);
> +# else
> +# define pthread_cond_clockwait __pthread_cond_clockwait64
> +# endif
> +# endif
> # endif
>
> /* Functions for handling condition variable attributes. */
> diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h
> index 436d21cb08..6a6055fc3a 100644
> --- a/sysdeps/pthread/semaphore.h
> +++ b/sysdeps/pthread/semaphore.h
> @@ -62,6 +62,17 @@ extern int sem_wait (sem_t *__sem) __nonnull ((1));
> extern int sem_timedwait (sem_t *__restrict __sem,
> const struct timespec *__restrict
> __abstime) __nonnull ((1, 2));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (sem_timedwait,
> + (sem_t *__restrict __sem,
> + const struct timespec *__restrict __abstime),
> + __sem_timedwait64);
> +# else
> +# define sem_timedwait __sem_timedwait64
> +# endif
> +# endif
> #endif
>
> #ifdef __USE_GNU
> @@ -69,6 +80,18 @@ extern int sem_clockwait (sem_t *__restrict __sem,
> clockid_t clock,
> const struct timespec *__restrict
> __abstime) __nonnull ((1, 3));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (sem_clockwait,
> + (sem_t *__restrict __sem,
> + clockid_t clock,
> + const struct timespec *__restrict __abstime),
> + __sem_clockwait64);
> +# else
> +# define sem_clockwait __sem_clockwait64
> +# endif
> +# endif
> #endif
>
> /* Test whether SEM is posted. */
> diff --git a/sysdeps/pthread/threads.h b/sysdeps/pthread/threads.h
> index 0ac489b4a1..acdc7b329a 100644
> --- a/sysdeps/pthread/threads.h
> +++ b/sysdeps/pthread/threads.h
> @@ -91,6 +91,16 @@ extern thrd_t thrd_current (void);
> extern int thrd_sleep (const struct timespec *__time_point,
> struct timespec *__remaining);
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (thrd_sleep, (const struct timespec
> *__time_point,
> + struct timespec *__remaining),
> + __thrd_sleep64);
> +# else
> +# define thrd_sleep __thrd_sleep64
> +# endif
> +#endif
> +
> /* Terminate current thread execution, cleaning up any thread local
> storage and freeing resources. Returns the value specified in
> __RES. */ extern void thrd_exit (int __res) __attribute__
> ((__noreturn__)); @@ -134,6 +144,17 @@ extern int mtx_lock (mtx_t
> *__mutex); extern int mtx_timedlock (mtx_t *__restrict __mutex,
> const struct timespec *__restrict
> __time_point);
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (mtx_timedlock, (mtx_t *__restrict __mutex,
> + const struct timespec
> *__restrict
> + __time_point),
> + __mtx_timedlock64);
> +# else
> +# define mtx_timedlock __mtx_timedlock64
> +# endif
> +#endif
> +
> /* Try to lock the mutex pointed by __MUTEX without blocking. If
> the mutex is free the current threads takes control of it, otherwise
> it returns immediately. */
> @@ -175,6 +196,18 @@ extern int cnd_timedwait (cnd_t *__restrict
> __cond, mtx_t *__restrict __mutex,
> const struct timespec *__restrict
> __time_point);
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (cnd_timedwait, (cnd_t *__restrict __cond,
> + mtx_t *__restrict __mutex,
> + const struct timespec
> *__restrict
> + __time_point),
> + __cnd_timedwait64);
> +# else
> +# define cnd_timedwait __cnd_timedwait64
> +# endif
> +#endif
> +
> /* Destroy condition variable pointed by __cond and free all of its
> resources. */
> extern void cnd_destroy (cnd_t *__COND);
> diff --git a/sysdeps/unix/sysv/linux/bits/time.h
> b/sysdeps/unix/sysv/linux/bits/time.h index e0962744e1..7168ef1948
> 100644 --- a/sysdeps/unix/sysv/linux/bits/time.h
> +++ b/sysdeps/unix/sysv/linux/bits/time.h
> @@ -77,6 +77,16 @@ __BEGIN_DECLS
> /* Tune a POSIX clock. */
> extern int clock_adjtime (__clockid_t __clock_id, struct timex
> *__utx) __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (clock_adjtime, (__clockid_t __clock_id,
> + struct timex *__utx),
> + __clock_adjtime64);
> +# else
> +# define clock_adjtime __clock_adjtime64
> +# endif
> +#endif
> +
> __END_DECLS
> #endif /* use GNU */
>
> diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h
> b/sysdeps/unix/sysv/linux/sys/timerfd.h index 0ae60b65bd..cd252476a7
> 100644 --- a/sysdeps/unix/sysv/linux/sys/timerfd.h
> +++ b/sysdeps/unix/sysv/linux/sys/timerfd.h
> @@ -47,9 +47,31 @@ extern int timerfd_settime (int __ufd, int __flags,
> const struct itimerspec *__utmr,
> struct itimerspec *__otmr) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (timerfd_settime,
> + (int __ufd, int __flags,
> + const struct itimerspec *__restrict
> __value,
> + struct itimerspec *__restrict __ovalue),
> + __timerfd_settime64);
> +# else
> +# define timerfd_settime __timerfd_settime64
> +# endif
> +#endif
> +
> /* Return the next expiration time of UFD. */
> extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr)
> __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd,
> + struct itimerspec
> *__otmr),
> + __timerfd_gettime64);
> +# else
> +# define timerfd_gettime __timerfd_gettime64
> +# endif
> +#endif
> +
> __END_DECLS
>
> #endif /* sys/timerfd.h */
> diff --git a/sysdeps/unix/sysv/linux/sys/timex.h
> b/sysdeps/unix/sysv/linux/sys/timex.h index 6979b86b72..b5271152bb
> 100644 --- a/sysdeps/unix/sysv/linux/sys/timex.h
> +++ b/sysdeps/unix/sysv/linux/sys/timex.h
> @@ -57,15 +57,46 @@ __BEGIN_DECLS
> extern int __adjtimex (struct timex *__ntx) __THROW;
> extern int adjtimex (struct timex *__ntx) __THROW;
>
> -#ifdef __REDIRECT_NTH
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (adjtimex, (struct timex *__ntx),
> + ___adjtimex64);
> +# else
> +# define adjtimex ___adjtimex64
> +# endif
> +#endif
> +
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv),
> - ntp_gettimex);
> + __ntp_gettime64);
> +extern int __REDIRECT_NTH (ntp_gettimex, (struct ntptimeval *__ntv),
> + __ntp_gettimex64);
> +# else
> +# define ntp_gettime __ntp_gettime64
> +# define ntp_gettimex __ntp_gettimex64
> +# endif
> #else
> +# ifdef __REDIRECT_NTH
> +extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv),
> + ntp_gettimex);
> +# else
> extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW;
> -# define ntp_gettime ntp_gettimex
> +# define ntp_gettime ntp_gettimex
> +# endif
> #endif
> +
> extern int ntp_adjtime (struct timex *__tntx) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (ntp_adjtime, (struct timex *__ntx),
> + ___adjtimex64);
> +# else
> +# define ntp_adjtime ___adjtimex64
> +# endif
> +#endif
> +
> __END_DECLS
>
> #endif /* sys/timex.h */
> diff --git a/sysvipc/sys/msg.h b/sysvipc/sys/msg.h
> index c70cfa582c..f39c153b86 100644
> --- a/sysvipc/sys/msg.h
> +++ b/sysvipc/sys/msg.h
> @@ -60,6 +60,16 @@ __BEGIN_DECLS
> /* Message queue control operation. */
> extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf)
> __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (msgctl,
> + (int __msqid, int __cmd, struct msqid_ds
> *__buf),
> + __msgctl64);
> +# else
> +# define msgctl __msgctl64
> +# endif
> +#endif
> +
> /* Get messages queue. */
> extern int msgget (key_t __key, int __msgflg) __THROW;
>
> diff --git a/sysvipc/sys/sem.h b/sysvipc/sys/sem.h
> index 4ede2dd6ef..b26c17914c 100644
> --- a/sysvipc/sys/sem.h
> +++ b/sysvipc/sys/sem.h
> @@ -50,6 +50,16 @@ __BEGIN_DECLS
> /* Semaphore control operation. */
> extern int semctl (int __semid, int __semnum, int __cmd, ...)
> __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (semctl,
> + (int __semid, int __semnum, int __cmd,
> ...),
> + __semctl64);
> +# else
> +# define semctl __semctl64
> +# endif
> +#endif
> +
> /* Get semaphore. */
> extern int semget (key_t __key, int __nsems, int __semflg) __THROW;
>
> @@ -60,6 +70,17 @@ extern int semop (int __semid, struct sembuf
> *__sops, size_t __nsops) __THROW; /* Operate on semaphore with
> timeout. */ extern int semtimedop (int __semid, struct sembuf
> *__sops, size_t __nsops, const struct timespec *__timeout) __THROW;
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (semtimedop, (int __semid, struct sembuf
> *__sops,
> + size_t __nsops,
> + const struct timespec
> *__timeout),
> + __semtimedop64);
> +# else
> +# define semtimedop __semtimedop64
> +# endif
> +# endif
> #endif
>
> __END_DECLS
> diff --git a/sysvipc/sys/shm.h b/sysvipc/sys/shm.h
> index 6c58742c4f..8d74911e55 100644
> --- a/sysvipc/sys/shm.h
> +++ b/sysvipc/sys/shm.h
> @@ -48,6 +48,16 @@ __BEGIN_DECLS
> /* Shared memory control operation. */
> extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf)
> __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (shmctl,
> + (int __shmid, int __cmd, struct shmid_ds
> *__buf),
> + __shmctl64);
> +# else
> +# define shmctl __shmctl64
> +# endif
> +#endif
> +
> /* Get shared memory segment. */
> extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW;
>
> diff --git a/time/sys/time.h b/time/sys/time.h
> index 21fa9ed451..d3bf1e6588 100644
> --- a/time/sys/time.h
> +++ b/time/sys/time.h
> @@ -66,6 +66,16 @@ struct timezone
> extern int gettimeofday (struct timeval *__restrict __tv,
> void *__restrict __tz) __THROW __nonnull
> ((1));
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict
> __tv,
> + void *__restrict __tz),
> + __gettimeofday64);
> +# else
> +# define gettimeofday __gettimeofday64
> +# endif
> +#endif
> +
> #ifdef __USE_MISC
> /* Set the current time of day and timezone information.
> This call is restricted to the super-user.
> @@ -76,12 +86,33 @@ extern int settimeofday (const struct timeval
> *__tv, const struct timezone *__tz)
> __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (settimeofday, (const struct timeval *__tv,
> + const struct timezone
> *__tz),
> + __settimeofday64);
> +# else
> +# define settimeofday __settimeofday64
> +# endif
> +#endif
> +
> /* Adjust the current time of day by the amount in DELTA.
> If OLDDELTA is not NULL, it is filled in with the amount
> of time adjustment remaining to be done from the last `adjtime'
> call. This call is restricted to the super-user. */
> extern int adjtime (const struct timeval *__delta,
> struct timeval *__olddelta) __THROW;
> +
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (adjtime, (const struct timeval *__delta,
> + struct timeval *__olddelta),
> + __adjtime64);
> +# else
> +# define adjtime __adjtime64
> +# endif
> +#endif
> +
> #endif
>
>
> @@ -123,6 +154,16 @@ typedef int __itimer_which_t;
> extern int getitimer (__itimer_which_t __which,
> struct itimerval *__value) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (getitimer, (__itimer_which_t __which,
> + struct itimerval *__value),
> + __getitimer64);
> +# else
> +# define getitimer __getitimer64
> +# endif
> +#endif
> +
> /* Set the timer WHICH to *NEW. If OLD is not NULL,
> set *OLD to the old value of timer WHICH.
> Returns 0 on success, -1 on errors. */
> @@ -130,19 +171,59 @@ extern int setitimer (__itimer_which_t __which,
> const struct itimerval *__restrict __new,
> struct itimerval *__restrict __old) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (setitimer, (__itimer_which_t __which,
> + const struct itimerval
> *__restrict __new,
> + struct itimerval *__restrict
> __old),
> + __setitimer64);
> +# else
> +# define setitimer __setitimer64
> +# endif
> +#endif
> +
> /* Change the access time of FILE 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. */
> extern int utimes (const char *__file, const struct timeval __tvp[2])
> __THROW __nonnull ((1));
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (utimes, (const char *__file,
> + const struct timeval __tvp[2]),
> + __utimes64);
> +# else
> +# define utimes __utimes64
> +# endif
> +#endif
> +
> #ifdef __USE_MISC
> /* Same as `utimes', but does not follow symbolic links. */
> extern int lutimes (const char *__file, const struct timeval
> __tvp[2]) __THROW __nonnull ((1));
>
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (lutimes, (const char *__file,
> + const struct timeval __tvp[2]),
> + __lutimes64);
> +# else
> +# define lutimes __lutimes64
> +# endif
> +# endif
> +
> /* Same as `utimes', but takes an open file descriptor instead of a
> name. */ extern int futimes (int __fd, const struct timeval
> __tvp[2]) __THROW; +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval
> __tvp[2]),
> + __futimes64);
> +# else
> +# define futimes __futimes64
> +# endif
> +# endif
> #endif
>
> #ifdef __USE_GNU
> @@ -151,6 +232,16 @@ extern int futimes (int __fd, const struct
> timeval __tvp[2]) __THROW; the current time instead. Returns 0 on
> success, -1 on errors. */ extern int futimesat (int __fd, const char
> *__file, const struct timeval __tvp[2]) __THROW;
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (futimesat, (int __fd, const char *__file,
> + const struct timeval
> __tvp[2]),
> + __futimesat64);
> +# else
> +# define futimesat __futimesat64
> +# endif
> +# endif
> #endif
>
>
> diff --git a/time/time.h b/time/time.h
> index 015bc1c7f3..9a74f01b2f 100644
> --- a/time/time.h
> +++ b/time/time.h
> @@ -74,13 +74,37 @@ extern clock_t clock (void) __THROW;
> /* Return the current time and put it in *TIMER if TIMER is not
> NULL. */ extern time_t time (time_t *__timer) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern time_t __REDIRECT_NTH (time, (time_t *__timer), __time64);
> +# else
> +# define time __time64
> +# endif
> +#endif
> +
> /* Return the difference between TIME1 and TIME0. */
> extern double difftime (time_t __time1, time_t __time0)
> __THROW __attribute__ ((__const__));
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern double __REDIRECT_NTH (difftime, (time_t __time1, time_t
> __time0),
> + __difftime64);
> +# else
> +# define difftime __difftime64
> +# endif
> +#endif
> +
> /* Return the `time_t' representation of TP and normalize TP. */
> extern time_t mktime (struct tm *__tp) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern time_t __REDIRECT_NTH (mktime, (struct tm *__tp), __mktime64);
> +# else
> +# define mktime __mktime64
> +# endif
> +#endif
>
> /* Format TP into S according to FORMAT.
> Write no more than MAXSIZE characters and return the number
> @@ -118,6 +142,14 @@ extern char *strptime_l (const char *__restrict
> __s, in Universal Coordinated Time (aka Greenwich Mean Time). */
> extern struct tm *gmtime (const time_t *__timer) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern struct tm*__REDIRECT_NTH (gmtime, (const time_t *__timer),
> __gmtime64); +# else
> +# define gmtime __gmtime64
> +# endif
> +#endif
> +
> /* Return the `struct tm' representation
> of *TIMER in the local timezone. */
> extern struct tm *localtime (const time_t *__timer) __THROW;
> @@ -128,6 +160,16 @@ extern struct tm *localtime (const time_t
> *__timer) __THROW; extern struct tm *gmtime_r (const time_t
> *__restrict __timer, struct tm *__restrict __tp) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern struct tm*__REDIRECT_NTH (gmtime_r, (const time_t *__restrict
> __timer,
> + struct tm *__restrict
> __tp),
> + __gmtime64_r);
> +# else
> +# define gmtime_r __gmtime64_r
> +# endif
> +#endif
> +
> /* Return the `struct tm' representation of *TIMER in local time,
> using *TP to store the result. */
> extern struct tm *localtime_r (const time_t *__restrict __timer,
> @@ -141,6 +183,14 @@ extern char *asctime (const struct tm *__tp)
> __THROW; /* Equivalent to `asctime (localtime (timer))'. */
> extern char *ctime (const time_t *__timer) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern char *__REDIRECT_NTH (ctime, (const time_t *__timer),
> __ctime64); +# else
> +# define ctime __ctime64
> +# endif
> +#endif
> +
> #if defined __USE_POSIX || __GLIBC_USE (ISOC2X)
> /* Reentrant versions of the above functions. */
>
> @@ -152,6 +202,16 @@ extern char *asctime_r (const struct tm
> *__restrict __tp, /* Equivalent to `asctime_r (localtime_r (timer,
> *TMP*), buf)'. */ extern char *ctime_r (const time_t *__restrict
> __timer, char *__restrict __buf) __THROW;
> +
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern char *__REDIRECT_NTH (ctime_r, (const time_t *__restrict
> __timer,
> + char *__restrict __buf),
> __ctime64_r); +# else
> +# define ctime_r __ctime64_r
> +# endif
> +#endif
> +
> #endif /* POSIX || C2X */
>
>
> @@ -189,6 +249,14 @@ extern long int timezone;
> /* Like `mktime', but for TP represents Universal Time, not local
> time. */ extern time_t timegm (struct tm *__tp) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64);
> +# else
> +# define timegm __timegm64
> +# endif
> +#endif
> +
> /* Another name for `mktime'. */
> extern time_t timelocal (struct tm *__tp) __THROW;
>
> @@ -205,17 +273,54 @@ extern int dysize (int __year) __THROW
> __attribute__ ((__const__)); extern int nanosleep (const struct
> timespec *__requested_time, struct timespec *__remaining);
>
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (nanosleep, (const struct timespec
> *__requested_time,
> + struct timespec *__remaining),
> + __nanosleep64);
> +# else
> +# define nanosleep __nanosleep64
> +# endif
> +# endif
>
> /* Get resolution of clock CLOCK_ID. */
> extern int clock_getres (clockid_t __clock_id, struct timespec
> *__res) __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (clock_getres, (clockid_t __clock_id,
> + struct timespec *__res),
> + __clock_getres64);
> +# else
> +# define clock_getres __clock_getres64
> +# endif
> +#endif
> +
> /* Get current value of clock CLOCK_ID and store it in TP. */
> extern int clock_gettime (clockid_t __clock_id, struct timespec
> *__tp) __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (clock_gettime, (clockid_t __clock_id,
> struct
> + timespec *__tp),
> __clock_gettime64); +# else
> +# define clock_gettime __clock_gettime64
> +# endif
> +#endif
> +
> /* Set clock CLOCK_ID to value TP. */
> extern int clock_settime (clockid_t __clock_id, const struct
> timespec *__tp) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id,
> const struct
> + timespec *__tp),
> __clock_settime64); +# else
> +# define clock_settime __clock_settime64
> +# endif
> +#endif
> +
> # ifdef __USE_XOPEN2K
> /* High-resolution sleep with the specified clock.
>
> @@ -225,6 +330,17 @@ extern int clock_nanosleep (clockid_t
> __clock_id, int __flags, const struct timespec *__req,
> struct timespec *__rem);
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT)
> +extern int __REDIRECT (clock_nanosleep, (clockid_t __clock_id, int
> __flags,
> + const struct timespec
> *__req,
> + struct timespec *__rem),
> + __clock_nanosleep_time64);
> +# else
> +# define clock_nanosleep __clock_nanosleep_time64
> +# endif
> +#endif
> +
> /* Return clock ID for CPU-time clock. */
> extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id)
> __THROW; # endif
> @@ -243,10 +359,31 @@ extern int timer_settime (timer_t __timerid,
> int __flags, const struct itimerspec *__restrict __value,
> struct itimerspec *__restrict __ovalue)
> __THROW;
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (timer_settime, (timer_t __timerid, int
> __flags,
> + const struct itimerspec *__restrict __value,
> + struct itimerspec *__restrict __ovalue),
> + __timer_settime64);
> +# else
> +# define timer_settime __timer_settime64
> +# endif
> +#endif
> +
> /* Get current value of timer TIMERID and store it in VALUE. */
> extern int timer_gettime (timer_t __timerid, struct itimerspec
> *__value) __THROW;
>
> +#ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (timer_gettime, (timer_t __timerid,
> + struct itimerspec
> *__value),
> + __timer_gettime64) __nonnull ((1));
> +# else
> +# define timer_gettime __timer_gettime64
> +# endif
> +#endif
> +
> /* Get expiration overrun for timer TIMERID. */
> extern int timer_getoverrun (timer_t __timerid) __THROW;
> #endif
> @@ -256,6 +393,15 @@ extern int timer_getoverrun (timer_t __timerid)
> __THROW; /* Set TS to calendar time based in time base BASE. */
> extern int timespec_get (struct timespec *__ts, int __base)
> __THROW __nonnull ((1));
> +
> +# ifdef __USE_TIME_BITS64
> +# if defined(__REDIRECT_NTH)
> +extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int
> __base),
> + __timespec_get64);
> +# else
> +# define timespec_get __timespec_get64
> +# endif
> +# endif
> #endif
>
>
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20201229/52265143/attachment-0001.sig>
More information about the Libc-alpha
mailing list