y2038: nptl: Convert pthread_rwlock_{clock|timed}{rd|wr}lock to support 64 bit time

System Internals / glibc - Lukasz Majewski [denx.de] - 4 October 2020 15:13 UTC

The pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock, pthread_rwlock_timedrdlock and pthread_rwlock_timedwrlock have been converted to support 64 bit time.

This change uses new futex_abstimed_wait64 function in ./sysdeps/nptl/futex-helpers.c, which uses futex_time64 where possible.

The pthread_rwlock_{clock|timed}{rd|wr}lock only accepts absolute time. Moreover, there is no need to check for NULL passed as *abstime pointer to the syscalls as those calls have exported symbols marked with __nonull attribute for abstime.

For systems with __TIMESIZE != 64 && __WORDSIZE == 32:- Conversions between 64 bit time to 32 bit are necessary- Redirection to pthread_rwlock_{clock|timed}{rd|wr}lock will provide support for 64 bit time

Build tests: ./src/scripts/build-many-glibcs.py glibcs

Run-time tests:- Run specific tests on ARM/x86 32bit systems (qemu): https://github.com/lmajewski/meta-y2038 and run tests: https://github.com/lmajewski/y2038-tests/commits/master

Above tests were performed with Y2038 redirection applied as well as without to test the proper usage of both __pthread_rwlock_{clock|timed}{rd|wr}lock64 and __pthread_rwlock_{clock|timed}{rd|wr}lock.

3102e28bd1 y2038: nptl: Convert pthread_rwlock_{clock|timed}{rd|wr}lock to support 64 bit time
nptl/pthreadP.h | 18 ++++++++++++++++++
nptl/pthread_rwlock_clockrdlock.c | 20 +++++++++++++++++---
nptl/pthread_rwlock_clockwrlock.c | 20 +++++++++++++++++---
nptl/pthread_rwlock_common.c | 33 ++++++++++++++++-----------------
nptl/pthread_rwlock_rdlock.c | 2 +-
nptl/pthread_rwlock_timedrdlock.c | 20 +++++++++++++++++---
nptl/pthread_rwlock_timedwrlock.c | 20 +++++++++++++++++---
nptl/pthread_rwlock_wrlock.c | 2 +-
8 files changed, 104 insertions(+), 31 deletions(-)

Upstream: sourceware.org


  • Share