summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-09-22 14:33:43 +0000
committerDmitry Vyukov <dvyukov@google.com>2016-09-22 14:33:43 +0000
commit5f44b044753c580075404269e852f5b9646e06f7 (patch)
tree66ccfa7a00dd81d7d785ef46d84a9b61d6dcdac6
parentee5b5f52ba632ff4a6e1523aefd22bbe0ef9b0f7 (diff)
downloadbcm5719-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.h8
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;
OpenPOWER on IntegriCloud