[compiler-rt] r320110 - [PowerPC][asan] Update asan to handle changed memory layouts in newer kernels

Bill Seurer via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 7 14:53:50 PST 2017


Author: seurer
Date: Thu Dec  7 14:53:49 2017
New Revision: 320110

URL: http://llvm.org/viewvc/llvm-project?rev=320110&view=rev
Log:
[PowerPC][asan] Update asan to handle changed memory layouts in newer kernels

In more recent Linux kernels with 47 bit VMAs the layout of virtual memory
for powerpc64 changed causing the address sanitizer to not work properly. This
patch adds support for 47 bit VMA kernels for powerpc64 and fixes up test
cases.

https://reviews.llvm.org/D40908

There is an associated patch for trunk.

Tested on several 4.x and 3.x kernel releases.

Modified:
    compiler-rt/trunk/lib/asan/asan_mapping.h
    compiler-rt/trunk/test/asan/TestCases/debug_ppc64_mapping.cc

Modified: compiler-rt/trunk/lib/asan/asan_mapping.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mapping.h?rev=320110&r1=320109&r2=320110&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_mapping.h (original)
+++ compiler-rt/trunk/lib/asan/asan_mapping.h Thu Dec  7 14:53:49 2017
@@ -148,7 +148,7 @@ static const u64 kIosSimShadowOffset64 =
 static const u64 kAArch64_ShadowOffset64 = 1ULL << 36;
 static const u64 kMIPS32_ShadowOffset32 = 0x0aaa0000;
 static const u64 kMIPS64_ShadowOffset64 = 1ULL << 37;
-static const u64 kPPC64_ShadowOffset64 = 1ULL << 41;
+static const u64 kPPC64_ShadowOffset64 = 1ULL << 44;
 static const u64 kSystemZ_ShadowOffset64 = 1ULL << 52;
 static const u64 kFreeBSD_ShadowOffset32 = 1ULL << 30;  // 0x40000000
 static const u64 kFreeBSD_ShadowOffset64 = 1ULL << 46;  // 0x400000000000

Modified: compiler-rt/trunk/test/asan/TestCases/debug_ppc64_mapping.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/debug_ppc64_mapping.cc?rev=320110&r1=320109&r2=320110&view=diff
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/debug_ppc64_mapping.cc (original)
+++ compiler-rt/trunk/test/asan/TestCases/debug_ppc64_mapping.cc Thu Dec  7 14:53:49 2017
@@ -6,11 +6,11 @@
 #include <stdio.h>
 
 int main() {
-// CHECK-PPC64: || `[{{0x0a0|0x040}}000000000, {{0x3ff|0x0ff}}fffffffff]` || HighMem    ||
-// CHECK-PPC64: || `[{{0x034|0x028}}000000000, {{0x09f|0x03f}}fffffffff]` || HighShadow ||
-// CHECK-PPC64: || `[{{0x024|0x024}}000000000, {{0x033|0x027}}fffffffff]` || ShadowGap  ||
-// CHECK-PPC64: || `[0x020000000000, 0x023fffffffff]`       || LowShadow  ||
-// CHECK-PPC64: || `[0x000000000000, 0x01ffffffffff]`       || LowMem     ||
+// CHECK-PPC64: || `[{{0x180|0x0a0|0x040}}000000000, {{0x3ff|0x0ff}}fffffffff]` || HighMem    ||
+// CHECK-PPC64: || `[{{0x130|0x034|0x028}}000000000, {{0x17f|0x09f|0x03f}}fffffffff]` || HighShadow ||
+// CHECK-PPC64: || `[{{0x120|0x024|0x024}}000000000, {{0x12f|0x033|0x027}}fffffffff]` || ShadowGap  ||
+// CHECK-PPC64: || `[{{0x100|0x020}}000000000, {{0x11f|0x023}}fffffffff]`       || LowShadow  ||
+// CHECK-PPC64: || `[0x000000000000, {{0x0ff|0x01f}}fffffffff]`       || LowMem     ||
 //
   printf("ppc64 eyecatcher \n");
 // CHECK-PPC64-V0: ppc64 eyecatcher
@@ -19,7 +19,14 @@ int main() {
 }
 
 /*
- * Two different signatures noted at the time of writing.
+ * Three different signatures noted.
+Newer kernel: (starting with kernel version 4.?)
+|| `[0x180000000000, 0x3fffffffffff]` || HighMem    ||
+|| `[0x130000000000, 0x17ffffffffff]` || HighShadow ||
+|| `[0x120000000000, 0x12ffffffffff]` || ShadowGap  ||
+|| `[0x100000000000, 0x11ffffffffff]` || LowShadow  ||
+|| `[0x000000000000, 0x0fffffffffff]` || LowMem     ||
+
 Newish kernel: (64TB address range support, starting with kernel version 3.7)
 || `[0x0a0000000000, 0x3fffffffffff]` || HighMem    ||
 || `[0x034000000000, 0x09ffffffffff]` || HighShadow ||




More information about the llvm-commits mailing list