summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-04-27 13:34:01 +0000
committerDmitry Vyukov <dvyukov@google.com>2016-04-27 13:34:01 +0000
commit2a2a42afe54b96e36fd85627960b4ca7339e8d5b (patch)
tree0b53bb831f94d7d8504a94736789bb266d388cfb
parentca36bb3011f06545e4feffce017ac4b1b353de4f (diff)
tsan: make windows shadow mapping a bijection
CheckShadowMapping function started catching that mem->shadow->mem mapping is not bijection. Make it bijection. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@267713 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/tsan/rtl/tsan_platform.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/tsan/rtl/tsan_platform.h b/lib/tsan/rtl/tsan_platform.h
index 3d4abbbbe..118e01b09 100644
--- a/lib/tsan/rtl/tsan_platform.h
+++ b/lib/tsan/rtl/tsan_platform.h
@@ -587,7 +587,11 @@ uptr MemToShadowImpl(uptr x) {
return (((x) & ~(Mapping::kAppMemMsk | (kShadowCell - 1)))
^ Mapping::kAppMemXor) * kShadowCnt;
#else
+# ifndef SANITIZER_WINDOWS
return ((x & ~(kShadowCell - 1)) * kShadowCnt) | Mapping::kShadowBeg;
+# else
+ return ((x & ~(kShadowCell - 1)) * kShadowCnt) + Mapping::kShadowBeg;
+# endif
#endif
}
@@ -662,7 +666,6 @@ uptr ShadowToMemImpl(uptr s) {
# ifndef SANITIZER_WINDOWS
return (s & ~Mapping::kShadowBeg) / kShadowCnt;
# else
- // FIXME(dvyukov): this is most likely wrong as the mapping is not bijection.
return (s - Mapping::kShadowBeg) / kShadowCnt;
# endif // SANITIZER_WINDOWS
#endif