aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-06-02nptl: Destroy the default thread attribute as part of freeresFlorian Weimer
This avoids a spurious memory leak report by valgrind. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-06-02nptl: Change type of __default_pthread_attrFlorian Weimer
union pthread_attr_transparent has always the correct size, even if pthread_attr_t has padding that is not present in struct pthread_attr. This should not result in an observable behavioral change. The existing code appears to have been correct, but it was brittle because it was not clear which functions were allowed to write to an entire pthread_attr_t argument (e.g., by copying it). Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-06-02nptl: Use __pthread_attr_setaffinity_np in pthread_getattr_npFlorian Weimer
This avoids duplicating the code for the affinity mask allocation handling. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-06-02nptl: Use __pthread_getattr_default_np in pthread_createFlorian Weimer
This removes another instance of custom attribute copying code. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-06-02nptl: Add internal alias __pthread_getattr_default_npFlorian Weimer
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-06-01htl: Fix gsync_wait symbol expositionSamuel Thibault
* sysdeps/htl/pt-cond-destroy.c (__pthread_cond_destroy): Call __gsync_wait instead of gsync_wait.
2020-06-01htl: Make pthread_cond_destroy wait for threads to be wokenSamuel Thibault
This allows to reuse the storage after calling pthread_cond_destroy. * sysdeps/htl/bits/types/struct___pthread_cond.h (__pthread_cond): Replace unused struct __pthread_condimpl *__impl field with unsigned int __wrefs. (__PTHREAD_COND_INITIALIZER): Update accordingly. * sysdeps/htl/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): Register as waiter in __wrefs field. On unregistering, wake any pending pthread_cond_destroy. * sysdeps/htl/pt-cond-destroy.c (__pthread_cond_destroy): Register wake request in __wrefs. * nptl/Makefile (tests): Move tst-cond20 tst-cond21 to... * sysdeps/pthread/Makefile (tests): ... here. * nptl/tst-cond20.c nptl/tst-cond21.c: Move to... * sysdeps/pthread/tst-cond20.c sysdeps/pthread/tst-cond21.c: ... here.
2020-06-01htl: Enable more cond testsSamuel Thibault
* nptl/Makefile (tests): Move tst-cond11 and tst-cond27 to... * sysdeps/pthread/Makefile (tests): ... here.
2020-06-01tst-cond11: Fix build with _SC_MONOTONIC_CLOCK > 0Samuel Thibault
* sysdeps/pthread/tst-cond11.c (do_test): Fix misplaced brace.
2020-06-01mbstowcs: Document, test, and fix null pointer dst semantics (Bug 25219)Carlos O'Donell
The function mbstowcs, by an XSI extension to POSIX, accepts a null pointer for the destination wchar_t array. This API behaviour allows you to use the function to compute the length of the required wchar_t array i.e. does the conversion without storing it and returns the number of wide characters required. We remove the __write_only__ markup for the first argument because it is not true since the destination may be a null pointer, and so the length argument may not apply. We remove the markup otherwise the new test case cannot be compiled with -Werror=nonnull. We add a new test case for mbstowcs which exercises the destination is a null pointer behaviour which we have now explicitly documented. The mbsrtowcs and mbsnrtowcs behave similarly, and mbsrtowcs is documented as doing this in C11, even if the standard doesn't come out and call out this specific use case. We add one note to each of mbsrtowcs and mbsnrtowcs to call out that they support a null pointer for the destination. The wcsrtombs function behaves similarly but in the other way around and allows you to use a null destination pointer to compute how many bytes you would need to convert the wide character input. We document this particular case also, but leave wcsnrtombs as a references to wcsrtombs, so the reader must still read the details of the semantics for wcsrtombs.
2020-05-29build: Use FAIL_EXIT1 () on failure to exec child [BZ #23990]Girish Joshi
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-29manual: Fix backtraces code example [BZ #10441]Girish Joshi
Validation for pointer returned by backtrace_symbols () added. Type of variables size and i is changed from size_t to int. Variable size is used to collect the result from backtrace () that is an int. i is the loop counter variable so it can be an int. Since, size_t size is changed to int size, in printf %zd is changed to %d. Reviewed-by: DJ Delorie <dj@redhat.com>
2020-05-28hurd: Fix fexecveSamuel Thibault
* sysdeps/mach/hurd/fexecve.c (fexecve): Re-lookup fd with O_EXEC before calling _hurd_exec_paths.
2020-05-28i386: Remove unused file sysdeps/unix/i386/sysdep.SFlorian Weimer
Linux overrides this file via sysdeps/unix/sysv/linux/i386/sysdep.c. Hurd does not have sysdeps/unix/i386 on its search path, so it uses csu/sysdep.c instead.
2020-05-28hurd: fix ptsname error when called on a non-ttySamuel Thibault
* sysdeps/mach/hurd/ptsname.c (__ptsname_internal): Replace not-supported errors from __term_get_peername with ENOTTY.
2020-05-28hurd: Fix fdopendir checking for directory typeSamuel Thibault
* sysdeps/mach/hurd/fdopendir.c (__fdopendir): Lookup "./" instead of "/" that would designate the root of the filesystem.
2020-05-28i386: Remove NO_TLS_DIRECT_SEG_REFS handlingFlorian Weimer
This was needed for 32-bit PV Xen, which has been superseded by this point according to Xen developers.
2020-05-28Hurd: Move <hurd/sigpreempt.h> internals into wrapper headerFlorian Weimer
_hurdsig_preemptors and _hurdsig_preempted_set are not ABI symbols, so do not declare them. HURD_PREEMPT_SIGNAL_P is an implementation detail, so move it as well. Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
2020-05-28Hurd: Use __sigmask in favor of deprecated sigmaskFlorian Weimer
This fixes various build errors due to deprecation warnings. Fixes commit 02802fafcf6e11ea3f998f685035ffe568dfddeb ("signal: Deprecate additional legacy signal handling functions"). Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
2020-05-28hurd: Fix pselect atomicitySamuel Thibault
In case the signal arrives before the __mach_msg call, we need to catch between the sigprocmask call and the __mach_msg call. Let's just reuse the support for sigsuspend to make the signal send a message that our __mach_msg call will just receive. * hurd/hurdselect.c (_hurd_select): Add sigport and ss variables. When sigmask is not NULL, create a sigport port and register as ss->suspended. Add it to the portset. When we receive a message on it, set error to EINTR. Clean up sigport and portset appropriately. * hurd/hurdsig.c (wake_sigsuspend): Note that pselect also uses it.
2020-05-28elf: Remove extra hwcap mechanism from ldconfigFlorian Weimer
Historically, this mechanism was used to process "nosegneg" subdirectories, and it is still used to include the "tls" subdirectories. With nosegneg support gone from ld.so, this is part no longer useful. The entire mechanism is not well-designed because it causes the meaning of hwcap bits in ld.so.cache to depend on the kernel version that was used to generate the cache, which makes it difficult to use this mechanism for anything else in the future. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-28elf: Do not read hwcaps from the vDSO in ld.soFlorian Weimer
This was only ever used for the "nosegneg" flag. This approach for passing hardware capability information creates a subtle dependency between the kernel and userspace, and ld.so.cache contents. It seems inappropriate for toady, where people expect to be able to run system images which very different kernel versions. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-27linux: Use internal DIR locks when accessing filepos on telldirAdhemerval Zanella
Since it might change during a readdir call. Checked on x86_64-linux-gnu and i686-linux-gnu.
2020-05-26Update i386 libm-test-ulpsSamuel Thibault
2020-05-26htl: Add clock variantsSamuel Thibault
* htl/pt-join.c (__pthread_join): Move implementation to... (__pthread_join_common): ... new function. Add try, timed and clock support. (__pthread_join): Reimplement on top of __pthread_join_common. (__pthread_tryjoin_np, __pthread_timedjoin_np, __pthread_clockjoin_np): Implement on top of __pthread_join_common. (pthread_tryjoin_np, pthread_timedjoin_np, pthread_clockjoin_np): New aliases. * hurd/hurdlock.c (__lll_abstimed_wait, __lll_abstimed_xwait, __lll_abstimed_lock): Check for supported clock. * sysdeps/htl/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): Add clockid parameter and support it. (__pthread_cond_timedwait): Pass -1 as clockid. (__pthread_cond_clockwait): New function. (pthread_cond_clockwait): New alias. * sysdeps/htl/pt-cond-wait.c (__pthread_cond_timedwait_internal): Update prototype. (__pthread_cond_wait): Pass -1 as clockid. * sysdeps/htl/pt-rwlock-timedrdlock.c (__pthread_rwlock_timedrdlock_internal): Add clockid parameter, and support id. (__pthread_rwlock_clockrdlock): New function. (pthread_rwlock_clockrdlock): New alias. * sysdeps/htl/pt-rwlock-rdlock.c (__pthread_rwlock_timedrdlock_internal): Update prototype. (__pthread_rwlock_rdlock): Pass -1 as clockid. * sysdeps/htl/pt-rwlock-timedwrlock.c (__pthread_rwlock_timedwrlock_internal): Add clockid parameter, and support id. (__pthread_rwlock_clockwrlock): New function. (pthread_rwlock_clockwrlock): New alias. * sysdeps/htl/pt-rwlock-wrlock.c (__pthread_rwlock_timedwrlock_internal): Update prototype. (__pthread_rwlock_wrlock): Pass -1 as clockid. * sysdeps/mach/hurd/htl/pt-mutex-timedlock.c (__pthread_mutex_timedlock): Move implementation to (__pthread_mutex_clocklock): New function with additional clockid parameter and support it. (pthread_mutex_clocklock): New alias. (__pthread_mutex_timedlock): Reimplement on top of __pthread_mutex_clocklock. * sysdeps/htl/pthread.h (pthread_tryjoin_np, pthread_timedjoin_np, pthread_clockjoin_np, pthread_mutex_clocklock, pthread_cond_clockwait, pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock): New prototypes. * sysdeps/htl/pthreadP.h (__pthread_cond_clockwait): New prototype. * htl/Versions (GLIBC_2.32): Add pthread_cond_clockwait, pthread_mutex_clocklock, pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock, pthread_tryjoin_np, pthread_timedjoin_np, pthread_clockjoin_np. * sysdeps/mach/hurd/i386/libpthread.abilist (pthread_clockjoin_np, pthread_cond_clockwait, pthread_mutex_clocklock, pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock, pthread_timedjoin_np, pthread_tryjoin_np): New functions. * nptl/tst-abstime.c, nptl/tst-join10.c, nptl/tst-join11.c, nptl/tst-join12.c, nptl/tst-join13.c, nptl/tst-join14.c, nptl/tst-join2.c, nptl/tst-join3.c, nptl/tst-join8.c, nptl/tst-join9.c, nptl/tst-mutex-errorcheck.c, nptl/tst-pthread-mutexattr.c, nptl/tst-mutex11.c, nptl/tst-mutex5.c, nptl/tst-mutex7.c, nptl/tst-mutex7robus.c, nptl/tst-mutex9.c, nptl/tst-rwlock12.c, nptl/tst-rwlock14.c: Move to sysdeps/pthread. * sysdeps/pthread/tst-mutex8.c: Move back to nptl. * nptl/Makefile (tests): Move tst-mutex5, tst-mutex7, tst-mutex7robust, tst-mutex9, tst-mutex11, tst-rwlock12, tst-rwlock14, tst-join2, tst-join3, tst-join8, tst-join9 tst-join10, tst-join11, tst-join12, tst-join13, tst-join14, tst-abstime, tst-mutex-errorcheck, tst-pthread-mutexattr to ... * sysdeps/pthread/Makefile (tests): ... here.
2020-05-25signal: Deprecate additional legacy signal handling functionsFlorian Weimer
This needs a few test adjustments: In some cases, sigignore was used for convenience (replaced with xsignal with SIG_IGN). Tests for the deprecated functions need to disable -Wdeprecated-declarations, and for the sigmask deprecation, -Wno-error. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-25elf: Turn _dl_printf, _dl_error_printf, _dl_fatal_printf into functionsFlorian Weimer
This change makes it easier to set a breakpoint on these calls. This also addresses the issue that including <ldsodefs.h> without <unistd.h> does not result usable _dl_*printf macros because of the use of the STD*_FILENO macros there. (The private symbol for _dl_fatal_printf will go away again once the exception handling implementation is unified between libc and ld.so.) Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-21x86: Update Intel Atom processor family optimizationH.J. Lu
Enable Intel Silvermont optimization for Intel Goldmont Plus. Detect more Intel Airmont processors. Optimize Intel Tremont like Intel Silvermont with rep string instructions.
2020-05-21elf.h: add aarch64 property definitionsSzabolcs Nagy
These property values are specified by the AArch64 ELF ABI and binutils can create binaries marked with them. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-21elf.h: Add PT_GNU_PROPERTYSzabolcs Nagy
This program header type is already used in binaries on x86 and aarch64 targets. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20<libc-symbols.h>: Add libpthread hidden alias supportFlorian Weimer
Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Use __pthread_attr_copy in pthread_setattr_default_npFlorian Weimer
Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Use __pthread_attr_copy in pthread_getattr_default_np (bug 25999)Florian Weimer
pthread_getattr_default_np needs to make a deep copy. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Add __pthread_attr_copy for copying pthread_attr_t objectsFlorian Weimer
Also add the private type union pthread_attr_transparent, to reduce the amount of casting that is required. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Make __pthread_attr_init, __pthread_attr_destroy available internallyFlorian Weimer
pthread_attr_destroy needs to be a weak alias to avoid future linknamespace failures. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Move pthread_gettattr_np into libcFlorian Weimer
This is part of the libpthread removal project: <https://sourceware.org/ml/libc-alpha/2019-10/msg00080.html> Use __getline instead of __getdelim to avoid a localplt failure. Likewise for __getrlimit/getrlimit. The abilist updates were performed by: git ls-files 'sysdeps/unix/sysv/linux/**/libc.abilist' \ | while read x ; do echo "GLIBC_2.32 pthread_getattr_np F" >> $x done python3 scripts/move-symbol-to-libc.py --only-linux pthread_getattr_np The private export of __pthread_getaffinity_np is no longer needed, but the hidden alias still necessary so that the symbol can be exported with versioned_symbol. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Move pthread_getaffinity_np into libcFlorian Weimer
This is part of the libpthread removal project: <https://sourceware.org/ml/libc-alpha/2019-10/msg00080.html> The abilist updates were performed by: git ls-files 'sysdeps/unix/sysv/linux/**/libc.abilist' \ | while read x ; do echo "GLIBC_2.32 pthread_getaffinity_np F" >> $x done python3 scripts/move-symbol-to-libc.py pthread_getaffinity_np Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Move pthread_attr_setaffinity_np into libcFlorian Weimer
This is part of the libpthread removal project: <https://sourceware.org/ml/libc-alpha/2019-10/msg00080.html> The symbol did not previously exist in libc, so a new GLIBC_2.32 symbol is needed, to get correct dependency for binaries which use the symbol but no longer link against libpthread. The abilist updates were performed by: git ls-files 'sysdeps/unix/sysv/linux/**/libc.abilist' \ | while read x ; do echo "GLIBC_2.32 pthread_attr_setaffinity_np F" >> $x done python3 scripts/move-symbol-to-libc.py pthread_attr_setaffinity_np Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20nptl: Replace some stubs with the Linux implementationFlorian Weimer
The stubs for pthread_getaffinity_np, pthread_getname_np, pthread_setaffinity_np, pthread_setname_np are replaced, and corresponding tests are moved. After the removal of the NaCl port, nptl is Linux-specific, and the stubs are no longer needed. This effectively reverts commit c76d1ff5149bd03210f2bb8cd64446c51618d016 ("NPTL: Add stubs for Linux-only extension functions."). Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20Linux: Add missing handling of tai field to __ntp_gettime64Florian Weimer
This fixes a build error: ../sysdeps/unix/sysv/linux/ntp_gettime.c: In function ‘__ntp_gettime’: ../sysdeps/unix/sysv/linux/ntp_gettime.c:56:10: error: ‘ntv64.tai’ is used uninitialized in this function [-Werror=uninitialized] 56 | *ntv = valid_ntptimeval64_to_ntptimeval (ntv64); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-05-20Mention GCC 10 attribute access.Martin Sebor
Reviewed-by: Paul Eggert <eggert@cs.ucla.edu>
2020-05-20y2038: Replace __clock_gettime with __clock_gettime64Lukasz Majewski
The __clock_gettime internal function is not supporting 64 bit time on architectures with __WORDSIZE == 32 and __TIMESIZE != 64 (like e.g. ARM 32 bit). The __clock_gettime64 function shall be used instead in the glibc itself as it supports 64 bit time on those systems. This patch does not bring any changes to systems with __WORDSIZE == 64 as for them the __clock_gettime64 is aliased to __clock_gettime (in ./include/time.h).
2020-05-20manual: Add missing section and node for clockid_t wait functionsFlorian Weimer
Without this, these functions appear under the node Default Thread Attributes, which is confusing. Eventually, the documentation should be merged with the (yet to be documented) standardized functions. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-05-20y2038: linux: Provide __ntp_gettimex64 implementationLukasz Majewski
This patch provides new __ntp_gettimex64 explicit 64 bit function for getting time parameters via NTP interface. The call to __adjtimex in __ntp_gettime64 function has been replaced with direct call to __clock_adjtime64 syscall, to simplify the code. Moreover, a 32 bit version - __ntp_gettimex has been refactored to internally use __ntp_gettimex64. The __ntp_gettimex is now supposed to be used on systems still supporting 32 bit time (__TIMESIZE != 64) - hence the necessary conversions between struct ntptimeval and 64 bit struct __ntptimeval64. 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 __ntp_gettimex64 and __ntp_gettimex. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20y2038: linux: Provide __ntp_gettime64 implementationLukasz Majewski
This patch provides new __ntp_gettime64 explicit 64 bit function for getting time parameters via NTP interface. Internally, the __clock_adjtime64 syscall is used instead of __adjtimex. This patch is necessary for having architectures with __WORDSIZE == 32 Y2038 safe. Moreover, a 32 bit version - __ntp_gettime has been refactored to internally use __ntp_gettime64. The __ntp_gettime is now supposed to be used on systems still supporting 32 bit time (__TIMESIZE != 64) - hence the necessary conversions between struct ntptimeval and 64 bit struct __ntptimeval64. 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 __ntp_gettime64 and __ntp_gettime. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20y2038: Provide conversion helpers for struct __ntptimeval64Lukasz Majewski
Those functions allow easy conversion between Y2038 safe, glibc internal struct __ntptimeval64 and struct ntptimeval. The reserved fields (i.e. __glibc_reserved{1234}) during conversion are zeroed as well, to provide behavior similar to one in ntp_gettimex function (where those are cleared before the struct ntptimeval is returned). Those functions are put in Linux specific sys/timex.h file, as putting them into glibc's local include/time.h would cause build break on HURD as it doesn't support struct timex related syscalls. Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20y2038: Introduce struct __ntptimeval64 - new internal glibc typeLukasz Majewski
This type is a glibc's "internal" type to get time parameters data from Linux kernel (NTP daemon interface). It stores time in struct __timeval64 rather than struct timeval, which makes it Y2038-proof. Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20y2038: linux: Provide __adjtime64 implementationLukasz Majewski
This patch provides new __adjtime64 explicit 64 bit function for adjusting Linux kernel clock. Internally, the __clock_adjtime64 syscall is used instead of __adjtimex. This patch is necessary for having architectures with __WORDSIZE == 32 Y2038 safe. Moreover, a 32 bit version - __adjtime has been refactored to internally use __adjtime64. The __adjtime is now supposed to be used on systems still supporting 32 bit time (__TIMESIZE != 64) - hence the necessary conversions between struct timeval and 64 bit struct __timeval64. 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 __adjtime64 and __adjtime. Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20y2038: linux: Provide ___adjtimex64 implementationLukasz Majewski
This patch provides new ___adjtimex64 explicit 64 bit function for adjusting Linux kernel clock. Internally, the __clock_adjtime64 syscall is used. This patch is necessary for having architectures with __WORDSIZE == 32 Y2038 safe. Moreover, a 32 bit version - ___adjtimex has been refactored to internally use ___adjtimex64. The ___adjtimex is now supposed to be used on systems still supporting 32 bit time (__TIMESIZE != 64) - hence the necessary conversions between struct timex and 64 bit struct __timex64. Last but not least, in ___adjtimex64 function the __clock_adjtime syscall has been replaced with __clock_adjtime64 to support 64 bit time on architectures with __WORDSIZE == 32 and __TIMESIZE != 64. 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 ___adjtimex64 and ___adjtimex. Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2020-05-20y2038: linux: Provide __clock_adjtime64 implementationLukasz Majewski
This patch replaces auto generated wrapper (as described in sysdeps/unix/sysv/linux/syscalls.list) for clock_adjtime with one which adds extra support for reading 64 bit time values on machines with __TIMESIZE != 64. To achieve this goal new __clock_adjtime64 explicit 64 bit function for adjusting Linux clock has been added. Moreover, a 32 bit version - __clock_adjtime has been refactored to internally use __clock_adjtime64. The __clock_adjtime is now supposed to be used on systems still supporting 32 bit time (__TIMESIZE != 64) - hence the necessary conversions between 64 bit struct __timespec64 and struct timespec. The new __clock_adjtime64 syscall available from Linux 5.1+ has been used, when applicable. Up till v5.4 in the Linux kernel there was a bug preventing this call from obtaining correct struct's timex time.tv_sec time after time_t overflow (i.e. not being Y2038 safe). 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 Linux kernel, headers and minimal kernel version for glibc build test matrix: - Linux v5.1 (with clock_adjtime64) and glibc build with v5.1 as minimal kernel version (--enable-kernel="5.1.0") The __ASSUME_TIME64_SYSCALLS flag defined. - Linux v5.1 and default minimal kernel version The __ASSUME_TIME64_SYSCALLS not defined, but kernel supports clock_adjtime64 syscall. - Linux v4.19 (no clock_adjtime64 support) with default minimal kernel version for contemporary glibc (3.2.0) This kernel doesn't support clock_adjtime64 syscall, so the fallback to clock_adjtime is tested. Above tests were performed with Y2038 redirection applied as well as without (so the __TIMESIZE != 64 execution path is checked as well). No regressions were observed. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>