1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-09 14:21:14 +03:00
Files
glibc/sysdeps/unix/sysv/linux
Adhemerval Zanella 72e84d1db2 Linux: Use 32-bit vDSO for clock_gettime, gettimeofday, time (BZ# 28071)
The previous approach defeats the vDSO optimization on older kernels
because a failing clock_gettime64 system call is performed on every
function call.  It also results in a clobbered errno value, exposing
an OpenJDK bug (JDK-8270244).

This patch fixes by open-code INLINE_VSYSCALL macro and replace all
INLINE_SYSCALL_CALL with INTERNAL_SYSCALL_CALLS.  Now for
__clock_gettime64x, the 64-bit vDSO is used and the 32-bit vDSO is
tried before falling back to 64-bit syscalls.

The previous code preferred 64-bit syscall for the case where the kernel
provides 64-bit time_t syscalls *and* also a 32-bit vDSO (in this case
the *64-bit* syscall should be preferable over the vDSO).  All
architectures that provides 32-bit vDSO (i386, mips, powerpc, s390)
modulo sparc; but I am not sure if some kernels versions do provide
only 32-bit vDSO while still providing 64-bit time_t syscall.
Regardless, for such cases the 64-bit time_t syscall is used if the
vDSO returns overflowed 32-bit time_t.

Tested on i686-linux-gnu (with a time64 and non-time64 kernel),
x86_64-linux-gnu.  Built with build-many-glibcs.py.

Co-authored-by: Florian Weimer <fweimer@redhat.com>
2021-07-12 17:37:56 -03:00
..
2021-06-22 12:09:52 -03:00
2021-06-22 12:09:52 -03:00
2021-02-11 08:00:48 -03:00
2021-03-18 15:54:39 -03:00
2021-03-26 13:36:17 -03:00
2021-03-26 13:37:14 -03:00
2021-06-22 12:09:52 -03:00
2021-06-22 12:09:52 -03:00
2021-03-26 13:37:18 -03:00
2021-03-26 13:37:18 -03:00
2021-03-26 13:37:18 -03:00
2021-03-26 13:37:18 -03:00
2021-03-26 13:36:17 -03:00
2021-07-06 11:45:35 -03:00
2021-02-11 08:00:48 -03:00
2021-03-29 10:22:13 -03:00
2021-07-08 14:08:13 -03:00
2021-03-26 13:36:17 -03:00
2021-05-03 08:15:53 +02:00
2021-05-17 20:55:21 +00:00
2021-06-15 10:42:11 -03:00
2021-03-08 22:41:41 +01:00
2021-07-08 14:08:13 -03:00
2021-06-15 10:42:11 -03:00
2021-06-15 10:42:11 -03:00
2021-06-22 12:09:52 -03:00
2021-06-22 12:09:52 -03:00
2021-07-08 14:08:13 -03:00