From: Nicholas Nethercote Date: Wed, 22 Jul 2009 02:52:14 +0000 (+0000) Subject: Fix VG_(read_millisecond_timer) on Darwin. Fixes bug 200990. X-Git-Tag: svn/VALGRIND_3_5_0~332 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a62bb48300ef76c83711be2769e8435af489461f;p=thirdparty%2Fvalgrind.git Fix VG_(read_millisecond_timer) on Darwin. Fixes bug 200990. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10516 --- diff --git a/coregrind/m_libcproc.c b/coregrind/m_libcproc.c index 8269369a29..a01b2554f8 100644 --- a/coregrind/m_libcproc.c +++ b/coregrind/m_libcproc.c @@ -630,11 +630,15 @@ UInt VG_(read_millisecond_timer) ( void ) now += (ULong)(nsec / 1000); # elif defined(VGO_darwin) + // Weird: it seems that gettimeofday() doesn't fill in the timeval, but + // rather returns the tv_sec as the low 32 bits of the result and the + // tv_usec as the high 32 bits of the result. (But the timeval cannot be + // NULL!) See bug 200990. { SysRes res; struct vki_timeval tv_now = { 0, 0 }; res = VG_(do_syscall2)(__NR_gettimeofday, (UWord)&tv_now, (UWord)NULL); vg_assert(! sr_isError(res)); - now = tv_now.tv_sec * 1000000ULL + tv_now.tv_usec; + now = sr_Res(res) * 1000000ULL + sr_ResHI(res); } # else