This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [RFC v2 07/20] sysdeps/gettimeofday: Use clock_gettime64 if avaliable
- From: Alistair Francis <alistair23 at gmail dot com>
- To: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- Cc: Alistair Francis <alistair dot francis at wdc dot com>, GNU C Library <libc-alpha at sourceware dot org>, Arnd Bergmann <arnd at arndb dot de>, Florian Weimer <fweimer at redhat dot com>, Palmer Dabbelt <palmer at sifive dot com>, macro at wdc dot com, Zong Li <zongbox at gmail dot com>, Zong Li <zong at andestech dot com>
- Date: Wed, 3 Jul 2019 16:49:12 -0700
- Subject: Re: [RFC v2 07/20] sysdeps/gettimeofday: Use clock_gettime64 if avaliable
- References: <cover.1561421042.git.alistair.francis@wdc.com> <cb015d0d1d29e4b948c7118c5b12ff2bed83a6ec.1561421042.git.alistair.francis@wdc.com> <23ad951b-63f7-7c00-0dde-57b05b8039dc@linaro.org>
On Thu, Jun 27, 2019 at 6:15 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 24/06/2019 21:09, Alistair Francis wrote:
> > Not all architectures support the obsolete gettimeofday so use the
> > newer clock_gettime64 syscall if it is avaliable. This fixes RV32
> > build issues.
> >
> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > ---
> > ChangeLog | 1 +
> > sysdeps/unix/sysv/linux/gettimeofday.c | 28 ++++++++++++++++++++++++++
> > 2 files changed, 29 insertions(+)
> >
> > diff --git a/ChangeLog b/ChangeLog
> > index a700783ef3..f1c7acb6ab 100644
> > --- a/ChangeLog
> > +++ b/ChangeLog
> > @@ -4,6 +4,7 @@
> > * sysdeps/unix/sysv/linux/nanosleep.c: Likewise.
> > * sysdeps/unix/sysv/linux/nanosleep_nocancel.c: Likewise.
> > * sysdeps/unix/sysv/linux/lowlevellock-futex.h: Use __NR_futex_time64 if we don't have __NR_futex.
> > + * sysdeps/unix/sysv/linux/gettimeofday.c: Use clock_gettime64 syscall for gettimeofday.
> >
> > 2019-06-20 Dmitry V. Levin <ldv@altlinux.org>
> > Florian Weimer <fweimer@redhat.com>
> > diff --git a/sysdeps/unix/sysv/linux/gettimeofday.c b/sysdeps/unix/sysv/linux/gettimeofday.c
> > index a74f03825a..3d2b943123 100644
> > --- a/sysdeps/unix/sysv/linux/gettimeofday.c
> > +++ b/sysdeps/unix/sysv/linux/gettimeofday.c
> > @@ -32,7 +32,35 @@
> > int
> > __gettimeofday (struct timeval *tv, struct timezone *tz)
> > {
> > +#ifdef __ASSUME_TIME64_SYSCALLS
> > + int ret;
> > + struct timespec now;
> > +
> > + ret = INLINE_VSYSCALL (clock_gettime64, 2, CLOCK_REALTIME,
> > + &now);
> > +
> > + /* Convert from timespec to timeval */
> > + tv->tv_sec = now.tv_sec;
> > + tv->tv_usec = now.tv_nsec / 1000;
> > +
> > + return ret;
> > +#else
> > +# ifdef __NR_clock_gettime64
> > + long int ret;
> > + struct timespec now;
> > +
> > + ret = INLINE_VSYSCALL (clock_gettime64, 2, CLOCK_REALTIME,
> > + &now);
> > +
> > + /* Convert from timespec to timeval */
> > + tv->tv_sec = now.tv_sec;
> > + tv->tv_usec = now.tv_nsec / 1000;
> > +
> > + if (ret == 0 || errno != ENOSYS)
> > + return ret;
> > +# endif
> > return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
> > +#endif
> > }
> > libc_hidden_def (__gettimeofday)
> > weak_alias (__gettimeofday, gettimeofday)
> >
>
> Wouldn't be simpler to just call __clock_gettime instead:
>
> --
> __gettimeofday (struct timeval *tv, struct timezone *tz)
> {
> if (tv == NULL)
> return 0;
>
> struct timespec ts;
> __clock_gettime (CLOCK_REALTIME, &ts);
> tv->tv_sec = ts.tv_sec;
> tv->tv_usec = (__suseconds_t)ts.tv_nsec / 1000;
> return 0;
> }
> --
>
> From the patch 'linux: Provide __clock_settime64 implementation' internal
> include/time.h will redefine __clock_gettime to __clock_gettime64 if the
> case.
The version of this patch that I have only implements __clock_settime
and not __clock_gettime.
Alistair