diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2013-03-18 16:56:48 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2013-03-18 16:56:48 +0000 |
commit | ce26a0aa92cddf7c986a4a164ae07e8d60b6b02d (patch) | |
tree | f726cf1f0db2e5934d791f086f618b904a73394b /compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc | |
parent | 2e7f29f042eb203215eb0ccb12ebc5b811fa4c7a (diff) | |
download | bcm5719-llvm-ce26a0aa92cddf7c986a4a164ae07e8d60b6b02d.tar.gz bcm5719-llvm-ce26a0aa92cddf7c986a4a164ae07e8d60b6b02d.zip |
tsan: touch less shadow memory during operations on big memory ranges
greatly reduces memory consumption
llvm-svn: 177289
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc b/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc index 0372bb53964..72b9f1a7b0b 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cc @@ -201,7 +201,7 @@ void ThreadStart(ThreadState *thr, int tid, uptr os_id) { if (tid) { if (stk_addr && stk_size) - MemoryResetRange(thr, /*pc=*/ 1, stk_addr, stk_size); + MemoryRangeImitateWrite(thr, /*pc=*/ 1, stk_addr, stk_size); if (tls_addr && tls_size) { // Check that the thr object is in tls; @@ -212,8 +212,9 @@ void ThreadStart(ThreadState *thr, int tid, uptr os_id) { CHECK_GE(thr_end, tls_addr); CHECK_LE(thr_end, tls_addr + tls_size); // Since the thr object is huge, skip it. - MemoryResetRange(thr, /*pc=*/ 2, tls_addr, thr_beg - tls_addr); - MemoryResetRange(thr, /*pc=*/ 2, thr_end, tls_addr + tls_size - thr_end); + MemoryRangeImitateWrite(thr, /*pc=*/ 2, tls_addr, thr_beg - tls_addr); + MemoryRangeImitateWrite(thr, /*pc=*/ 2, + thr_end, tls_addr + tls_size - thr_end); } } |