[PATCH v7 0/3] y2038: Linux: Introduce __clock_settime64 function
Joseph Myers
joseph@codesourcery.com
Tue Sep 17 16:51:00 GMT 2019
On Tue, 17 Sep 2019, Lukasz Majewski wrote:
> - New 32 bits glibc ports (like RISC-V 32) will get __TIMESIZE ==
> 64 (__WORDSIZE == 32) and no need to define the -D_TIME_BITS=64
> during the compilation. They will just get 64 bit time API support
> from the outset.
Yes, at least if such ports wish to use 64-bit time; I don't think we've
really discussed if we want to *require* 64-bit time for future ports
(e.g. the next revised resubmissions of the ARC and NDS32 ports).
Certainly the work required right now for ARC or NDS32 to use 64-bit time
would be significantly more than the work for RV32 (because they also
support older kernel versions without the 64-bit-time syscalls, so all the
Y2038 work for fallback at runtime to older syscalls becomes relevant),
unless they decide on 5.1 or later as minimum kernel version.
> - Already supported 32 bits architectures (like armv7-a with __WORDSIZE
> == 32) will keep __TIMESIZE == 32 and require -D_TIME_BITS=64 for
> compilation.
Yes.
> After glibc sets the minimal supported kernel version to 5.1 and all
> conversions for syscalls to support 64 bit time API are done the
> __TIMESIZE will be set to 64 and -D_TIME_BITS=64 will not be required
> anymore for compilation.
No. __TIMESIZE means the size of time_t in the unsuffixed ABIs in glibc,
not the _TIME_BITS-dependent size of time_t in the current compilation.
We hope in future to make _TIME_BITS=64 the default and only API supported
for new compilations (which is independent of what the minimum kernel
version is), but __TIMESIZE would still be 32, because the unsuffixed ABIs
would remain compatible with existing binaries using 32-bit time.
> Ok. So then we shall keep the condition:
>
> #if __WORDSIZE == 64 \
> || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64)
> # define __timespec64 timespec
> #else
No. __timespec64 should be defined to timespec whenever __TIMESIZE == 64.
The timespec to which it is defined, in the public header, would gain
padding.
The condition
#if __WORDSIZE == 64 \
|| (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64)
is correct as a condition for struct timespec (in the public header) *not*
to have padding.
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list