[compiler-rt] r243688 - [dfsan] Enable dfsan for aarch64

Adhemerval Zanella adhemerval.zanella at linaro.org
Thu Jul 30 14:13:22 PDT 2015


Author: azanella
Date: Thu Jul 30 16:13:21 2015
New Revision: 243688

URL: http://llvm.org/viewvc/llvm-project?rev=243688&view=rev
Log:
[dfsan] Enable dfsan for aarch64

This patch enable DFSan for AArch64 (39-bit VMA).  All tests are passing
but:

 * test/dfsan/custom.cc

Due an invalid access in dl_iterate_phdr instrumentation (commenting out
this function make the testcase to pass).  The test is XFAIL for aarch64
for now.


Modified:
    compiler-rt/trunk/cmake/config-ix.cmake
    compiler-rt/trunk/lib/dfsan/dfsan.cc
    compiler-rt/trunk/lib/dfsan/dfsan.h
    compiler-rt/trunk/test/dfsan/custom.cc

Modified: compiler-rt/trunk/cmake/config-ix.cmake
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/config-ix.cmake?rev=243688&r1=243687&r2=243688&view=diff
==============================================================================
--- compiler-rt/trunk/cmake/config-ix.cmake (original)
+++ compiler-rt/trunk/cmake/config-ix.cmake Thu Jul 30 16:13:21 2015
@@ -258,7 +258,7 @@ filter_available_targets(ASAN_SUPPORTED_
 if(ANDROID)
   filter_available_targets(ASAN_SUPPORTED_ARCH aarch64)
 endif()
-filter_available_targets(DFSAN_SUPPORTED_ARCH x86_64 mips64 mips64el)
+filter_available_targets(DFSAN_SUPPORTED_ARCH x86_64 mips64 mips64el aarch64)
 filter_available_targets(LSAN_SUPPORTED_ARCH x86_64 mips64 mips64el)
 filter_available_targets(MSAN_SUPPORTED_ARCH x86_64 mips64 mips64el)
 filter_available_targets(PROFILE_SUPPORTED_ARCH x86_64 i386 i686 arm mips mips64

Modified: compiler-rt/trunk/lib/dfsan/dfsan.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/dfsan/dfsan.cc?rev=243688&r1=243687&r2=243688&view=diff
==============================================================================
--- compiler-rt/trunk/lib/dfsan/dfsan.cc (original)
+++ compiler-rt/trunk/lib/dfsan/dfsan.cc Thu Jul 30 16:13:21 2015
@@ -80,6 +80,22 @@ SANITIZER_INTERFACE_ATTRIBUTE THREADLOCA
 // | reserved by kernel |
 // +--------------------+ 0x0000000000
 
+// On Linux/AArch64 (39-bit VMA), memory is laid out as follow:
+//
+// +--------------------+ 0x8000000000 (top of memory)
+// | application memory |
+// +--------------------+ 0x7000008000 (kAppAddr)
+// |                    |
+// |       unused       |
+// |                    |
+// +--------------------+ 0x1200000000 (kUnusedAddr)
+// |    union table     |
+// +--------------------+ 0x1000000000 (kUnionTableAddr)
+// |   shadow memory    |
+// +--------------------+ 0x0000010000 (kShadowAddr)
+// | reserved by kernel |
+// +--------------------+ 0x0000000000
+
 typedef atomic_dfsan_label dfsan_union_table_t[kNumLabels][kNumLabels];
 
 #if defined(__x86_64__)
@@ -92,6 +108,11 @@ static const uptr kShadowAddr = 0x10000;
 static const uptr kUnionTableAddr = 0x2000000000;
 static const uptr kUnusedAddr = kUnionTableAddr + sizeof(dfsan_union_table_t);
 static const uptr kAppAddr = 0xF000008000;
+#elif defined(__aarch64__)
+static const uptr kShadowAddr = 0x10000;
+static const uptr kUnionTableAddr = 0x1000000000;
+static const uptr kUnusedAddr = kUnionTableAddr + sizeof(dfsan_union_table_t);
+static const uptr kAppAddr = 0x7000008000;
 #else
 # error "DFSan not supported for this platform!"
 #endif

Modified: compiler-rt/trunk/lib/dfsan/dfsan.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/dfsan/dfsan.h?rev=243688&r1=243687&r2=243688&view=diff
==============================================================================
--- compiler-rt/trunk/lib/dfsan/dfsan.h (original)
+++ compiler-rt/trunk/lib/dfsan/dfsan.h Thu Jul 30 16:13:21 2015
@@ -48,6 +48,8 @@ inline dfsan_label *shadow_for(void *ptr
   return (dfsan_label *) ((((uptr) ptr) & ~0x700000000000) << 1);
 #elif defined(__mips64)
   return (dfsan_label *) ((((uptr) ptr) & ~0xF000000000) << 1);
+#elif defined(__aarch64__)
+  return (dfsan_label *) ((((uptr) ptr) & ~0x7800000000) << 1);
 #endif
 }
 

Modified: compiler-rt/trunk/test/dfsan/custom.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/dfsan/custom.cc?rev=243688&r1=243687&r2=243688&view=diff
==============================================================================
--- compiler-rt/trunk/test/dfsan/custom.cc (original)
+++ compiler-rt/trunk/test/dfsan/custom.cc Thu Jul 30 16:13:21 2015
@@ -5,6 +5,9 @@
 
 // Tests custom implementations of various glibc functions.
 
+// AArch64 segfaults in the dl_iterate_phdr test.
+// XFAIL: aarch64
+
 #include <sanitizer/dfsan_interface.h>
 
 #include <arpa/inet.h>





More information about the llvm-commits mailing list