[llvm-commits] [compiler-rt] r158473 - in /compiler-rt/trunk/lib/tsan/rtl: tsan_interface_ann.cc tsan_platform.h

Dmitry Vyukov dvyukov at google.com
Thu Jun 14 14:40:35 PDT 2012


Author: dvyukov
Date: Thu Jun 14 16:40:35 2012
New Revision: 158473

URL: http://llvm.org/viewvc/llvm-project?rev=158473&view=rev
Log:
tsan: fix COMPAT mapping to not produce false reports

Modified:
    compiler-rt/trunk/lib/tsan/rtl/tsan_interface_ann.cc
    compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interface_ann.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface_ann.cc?rev=158473&r1=158472&r2=158473&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interface_ann.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interface_ann.cc Thu Jun 14 16:40:35 2012
@@ -18,6 +18,7 @@
 #include "tsan_rtl.h"
 #include "tsan_mman.h"
 #include "tsan_flags.h"
+#include "tsan_platform.h"
 
 #define CALLERPC ((uptr)__builtin_return_address(0))
 
@@ -123,6 +124,8 @@
 
 static bool CheckContains(ExpectRace *list, uptr addr, uptr size) {
   ExpectRace *race = FindRace(list, addr, size);
+  if (race == 0 && AlternativeAddress(addr))
+    race = FindRace(list, AlternativeAddress(addr), size);
   if (race == 0)
     return false;
   DPrintf("Hit expected/benign race: %s addr=%zx:%d %s:%d\n",

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h?rev=158473&r1=158472&r2=158473&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h Thu Jun 14 16:40:35 2012
@@ -64,6 +64,16 @@
 #endif
 }
 
+// For COMPAT mapping returns an alternative address
+// that mapped to the same shadow address.
+static inline uptr AlternativeAddress(uptr addr) {
+#if defined(TSAN_COMPAT_SHADOW) && TSAN_COMPAT_SHADOW
+  return addr | kLinuxAppMemMsk;
+#else
+  return 0;
+#endif
+}
+
 uptr GetShadowMemoryConsumption();
 void FlushShadowMemory();
 





More information about the llvm-commits mailing list