[PATCH] D24768: [compiler-rt] Fix Asan build on Android

Etienne Bergeron via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 21 08:39:03 PDT 2016


etienneb updated this revision to Diff 72053.
etienneb marked an inline comment as done.
etienneb added a comment.

fix without #if


https://reviews.llvm.org/D24768

Files:
  lib/asan/asan_mapping.h
  lib/asan/asan_rtl.cc

Index: lib/asan/asan_rtl.cc
===================================================================
--- lib/asan/asan_rtl.cc
+++ lib/asan/asan_rtl.cc
@@ -416,6 +416,9 @@
   CHECK(!asan_init_is_running && "ASan init calls itself!");
   asan_init_is_running = true;
 
+  // Set the shadow memory address to uninitialized.
+  __asan_shadow_memory_dynamic_address = kDefaultShadowSentinel;
+
   CacheBinaryName();
 
   // Initialize flags. This must be done early, because most of the
@@ -461,9 +464,14 @@
 
   ReplaceSystemMalloc();
 
-  __asan_shadow_memory_dynamic_address = 0;
   uptr shadow_start = kLowShadowBeg;
-  if (shadow_start == 0) {
+  // Detect if a dynamic shadow address must used and find a available location
+  // when necessary.
+  if (shadow_start == kDefaultShadowSentinel) {
+    __asan_shadow_memory_dynamic_address = 0;
+    shadow_start = kLowShadowBeg;
+    CHECK_EQ(0, shadow_start);
+
     uptr granularity = GetMmapGranularity();
     uptr alignment = 8 * granularity;
     uptr left_padding = granularity;
@@ -473,6 +481,7 @@
     CHECK_NE((uptr)0, shadow_start);
     CHECK(IsAligned(shadow_start, alignment));
   }
+  // Update the shadow memory address (potentially) used by instrumentation.
   __asan_shadow_memory_dynamic_address = shadow_start;
 
   if (kLowShadowBeg)
Index: lib/asan/asan_mapping.h
===================================================================
--- lib/asan/asan_mapping.h
+++ lib/asan/asan_mapping.h
@@ -125,6 +125,7 @@
 // || `[0x00000000, 0x2fffffff]` || LowMem     ||
 
 static const u64 kDefaultShadowScale = 3;
+static const u64 kDefaultShadowSentinel = ~(uptr)0;
 static const u64 kDefaultShadowOffset32 = 1ULL << 29;  // 0x20000000
 static const u64 kDefaultShadowOffset64 = 1ULL << 44;
 static const u64 kDefaultShort64bitShadowOffset = 0x7FFF8000;  // < 2G.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24768.72053.patch
Type: text/x-patch
Size: 1821 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160921/6f0eeb79/attachment.bin>


More information about the llvm-commits mailing list