summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2013-02-13 13:05:36 +0000
committerDmitry Vyukov <dvyukov@google.com>2013-02-13 13:05:36 +0000
commit3c2489e2c32e7d4b29889f14641d2bfaa742c262 (patch)
tree1effe21d0846d03d820a03c8e34835adcc6a5c73 /compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
parentfb6f08d5bb8d0aa146888f398e11a389496157b7 (diff)
downloadbcm5719-llvm-3c2489e2c32e7d4b29889f14641d2bfaa742c262.tar.gz
bcm5719-llvm-3c2489e2c32e7d4b29889f14641d2bfaa742c262.zip
tsan: do not imitate memory write on malloc() (Go)
better memory range access functions (put only 1 event to trace) (Go) llvm-svn: 175056
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc')
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc b/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
index 3af42e48fab..f25fb412854 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc
@@ -422,4 +422,26 @@ void MemoryAccessRange(ThreadState *thr, uptr pc, uptr addr,
shadow_mem, cur);
}
}
+
+void MemoryAccessRangeStep(ThreadState *thr, uptr pc, uptr addr,
+ uptr size, uptr step, bool is_write) {
+ if (size == 0)
+ return;
+ FastState fast_state = thr->fast_state;
+ if (fast_state.GetIgnoreBit())
+ return;
+ StatInc(thr, StatMopRange);
+ fast_state.IncrementEpoch();
+ thr->fast_state = fast_state;
+ TraceAddEvent(thr, fast_state, EventTypeMop, pc);
+
+ for (uptr addr_end = addr + size; addr < addr_end; addr += step) {
+ u64 *shadow_mem = (u64*)MemToShadow(addr);
+ Shadow cur(fast_state);
+ cur.SetWrite(is_write);
+ cur.SetAddr0AndSizeLog(addr & (kShadowCell - 1), kSizeLog1);
+ MemoryAccessImpl(thr, addr, kSizeLog1, is_write, false,
+ shadow_mem, cur);
+ }
+}
} // namespace __tsan
OpenPOWER on IntegriCloud