This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v7 0/3] y2038: Linux: Introduce __clock_settime64 function
- From: Joseph Myers <joseph at codesourcery dot com>
- To: Lukasz Majewski <lukma at denx dot de>
- Cc: Alistair Francis <alistair23 at gmail dot com>, Zack Weinberg <zackw at panix dot com>, Arnd Bergmann <arnd at arndb dot de>, Alistair Francis <alistair dot francis at wdc dot com>, GNU C Library <libc-alpha at sourceware dot org>, Adhemerval Zanella <adhemerval dot zanella at linaro dot org>, Florian Weimer <fweimer at redhat dot com>, Carlos O'Donell <carlos at redhat dot com>, Stepan Golosunov <stepan at golosunov dot pp dot ru>
- Date: Tue, 17 Sep 2019 16:51:06 +0000
- Subject: Re: [PATCH v7 0/3] y2038: Linux: Introduce __clock_settime64 function
- Ironport-sdr: WE81bqPIvLevarp72eQgxhaVPj1HbNQ7gt0U2wYokgzDALDLjaQdAvz7ab4aWj4xUt2E+fxzRA MowHxE9PctaeWTqJgOyflcYd26jfKEi/i50oYOhy5nM4uNyDQjHtn1PZgi466ft2zypk1REt8J vq+CTGNcJWOUazm3QCIlPtBmLTqLRfW7lb2ulC4FPA7uoog3Met3kYc3J4JaxmFMoSASdLiBMA poqt/0mD/+DoGCpVfJgZkkg7vHFGJzmCMtkI/DVFfwqmzmDL5Q4IX9fjxEAkXLqOCchAe5eFqX ugQ=
- Ironport-sdr: cQ2b1e1O+4ZvuNOsICP/QYfRAXHpNQQLVg0IgiAgc1r+1pCTkyDhy0KzU6whMoQbrWuQQKRVhi aYAbbWwIZYG2sxAevEuGokOXpctUePtxuo/Nk+aRuf+WFU3+21rczsSzVgGoiO8XEzdMsW2o3U 2lbbvacVRZvdLe8ZoSkLPRgll7VndfZ1glvdEbb5sjE3Wsl+QlHDXLDRfbRZ00UBSVXw0pCQ0P 06pO+vJtMetHoDSdKTzvnyoL/nsgg1AHw21gaJ+vCmlgcIps5irk5sDqdfih0coEU8Vj7oR2p2 vw0=
- References: <20190906145911.30207-1-lukma@denx.de> <CAKmqyKMdsVZg_ZS7fLTt23dy2vnZc1z85b_+8heiK-8UiqMx+g@mail.gmail.com> <alpine.DEB.2.21.1909062122220.30243@digraph.polyomino.org.uk> <CAKmqyKP=kmeJjcsDepetvsVrph3xJ7G8yQdNFNyX-wL2ZMtqmA@mail.gmail.com> <20190917121151.01629dad@jawa> <alpine.DEB.2.21.1909171332410.17687@digraph.polyomino.org.uk> <20190917175343.01715554@jawa>
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