|
From: <sv...@va...> - 2016-02-18 11:14:55
|
Author: mjw
Date: Thu Feb 18 11:14:47 2016
New Revision: 15795
Log:
Bug 359201 followup. futex skips argument 5 if op is FUTEX_WAIT_BITSET.
The original fix in svn r15793 read argument 6 separately by using PRA6
unconditionally. This is wrong. We need to first check whether a
track_pre_reg_read callback is registered (only memcheck does).
The PRE_REG_READX macro already had this check. Just add the same
before calling PRA6. Thanks to Tom Hughes for noticing. Without this
helgrind/tests/cond_timedwait_test and drd/tests/pth_inconsistent_cond_wait
regtests would fail.
Modified:
trunk/coregrind/m_syswrap/syswrap-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c Thu Feb 18 11:14:47 2016
@@ -1163,7 +1163,8 @@
PRE_REG_READ4(long, "futex",
vki_u32 *, futex, int, op, int, val,
struct timespec *, utime);
- PRA6("futex",int,val3);
+ if (VG_(tdict).track_pre_reg_read)
+ PRA6("futex",int,val3);
}
break;
case VKI_FUTEX_WAKE_BITSET:
|