This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v5] y2038: Introduce __ASSUME_TIME64_SYSCALLS define
On Sun, 26 May 2019, Lukasz Majewski wrote:
> Shall the __ASSUME_TIME64_SYSCALLS be defined as:
> (@ sysdeps/unix/sysv/linux/kernel-features.h):
>
> #if __WORDSIZE == 32
> # if __LINUX_KERNEL_VERSION >= 0x050100
> # define __ASSUME_TIME64_SYSCALLS 1
> # endif
> #endif
>
> And also for __TIMESIZE==64
> (@ include/time.h)
>
> #if __TIMESIZE==64
> # define __ASSUME_TIME64_SYSCALLS 1
> #endif
__ASSUME_* should *only* be defined in kernel-features.h. A definition in
include/* would be incorrect.
It's not clear to me that __TIMESIZE == 64 would be the right condition
(in kernel-features.h) for defining __ASSUME_TIME64_SYSCALLS independent
of kernel version, because it would get wrong the case of 32-bit
architectures with old kernel support and glibc support added in future
with 64-bit time only (if we decide that any such future glibc port should
use only 64-bit time in userspace, but without also requiring a new kernel
for such a port). Rather, __WORDSIZE == 64 (with a special case for x32)
is, as previously discussed, closer to what we want (which is that the
"long" in the syscall ABI is 64-bit, which corresponds to __WORDSIZE and
the userspace "long" in all cases except for x32).
> Then the code would be (it is easier for me to understand the
> execution paths when providing the pseudo code):
>
> __clock_settime64(....)
> {
> ...
>
> #ifdef __ASSUME_TIME64_SYSCALLS
> # ifndef __NR_clock_settime64
> # define __NR_clock_settime64 __NR_clock_settime [1]
> # endif
> INLINE_SYSCALL_CALL (clock_settime64, …) [2]
> #else [3]
> int ret = INLINE_SYSCALL_CALL (clock_settime64, clock_id, tp);
> if (ret == 0 || errno != ENOSYS)
> return ret;
This part of the code inside the #else needs to be conditional, as well,
on "#ifdef __NR_clock_settime64". (Unless we require very new kernel
headers to build glibc. But we obviously can't right now - there's no
existing kernel release whose headers both include these syscalls and are
suitable for testing glibc, because of the fds_bits namespace issue.)
--
Joseph S. Myers
joseph@codesourcery.com