diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2016-09-22 14:33:43 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2016-09-22 14:33:43 +0000 |
commit | 5f44b044753c580075404269e852f5b9646e06f7 (patch) | |
tree | 66ccfa7a00dd81d7d785ef46d84a9b61d6dcdac6 | |
parent | ee5b5f52ba632ff4a6e1523aefd22bbe0ef9b0f7 (diff) | |
download | bcm5719-llvm-5f44b044753c580075404269e852f5b9646e06f7.tar.gz bcm5719-llvm-5f44b044753c580075404269e852f5b9646e06f7.zip |
tsan: fix bug introduced in 282152
In ShadowToMem we call MemToShadow potentially for incorrect addresses.
So DCHECK(IsAppMem(p)) can fire in debug mode.
Fix this by swapping range and MemToShadow checks.
llvm-svn: 282157
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_platform.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform.h b/compiler-rt/lib/tsan/rtl/tsan_platform.h index 903ff5be3ea..f9c9eec82a3 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_platform.h +++ b/compiler-rt/lib/tsan/rtl/tsan_platform.h @@ -703,13 +703,13 @@ uptr ShadowToMemImpl(uptr s) { // range consecutively and see if shadow->app->shadow mapping gives us the // same address. uptr p = (s / kShadowCnt) ^ Mapping::kAppMemXor; - if (MemToShadow(p) == s && - p >= Mapping::kLoAppMemBeg && p < Mapping::kLoAppMemEnd) + if (p >= Mapping::kLoAppMemBeg && p < Mapping::kLoAppMemEnd && + MemToShadow(p) == s) return p; # ifdef TSAN_MID_APP_RANGE p = ((s / kShadowCnt) ^ Mapping::kAppMemXor) + Mapping::kMidShadowOff; - if (MemToShadow(p) == s && - p >= Mapping::kMidAppMemBeg && p < Mapping::kMidAppMemEnd) + if (p >= Mapping::kMidAppMemBeg && p < Mapping::kMidAppMemEnd && + MemToShadow(p) == s) return p; # endif return ((s / kShadowCnt) ^ Mapping::kAppMemXor) | Mapping::kAppMemMsk; |