From 81ed334f67e0c56ff0a89ade0fc156c0ba23f190 Mon Sep 17 00:00:00 2001 From: Dmitry Chestnykh Date: Sun, 25 Feb 2024 14:43:28 +0300 Subject: Add support for using time64 on big-endian machines. For BE architectures there is one significant difference in comparison with time64 support for little-endian architectures like ARMv7. The difference is that we strictly need to pass two 64bit values to system calls because Linux Kernel internally uses `struct __kernel_timespec` and similar, which consists of two 64bit fields. For this reason many files have been changed to convert pointers to timespec-family structures (mixed of 64bit and 32bit values) to the pointer of the similar but 64bit-only structures for using as system calls args. This is general prerequisite for any BE architecture. Signed-off-by: Dmitry Chestnykh --- libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c') diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c b/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c index 80d242f21..1cccf57cb 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/timer_settime.c @@ -23,6 +23,9 @@ #include #include "kernel-posix-timers.h" +#if defined(__UCLIBC_USE_TIME64__) +#include "internal/time64_helpers.h" +#endif #ifdef __NR_timer_settime # ifndef __ASSUME_POSIX_TIMERS @@ -56,7 +59,7 @@ timer_settime ( /* Delete the kernel timer object. */ # if defined(__UCLIBC_USE_TIME64__) && defined(__NR_timer_settime64) int res = INLINE_SYSCALL (timer_settime64, 4, kt->ktimerid, flags, - value, ovalue); + TO_ITS64_P(value), ovalue); # else int res = INLINE_SYSCALL (timer_settime, 4, kt->ktimerid, flags, value, ovalue); -- cgit v1.2.3