diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2016-10-28 17:25:27 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2016-10-28 17:25:27 +0000 |
commit | 693163e72364e96ee735bd1a477e162c6f52668c (patch) | |
tree | 8d56cbeae80b1594025f4314b57a0754d7860186 | |
parent | 22a03e435aa73a7b8c25713bd1c64da315b4e9df (diff) | |
download | bcm5719-llvm-693163e72364e96ee735bd1a477e162c6f52668c.tar.gz bcm5719-llvm-693163e72364e96ee735bd1a477e162c6f52668c.zip |
tsan: fix windows meta mapping
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
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_platform.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform.h b/compiler-rt/lib/tsan/rtl/tsan_platform.h index 31837c6fc8d..e6c261539b7 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_platform.h +++ b/compiler-rt/lib/tsan/rtl/tsan_platform.h @@ -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 } |