[PATCH] D11762: [asan] Enable asan for aarch64

Adhemerval Zanella adhemerval.zanella at linaro.org
Wed Aug 5 06:12:01 PDT 2015


zatrazz created this revision.
zatrazz added reviewers: rengolin, kcc, eugenis, dvyukov.
zatrazz added a subscriber: llvm-commits.
Herald added subscribers: srhines, danalbert, tberghammer, rengolin, aemerson.

This patch enables asan for aarch64/linux.  It marks it as 'unstable-release',
since some tests are failing due either kernel missing support of non-executable
pages in mmap or environment instability (infinite loop in juno reference
boards):

It sets decorate_proc_maps test to require stable-release, since the test expects
the shadow memory to not be executable and the support for aarch64 is only
added recently by Linux (da141706aea52c1a9 - 4.0).  It also XFAIL static_tls test
for aarch64 linker may omit the __tls_get_addr call as a TLS optimization.

http://reviews.llvm.org/D11762

Files:
  cmake/config-ix.cmake
  lib/asan/asan_mapping.h
  lib/sanitizer_common/sanitizer_platform.h
  test/asan/TestCases/Linux/static_tls.cc
  test/asan/lit.cfg
  test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc

Index: test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc
===================================================================
--- test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc
+++ test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc
@@ -1,5 +1,6 @@
 // RUN: %clangxx -g %s -o %t
 // RUN: %tool_options=decorate_proc_maps=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-%tool_name
+// REQUIRES: stable-release
 #include <errno.h>
 #include <fcntl.h>
 #include <pthread.h>
Index: test/asan/lit.cfg
===================================================================
--- test/asan/lit.cfg
+++ test/asan/lit.cfg
@@ -162,7 +162,7 @@
 
 # Allow tests to use REQUIRES=stable-runtime.  For use when you cannot use XFAIL
 # because the test hangs.
-if config.target_arch != 'arm':
+if config.target_arch != 'arm' or config.target_arch != 'aarch64':
   config.available_features.add('stable-runtime')
 
 # Turn on leak detection on 64-bit Linux.
Index: test/asan/TestCases/Linux/static_tls.cc
===================================================================
--- test/asan/TestCases/Linux/static_tls.cc
+++ test/asan/TestCases/Linux/static_tls.cc
@@ -9,7 +9,7 @@
 // CHECK: __tls_get_addr: static tls
 // CHECK: after
 
-// XFAIL: powerpc64
+// XFAIL: powerpc64, aarch64
 
 #ifndef SHARED
 #include <stdio.h>
Index: lib/sanitizer_common/sanitizer_platform.h
===================================================================
--- lib/sanitizer_common/sanitizer_platform.h
+++ lib/sanitizer_common/sanitizer_platform.h
@@ -130,7 +130,7 @@
 #define SANITIZER_USES_UID16_SYSCALLS 0
 #endif
 
-#ifdef __mips__
+#if defined(__mips__) || defined(__aarch64__)
 # define SANITIZER_POINTER_FORMAT_LENGTH FIRST_32_SECOND_64(8, 10)
 #else
 # define SANITIZER_POINTER_FORMAT_LENGTH FIRST_32_SECOND_64(8, 12)
Index: lib/asan/asan_mapping.h
===================================================================
--- lib/asan/asan_mapping.h
+++ lib/asan/asan_mapping.h
@@ -73,6 +73,13 @@
 // || `[0x2000000000, 0x23ffffffff]` || LowShadow  ||
 // || `[0x0000000000, 0x1fffffffff]` || LowMem     ||
 //
+// Default Linux/AArch64 (39-bit VMA) mapping:
+// || `[0x2000000000, 0x7fffffffff]` || highmem    ||
+// || `[0x1400000000, 0x1fffffffff]` || highshadow ||
+// || `[0x1200000000, 0x13ffffffff]` || shadowgap  ||
+// || `[0x1000000000, 0x11ffffffff]` || lowshadow  ||
+// || `[0x0000000000, 0x0fffffffff]` || lowmem     ||
+//
 // Shadow mapping on FreeBSD/x86-64 with SHADOW_OFFSET == 0x400000000000:
 // || `[0x500000000000, 0x7fffffffffff]` || HighMem    ||
 // || `[0x4a0000000000, 0x4fffffffffff]` || HighShadow ||
Index: cmake/config-ix.cmake
===================================================================
--- cmake/config-ix.cmake
+++ cmake/config-ix.cmake
@@ -254,10 +254,7 @@
 filter_available_targets(UBSAN_COMMON_SUPPORTED_ARCH
   ${SANITIZER_COMMON_SUPPORTED_ARCH})
 filter_available_targets(ASAN_SUPPORTED_ARCH
-  x86_64 i386 i686 powerpc64 powerpc64le arm mips mipsel mips64 mips64el)
-if(ANDROID)
-  filter_available_targets(ASAN_SUPPORTED_ARCH aarch64)
-endif()
+  x86_64 i386 i686 powerpc64 powerpc64le arm mips mipsel mips64 mips64el aarch64)
 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)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11762.31345.patch
Type: text/x-patch
Size: 3394 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150805/f6e675cf/attachment.bin>


More information about the llvm-commits mailing list