[asan] Fix shadow mapping on Android/AArch64.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Fri, 17 Jul 2015 23:51:18 +0000 (23:51 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Fri, 17 Jul 2015 23:51:18 +0000 (23:51 +0000)
Instrumentation and the runtime library were in disagreement about
ASan shadow offset on Android/AArch64.

This fixes a large number of existing tests on Android/AArch64.

llvm-svn: 242595

llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

index a98439b..52b2290 100644 (file)
@@ -337,10 +337,12 @@ static ShadowMapping getShadowMapping(Triple &TargetTriple, int LongSize,
 
   ShadowMapping Mapping;
 
-  if (LongSize == 32) {
-    if (IsAndroid)
-      Mapping.Offset = 0;
-    else if (IsMIPS32)
+  if (IsAndroid) {
+    // Android is always PIE, which means that the beginning of the address
+    // space is always available.
+    Mapping.Offset = 0;
+  } else if (LongSize == 32) {
+    if (IsMIPS32)
       Mapping.Offset = kMIPS32_ShadowOffset32;
     else if (IsFreeBSD)
       Mapping.Offset = kFreeBSD_ShadowOffset32;