|
From: <sv...@va...> - 2008-05-14 09:50:04
|
Author: bart
Date: 2008-05-14 10:50:08 +0100 (Wed, 14 May 2008)
New Revision: 8072
Log:
VG_(read_millisecond_timer)() is now monotonic, even if set_timeofday() is called or if ntpd adjusts the clock backwards. On Linux kernels where the clock_gettime() syscall is not supported, VG_(read_millisecond_timer)() falls back to the old behavior.
Modified:
trunk/coregrind/m_libcproc.c
Modified: trunk/coregrind/m_libcproc.c
===================================================================
--- trunk/coregrind/m_libcproc.c 2008-05-14 09:44:06 UTC (rev 8071)
+++ trunk/coregrind/m_libcproc.c 2008-05-14 09:50:08 UTC (rev 8072)
@@ -541,10 +541,21 @@
now += (ULong)(nsec / 1000);
# else
- struct vki_timeval tv_now;
+ struct vki_timespec ts_now;
SysRes res;
- res = VG_(do_syscall2)(__NR_gettimeofday, (UWord)&tv_now, (UWord)NULL);
- now = tv_now.tv_sec * 1000000ULL + tv_now.tv_usec;
+ res = VG_(do_syscall2)(__NR_clock_gettime, VKI_CLOCK_MONOTONIC,
+ (UWord)&ts_now);
+ if (res.isError == 0)
+ {
+ now = ts_now.tv_sec * 1000000ULL + ts_now.tv_nsec / 1000;
+ }
+ else
+ {
+ struct vki_timeval tv_now;
+ res = VG_(do_syscall2)(__NR_gettimeofday, (UWord)&tv_now, (UWord)NULL);
+ vg_assert(! res.isError);
+ now = tv_now.tv_sec * 1000000ULL + tv_now.tv_usec;
+ }
# endif
if (base == 0)
|