[PATCH] D24768: [compiler-rt] Fix Asan build on Android
Etienne Bergeron via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 20 08:37:21 PDT 2016
etienneb created this revision.
etienneb added a reviewer: rnk.
etienneb added subscribers: chrisha, llvm-commits.
Herald added subscribers: dberris, kubabrecka, danalbert, tberghammer.
The dynamic shadow code is not detected correctly on Android.
The android shadow seems to start at address zero.
The bug is introduced here:
https://reviews.llvm.org/D23363
Started here: https://build.chromium.org/p/chromium.fyi/builders/ClangToTAndroidASan/builds/4029
Likely due to an asan runtime change, filed https://llvm.org/bugs/show_bug.cgi?id=30462
From asan_mapping.h:
=====================================
#if SANITIZER_WORDSIZE == 32
# if SANITIZER_ANDROID
# define SHADOW_OFFSET (0) <<---- HERE
# elif defined(__mips__)
Shadow address on android is 0.
From asan_rtl.c:
=====================================
if (shadow_start == 0) {
[...]
shadow_start = FindAvailableMemoryRange(space_size, alignment, granularity);
}
We assumed that 0 is dynamic address.
On windows, the address was determined with:
# elif SANITIZER_WINDOWS64
# define SHADOW_OFFSET __asan_shadow_memory_dynamic_address
# else
and __asan_shadow_memory_dynamic_address is initially zero.
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
@@ -463,16 +463,17 @@
__asan_shadow_memory_dynamic_address = 0;
uptr shadow_start = kLowShadowBeg;
- if (shadow_start == 0) {
- uptr granularity = GetMmapGranularity();
- uptr alignment = 8 * granularity;
- uptr left_padding = granularity;
- uptr space_size = kHighShadowEnd + left_padding;
-
- shadow_start = FindAvailableMemoryRange(space_size, alignment, granularity);
- CHECK_NE((uptr)0, shadow_start);
- CHECK(IsAligned(shadow_start, alignment));
- }
+#if ASAN_DYNAMIC_SHADOW_ADDRESS
+ CHECK_EQ(0, shadow_start);
+ uptr granularity = GetMmapGranularity();
+ uptr alignment = 8 * granularity;
+ uptr left_padding = granularity;
+ uptr space_size = kHighShadowEnd + left_padding;
+
+ shadow_start = FindAvailableMemoryRange(space_size, alignment, granularity);
+ CHECK_NE((uptr)0, shadow_start);
+ CHECK(IsAligned(shadow_start, alignment));
+#endif
__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
@@ -183,6 +183,7 @@
# define SHADOW_OFFSET kMIPS64_ShadowOffset64
# elif SANITIZER_WINDOWS64
# define SHADOW_OFFSET __asan_shadow_memory_dynamic_address
+# define ASAN_DYNAMIC_SHADOW_ADDRESS 1
# else
# define SHADOW_OFFSET kDefaultShort64bitShadowOffset
# endif
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24768.71942.patch
Type: text/x-patch
Size: 1551 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160920/fa039ed8/attachment.bin>
More information about the llvm-commits
mailing list