diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-02-13 13:05:36 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-02-13 13:05:36 +0000 |
commit | 3c2489e2c32e7d4b29889f14641d2bfaa742c262 (patch) | |
tree | 1effe21d0846d03d820a03c8e34835adcc6a5c73 /compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc | |
parent | fb6f08d5bb8d0aa146888f398e11a389496157b7 (diff) | |
download | bcm5719-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.cc | 22 |
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 |