libstdc++: Revert changes for SYS_clock_gettime64 [PR 93421]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 17 Nov 2020 16:13:02 +0000 (16:13 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 17 Nov 2020 22:38:49 +0000 (22:38 +0000)
commit1e3e6c700f04fe6992b9077541e434172c1cbdae
treef5fe26e1f78055d0ccd01c0e2987d270099ffc3d
parent61ef34c503443dadc0744c5150256b90d138db0a
libstdc++: Revert changes for SYS_clock_gettime64 [PR 93421]

As discussed in the PR, it's incredibly unlikely that a system that
needs to use the SYS_clock_gettime syscall (e.g. glibc 2.16 or older) is
going to define the SYS_clock_gettime64 macro. Ancient systems that need
to use the syscall aren't going to have time64 support.

This reverts the recent changes to try and make clock_gettime syscalls
be compatible with systems that have been updated for time64 (those
changes were wrong anyway as they misspelled the SYS_clock_gettime64
macro). The changes for futex syscalls are retained, because we still
use them on modern systems that might be using time64.

To ensure that the clock_gettime syscalls are safe, configure will fail
if SYS_clock_gettime is needed, and SYS_clock_gettime64 is also defined
(but to a distinct value from SYS_clock_gettime), and the tv_sec member
of timespec is larger than long. This means we will be unable to build
on a hypothetical system where we need the time32 version of
SYS_clock_gettime but where userspace is using a time64 struct timespec.
In the unlikely event that this failure is triggered on any real
systems, we can fix it later. But we probably won't need to.

libstdc++-v3/ChangeLog:

PR libstdc++/93421
* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Fail if struct
timespec isn't compatible with SYS_clock_gettime.
* configure: Regenerate.
* src/c++11/chrono.cc: Revert changes for time64 compatibility.
Add static_assert instead.
* src/c++11/futex.cc (_M_futex_wait_until_steady): Assume
SYS_clock_gettime can use struct timespec.
libstdc++-v3/acinclude.m4
libstdc++-v3/configure
libstdc++-v3/src/c++11/chrono.cc
libstdc++-v3/src/c++11/futex.cc