[PATCH v3 2/5] y2038: Introduce internal for glibc struct __timespec64
Andreas Schwab
schwab@suse.de
Tue May 7 14:13:00 GMT 2019
On Mai 07 2019, Lukasz Majewski <lukma@denx.de> wrote:
> Hi Andreas,
>
>> On Mai 07 2019, Lukasz Majewski <lukma@denx.de> wrote:
>>
>> > +struct __timespec64
>> > +{
>> > + __time64_t tv_sec; /* Seconds */
>> > +# if BYTE_ORDER == BIG_ENDIAN
>> > + int tv_pad: 32; /* Padding named for checking/setting
>> > */
>> > + __int32_t tv_nsec; /* Nanoseconds */
>> > +# else
>> > + __int32_t tv_nsec; /* Nanoseconds */
>> > + int tv_pad: 32; /* Padding named for checking/setting
>> > */ +# endif
>>
>> No need to use a bitfield, since the padding is not fractional.
>
> That bitfield is for following reasons:
>
> 1. Have a backup plan in the case if we need to copy and clear the
> padding anyway before passing this structure to the kernel in the future
> (as recently we discovered that for example x32 has a kernel bug with
> clearing it).
>
> 2. Kernel syscalls (e.g. clock_settime64) expects on those systems two
> values - each 8 bytes. To avoid any nasty surprises the explicit
> padding was added.
None of that requires a bitfield.
Andreas.
--
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
More information about the Libc-alpha
mailing list