[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