This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi Alistair,
> On Thu, Jun 27, 2019 at 3:08 PM Lukasz Majewski <lukma@denx.de> wrote:
> >
> > Hi Arnd,
> >
> > > On Thu, Jun 27, 2019 at 6:17 PM Lukasz Majewski <lukma@denx.de>
> > > wrote:
> > > > >
> > > > > Ok, so you redirect both __clock_settime64 to __clock_settime
> > > > > and __NR_settime64 to __NR_settime, in order to get back to
> > > > > the same definition that you have today on 64-bit.
> > > > >
> > > > > Sorry for taking so long to understand that.
> > > >
> > > > Not only you had a hard time to understand it.
> > >
> > > Here is how I had imagined it would be done in a way that I find
> > > easier to understand:
> > >
> > > #if __WORDSIZE == 32 /* yes, all of them including rv32 and x32 */
> > > __clock_settime64 (clockid_t clock_id, const struct __timespec64
> > > *tp) {
> > > int ret;
> > >
> > > /* Make sure the time cvalue is OK. */
> > > if (tp->tv_nsec < 0 || tp->tv_nsec >= 1000000000)
> > > {
> > > __set_errno (EINVAL);
> > > return -1;
> > > }
> > > #ifdef __NR_clock_settime64
> > > ret = INLINE_SYSCALL_CALL (clock_settime64, clock_id, tp);
> > > #endif
> > >
> > > #ifndef __ASSUME_TIME64_SYSCALLS
> > > if (ret == 0 || errno != ENOSYS)
> > > return ret;
> > >
> > > if (! in_time_t_range (tp->tv_sec))
> > > {
> > > __set_errno (EOVERFLOW);
> > > return -1;
> > > }
> > >
> > > struct timespec ts32;
> > > valid_timespec64_to_timespec (tp, &ts32);
> > > ret = INLINE_SYSCALL_CALL (clock_settime, clock_id, &ts32);
> > > #endif
> > >
> > > return ret;
> > > }
> > > #endif
> > >
> > > This should be functionally identical to what you have, but avoid
> > > some of the complexity, especially once linux-5.1 becomes the
> > > minimum version.
>
> This implementation looks good to me. It shouldn't be too hard to
> extend this to all the problematic y2038 syscalls.
This is the plan. After we agree on __ASSUME_TIME64_SYSCALLS semantics
(the other patch - I've add you to CC on the ping for it) it shall be
possible to follow a similar pattern as for __clock_settime for other
syscalls.
>
> >
> > The semantics for __ASSUME_TIME64_SYSCALLS is under the discussion
> > for some time [1].
>
> I don't see any comments on this, do you know the status?
I'm waiting for Joseph's (and the community) review and final
acceptance (pulling to main tree).
>
> >
> > Also the __clock_settime64() implementation from [2] takes into
> > account some corner cases (like support for all archs since 3.2
> > kernel, x32, legacy systems, etc). The implementation from [2] IMHO
> > seems to be more concise and fits into the 64 bit conversion
> > paradigm for glibc [3].
>
> This one also works for RV32 :)
Good :-). Nice to have some users and testers :-).
>
> Alistair
>
> >
> > However, this is only my opinion and we shall wait for other
> > community members to express their opinions.
> >
> > >
> > > Arnd
> >
> >
> > Note:
> >
> > [1] - https://patchwork.ozlabs.org/patch/1117100/
> > [2] - https://patchwork.ozlabs.org/patch/1107235/
> > [3] -
> > https://www.gnu.org/software/libc/manual/html_mono/libc.html
> > "D.2.1 64-bit time symbol handling in the GNU C Library"
> >
> >
> >
> > Best regards,
> >
> > Lukasz Majewski
> >
> > --
> >
> > DENX Software Engineering GmbH, Managing Director: Wolfgang
> > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,
> > Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email:
> > lukma@denx.de
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Attachment:
pgpsM9yV7qFev.pgp
Description: OpenPGP digital signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |