[llvm-commits] [compiler-rt] r167466 - in /compiler-rt/trunk/lib: sanitizer_common/sanitizer_posix.cc tsan/go/test.c tsan/rtl/tsan_rtl.cc

Dmitry Vyukov dvyukov at google.com
Tue Nov 6 08:48:46 PST 2012


Author: dvyukov
Date: Tue Nov  6 10:48:46 2012
New Revision: 167466

URL: http://llvm.org/viewvc/llvm-project?rev=167466&view=rev
Log:
tsan: slightly relax requirements for lazy shadow memory (can overlap and may not be properly aligned)
it's problematic on windows where allocation granularity is much larger than page size


Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
    compiler-rt/trunk/lib/tsan/go/test.c
    compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=167466&r1=167465&r2=167466&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Tue Nov  6 10:48:46 2012
@@ -74,11 +74,12 @@
 }
 
 void *MmapFixedNoReserve(uptr fixed_addr, uptr size) {
-  void *p = internal_mmap((void*)fixed_addr, size,
-                      PROT_READ | PROT_WRITE,
-                      MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
-                      -1, 0);
-  if (p != (void*)fixed_addr)
+  void *p = internal_mmap((void*)(fixed_addr & ~(kPageSize - 1)),
+      RoundUpTo(size, kPageSize),
+      PROT_READ | PROT_WRITE,
+      MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
+      -1, 0);
+  if (p == (void*)-1)
     Report("ERROR: Failed to allocate 0x%zx (%zd) bytes at address %p (%d)\n",
            size, size, fixed_addr, errno);
   return p;

Modified: compiler-rt/trunk/lib/tsan/go/test.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/test.c?rev=167466&r1=167465&r2=167466&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/go/test.c (original)
+++ compiler-rt/trunk/lib/tsan/go/test.c Tue Nov  6 10:48:46 2012
@@ -36,7 +36,7 @@
 
 int main(void) {
   __tsan_init();
-  __tsan_map_shadow((unsigned long)buf & ~(4096-1), 4096);
+  __tsan_map_shadow(buf, sizeof(buf));
   __tsan_func_enter(0, &main);
   __tsan_malloc(0, buf, 10, 0);
   __tsan_release(0, buf);

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc?rev=167466&r1=167465&r2=167466&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc Tue Nov  6 10:48:46 2012
@@ -162,15 +162,7 @@
 }
 
 void MapShadow(uptr addr, uptr size) {
-  uptr saddr = MemToShadow(addr);
-  uptr ssize = size * kShadowMultiplier;
-  void *p = MmapFixedNoReserve(saddr, ssize);
-  if ((uptr)p != saddr) {
-    Printf("FATAL: ThreadSanitizer failed to mmap shadow memory"
-        " %p(%p) -> %p(%p) = %p\n",
-        addr, size, saddr, ssize, p);
-    Die();
-  }
+  MmapFixedNoReserve(MemToShadow(addr), size * kShadowMultiplier);
 }
 
 void Initialize(ThreadState *thr) {





More information about the llvm-commits mailing list