[llvm-commits] [compiler-rt] r150398 - in /compiler-rt/trunk/lib/asan: asan_internal.h asan_linux.cc asan_mac.cc asan_rtl.cc asan_win.cc

Alexander Potapenko glider at google.com
Mon Feb 13 09:09:40 PST 2012


Author: glider
Date: Mon Feb 13 11:09:40 2012
New Revision: 150398

URL: http://llvm.org/viewvc/llvm-project?rev=150398&view=rev
Log:
Move the non-trivial implementation of AsanShadowRangeIsAvailable to asan_mac.cc
to avoid crashes on Linux and Win.

Modified:
    compiler-rt/trunk/lib/asan/asan_internal.h
    compiler-rt/trunk/lib/asan/asan_linux.cc
    compiler-rt/trunk/lib/asan/asan_mac.cc
    compiler-rt/trunk/lib/asan/asan_rtl.cc
    compiler-rt/trunk/lib/asan/asan_win.cc

Modified: compiler-rt/trunk/lib/asan/asan_internal.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_internal.h?rev=150398&r1=150397&r2=150398&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_internal.h (original)
+++ compiler-rt/trunk/lib/asan/asan_internal.h Mon Feb 13 11:09:40 2012
@@ -125,8 +125,9 @@
 
 void OutOfMemoryMessageAndDie(const char *mem_type, size_t size);
 
-// asan_linux.cc / asan_mac.cc
+// asan_linux.cc / asan_mac.cc / asan_win.cc
 void *AsanDoesNotSupportStaticLinkage();
+bool AsanShadowRangeIsAvailable();
 int AsanOpenReadonly(const char* filename);
 const char *AsanGetEnv(const char *name);
 

Modified: compiler-rt/trunk/lib/asan/asan_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_linux.cc?rev=150398&r1=150397&r2=150398&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_linux.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_linux.cc Mon Feb 13 11:09:40 2012
@@ -43,6 +43,11 @@
   return &_DYNAMIC;  // defined in link.h
 }
 
+bool AsanShadowRangeIsAvailable() {
+  // FIXME: shall we need anything here on Linux?
+  return true;
+}
+
 void GetPcSpBp(void *context, uintptr_t *pc, uintptr_t *sp, uintptr_t *bp) {
 #ifdef ANDROID
   *pc = *sp = *bp = 0;

Modified: compiler-rt/trunk/lib/asan/asan_mac.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=150398&r1=150397&r2=150398&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_mac.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_mac.cc Mon Feb 13 11:09:40 2012
@@ -76,6 +76,42 @@
   return NULL;
 }
 
+inline bool IntervalsAreSeparate(uintptr_t start1, uintptr_t end1,
+                                 uintptr_t start2, uintptr_t end2) {
+  CHECK(start1 <= end1);
+  CHECK(start2 <= end2);
+  if (start1 == start2) {
+    return false;
+  } else {
+    if (start1 < start2) {
+      return (end1 < start2);
+    } else {
+      return (end2 < start1);
+    }
+  }
+  return false;
+}
+
+// FIXME: this is thread-unsafe, but should not cause problems most of the time.
+// When the shadow is mapped only a single thread usually exists (plus maybe
+// several worker threads on Mac, which aren't expected to map big chunks of
+// memory).
+bool AsanShadowRangeIsAvailable() {
+  AsanProcMaps procmaps;
+  uintptr_t start, end;
+  bool available = true;
+  while (procmaps.Next(&start, &end,
+                       /*offset*/NULL, /*filename*/NULL, /*size*/NULL)) {
+    if (!IntervalsAreSeparate(start, end,
+                              kLowShadowBeg - kMmapGranularity,
+                              kHighShadowEnd)) {
+      available = false;
+      break;
+    }
+  }
+  return available;
+}
+
 bool AsanInterceptsSignal(int signum) {
   return (signum == SIGSEGV || signum == SIGBUS) && FLAG_handle_segv;
 }

Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=150398&r1=150397&r2=150398&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Mon Feb 13 11:09:40 2012
@@ -118,42 +118,6 @@
   CHECK(res == (void*)beg && "ReserveShadowMemoryRange failed");
 }
 
-inline bool IntervalsAreSeparate(uintptr_t start1, uintptr_t end1,
-                                 uintptr_t start2, uintptr_t end2) {
-  CHECK(start1 <= end1);
-  CHECK(start2 <= end2);
-  if (start1 == start2) {
-    return false;
-  } else {
-    if (start1 < start2) {
-      return (end1 < start2);
-    } else {
-      return (end2 < start1);
-    }
-  }
-  return false;
-}
-
-// FIXME: this is thread-unsafe, but should not cause problems most of the time.
-// When the shadow is mapped only a single thread usually exists (plus maybe
-// several worker threads on Mac, which aren't expected to map big chunks of
-// memory.
-bool AsanShadowRangeIsAvailable() {
-  AsanProcMaps procmaps;
-  uintptr_t start, end;
-  bool available = true;
-  while (procmaps.Next(&start, &end,
-                       /*offset*/NULL, /*filename*/NULL, /*size*/NULL)) {
-    if (!IntervalsAreSeparate(start, end,
-                              kLowShadowBeg - kMmapGranularity,
-                              kHighShadowEnd)) {
-      available = false;
-      break;
-    }
-  }
-  return available;
-}
-
 // ---------------------- LowLevelAllocator ------------- {{{1
 void *LowLevelAllocator::Allocate(size_t size) {
   CHECK((size & (size - 1)) == 0 && "size must be a power of two");

Modified: compiler-rt/trunk/lib/asan/asan_win.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=150398&r1=150397&r2=150398&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_win.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_win.cc Mon Feb 13 11:09:40 2012
@@ -223,6 +223,11 @@
   return NULL;
 }
 
+bool AsanShadowRangeIsAvailable() {
+  // FIXME: shall we do anything here on Windows?
+  return true;
+}
+
 int AtomicInc(int *a) {
   return InterlockedExchangeAdd((LONG*)a, 1) + 1;
 }





More information about the llvm-commits mailing list