[PATCH] light up UBSan for ARMv7

Greg Fitzgerald gregf at codeaurora.org
Tue May 27 14:29:31 PDT 2014


This fixes the caveats from the last version.  UBSan now only tests in conjunction with ASan if ASan is supported.  All ubsan, sanitizer_common and profile tests now pass on both armv7 and armv8.

ASan for AArch64 is not included because, although the library builds successfully and tests can be run (via qemu), the ASan runtime fails to initialize.

http://reviews.llvm.org/D3794

Files:
  CMakeLists.txt
  lib/lsan/CMakeLists.txt
  test/asan/CMakeLists.txt
  test/ubsan/CMakeLists.txt

Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -221,9 +221,9 @@
     test_target_arch(i386 ${TARGET_32_BIT_CFLAGS})
   elseif("${LLVM_NATIVE_ARCH}" STREQUAL "PowerPC")
     test_target_arch(powerpc64 ${TARGET_64_BIT_CFLAGS})
-  elseif("${LLVM_NATIVE_ARCH}" STREQUAL "ARM")
-    test_target_arch(arm "")
   endif()
+  test_target_arch(arm "-march=armv7-a")
+  test_target_arch(aarch64 "-march=armv8-a")
 endif()
 
 # We support running instrumented tests when we're not cross compiling
@@ -353,14 +353,14 @@
 # Architectures supported by Sanitizer runtimes. Specific sanitizers may
 # support only subset of these (e.g. TSan works on x86_64 only).
 filter_available_targets(SANITIZER_COMMON_SUPPORTED_ARCH
-  x86_64 i386 powerpc64 arm)
-filter_available_targets(ASAN_SUPPORTED_ARCH x86_64 i386 powerpc64)
+  x86_64 i386 powerpc64 arm aarch64)
+filter_available_targets(ASAN_SUPPORTED_ARCH x86_64 i386 powerpc64 arm)
 filter_available_targets(DFSAN_SUPPORTED_ARCH x86_64)
 filter_available_targets(LSAN_SUPPORTED_ARCH x86_64)
 filter_available_targets(MSAN_SUPPORTED_ARCH x86_64)
-filter_available_targets(PROFILE_SUPPORTED_ARCH x86_64 i386 arm)
+filter_available_targets(PROFILE_SUPPORTED_ARCH x86_64 i386 arm aarch64)
 filter_available_targets(TSAN_SUPPORTED_ARCH x86_64)
-filter_available_targets(UBSAN_SUPPORTED_ARCH x86_64 i386)
+filter_available_targets(UBSAN_SUPPORTED_ARCH x86_64 i386 arm aarch64)
 
 add_subdirectory(include)
 
Index: lib/lsan/CMakeLists.txt
===================================================================
--- lib/lsan/CMakeLists.txt
+++ lib/lsan/CMakeLists.txt
@@ -19,7 +19,7 @@
 # The common files need to build on every arch supported by ASan.
 # (Even if they build into dummy object files.)
 filter_available_targets(LSAN_COMMON_SUPPORTED_ARCH
-  x86_64 i386 powerpc64 arm)
+  x86_64 i386 powerpc64 arm aarch64)
 
 add_custom_target(lsan)
 
Index: test/asan/CMakeLists.txt
===================================================================
--- test/asan/CMakeLists.txt
+++ test/asan/CMakeLists.txt
@@ -32,6 +32,21 @@
   list(APPEND ASAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/ARMLinuxConfig)
 endif()
 
+if(CAN_TARGET_aarch64)
+  # This is only true if we are cross-compiling.
+  # Build all tests with host compiler and use host tools.
+  set(ASAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER})
+  set(ASAN_TEST_TARGET_CFLAGS ${COMPILER_RT_TEST_COMPILER_CFLAGS})
+  set(ASAN_TEST_CONFIG_SUFFIX "-aarch64-linux")
+  set(ASAN_TEST_BITS "64")
+  set(ASAN_TEST_DYNAMIC False)
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/AArch64LinuxConfig/lit.site.cfg
+    )
+  list(APPEND ASAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/AArch64LinuxConfig)
+endif()
+
 if(CAN_TARGET_x86_64 OR CAN_TARGET_powerpc64)
   set(ASAN_TEST_CONFIG_SUFFIX "64")
   set(ASAN_TEST_BITS "64")
Index: test/ubsan/CMakeLists.txt
===================================================================
--- test/ubsan/CMakeLists.txt
+++ test/ubsan/CMakeLists.txt
@@ -5,10 +5,12 @@
   ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
   ${CMAKE_CURRENT_BINARY_DIR}/UbsanConfig/lit.site.cfg)
 
-set(UBSAN_LIT_TEST_MODE "AddressSanitizer")
-configure_lit_site_cfg(
-  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
-  ${CMAKE_CURRENT_BINARY_DIR}/AsanConfig/lit.site.cfg)
+if(ASAN_SUPPORTED_ARCH)
+  set(UBSAN_LIT_TEST_MODE "AddressSanitizer")
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/AsanConfig/lit.site.cfg)
+endif()
 
 set(UBSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
 if(NOT COMPILER_RT_STANDALONE_BUILD)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3794.9847.patch
Type: text/x-patch
Size: 3708 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140527/d0f30c3c/attachment.bin>


More information about the llvm-commits mailing list