[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