diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2017-05-02 15:15:45 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2017-05-02 15:15:45 +0000 |
commit | dc6e2b60c572c4f67238e319b49259c13daca56d (patch) | |
tree | af2668d7c79275b1eb3db60731ff58bbece7287f | |
parent | 89fac7a414ac95fe9c389e96ce5c0cd21c168e02 (diff) |
tsan: allow fast large MemoryRangeSet on non-Windows Go
The fast reset for large memory regions is not working
only on windows. So enable it for Go/linux/darwin/freebsd.
See https://github.com/golang/go/issues/20139
for background and motivation.
Based on idea by Josh Bleecher Snyder.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@301927 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/tsan/rtl/tsan_rtl.cc | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/tsan/rtl/tsan_rtl.cc b/lib/tsan/rtl/tsan_rtl.cc index 70393037e..fa60f3247 100644 --- a/lib/tsan/rtl/tsan_rtl.cc +++ b/lib/tsan/rtl/tsan_rtl.cc @@ -866,9 +866,8 @@ static void MemoryRangeSet(ThreadState *thr, uptr pc, uptr addr, uptr size, // Don't want to touch lots of shadow memory. // If a program maps 10MB stack, there is no need reset the whole range. size = (size + (kShadowCell - 1)) & ~(kShadowCell - 1); - // UnmapOrDie/MmapFixedNoReserve does not work on Windows, - // so we do it only for C/C++. - if (SANITIZER_GO || size < common_flags()->clear_shadow_mmap_threshold) { + // UnmapOrDie/MmapFixedNoReserve does not work on Windows. + if (SANITIZER_WINDOWS || size < common_flags()->clear_shadow_mmap_threshold) { u64 *p = (u64*)MemToShadow(addr); CHECK(IsShadowMem((uptr)p)); CHECK(IsShadowMem((uptr)(p + size * kShadowCnt / kShadowCell - 1))); |