tsan: fix windows meta mapping
authorDmitry Vyukov <dvyukov@google.com>
Fri, 28 Oct 2016 17:25:27 +0000 (17:25 +0000)
committerDmitry Vyukov <dvyukov@google.com>
Fri, 28 Oct 2016 17:25:27 +0000 (17:25 +0000)
Currently windows fails on startup with:
CHECK failed: gotsan.cc:3077 "(((m - prev_m) / kMetaShadowSize)) == (((p - prev) / kMetaShadowCell))" (0x3ffffffeffffff7e, 0x6ffffff7e)

Make MemToMeta do the same MemToShadow does on windows: add offset instead of or'ing it.

llvm-svn: 285420

compiler-rt/lib/tsan/rtl/tsan_platform.h

index 31837c6..e6c2615 100644 (file)
@@ -660,8 +660,13 @@ u32 *MemToMetaImpl(uptr x) {
   return (u32*)(((((x) & ~(Mapping::kAppMemMsk | (kMetaShadowCell - 1)))) /
       kMetaShadowCell * kMetaShadowSize) | Mapping::kMetaShadowBeg);
 #else
+# ifndef SANITIZER_WINDOWS
   return (u32*)(((x & ~(kMetaShadowCell - 1)) / \
       kMetaShadowCell * kMetaShadowSize) | Mapping::kMetaShadowBeg);
+# else
+  return (u32*)(((x & ~(kMetaShadowCell - 1)) / \
+      kMetaShadowCell * kMetaShadowSize) + Mapping::kMetaShadowBeg);
+# endif
 #endif
 }