This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [RFC v3 02/23] sysdeps/gettimeofday: Use clock_gettime64 if avaliable
* Alistair Francis:
> diff --git a/sysdeps/unix/sysv/linux/gettimeofday.c b/sysdeps/unix/sysv/linux/gettimeofday.c
> index a74f03825a..151b1e606c 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 __timespec64 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 __timespec64 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
> }
This loses vDSO acceleration if glibc is compiled with kernel headers
which define __NR_clock_gettime64, but the run-time kernel does not have
clock_gettime64 in the vDSO.
And the kernel folks really want us to call clock_gettime when the user
calls the 32-bit function, for tracability of legacy processes.
Thanks,
Florian