[LSAN][HWASAN] Run LSAN tests with HWASAN enabled
authorKirill Stoimenov <kstoimenov@google.com>
Mon, 30 Jan 2023 20:20:55 +0000 (20:20 +0000)
committerKirill Stoimenov <kstoimenov@google.com>
Mon, 30 Jan 2023 22:32:31 +0000 (22:32 +0000)
A lot of tests are disabled by using UNSUPPORTED. The plan is to remove UNSUPPORTED for tests that are fixed.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D142676

36 files changed:
compiler-rt/test/lsan/CMakeLists.txt
compiler-rt/test/lsan/TestCases/Linux/cleanup_in_tsd_destructor.c
compiler-rt/test/lsan/TestCases/Linux/disabler_in_tsd_destructor.c
compiler-rt/test/lsan/TestCases/Linux/fork_threaded.cpp
compiler-rt/test/lsan/TestCases/Linux/guard-page.c
compiler-rt/test/lsan/TestCases/Linux/libdl_deadlock.cpp
compiler-rt/test/lsan/TestCases/Linux/log-path_test.cpp
compiler-rt/test/lsan/TestCases/Linux/use_tls_pthread_specific_dynamic.cpp
compiler-rt/test/lsan/TestCases/Linux/use_tls_pthread_specific_static.cpp
compiler-rt/test/lsan/TestCases/Linux/use_tls_static.cpp
compiler-rt/test/lsan/TestCases/default_options.cpp
compiler-rt/test/lsan/TestCases/disabler.c
compiler-rt/test/lsan/TestCases/do_leak_check_override.cpp
compiler-rt/test/lsan/TestCases/high_allocator_contention.cpp
compiler-rt/test/lsan/TestCases/ignore_object.c
compiler-rt/test/lsan/TestCases/leak_check_at_exit.cpp
compiler-rt/test/lsan/TestCases/link_turned_off.cpp
compiler-rt/test/lsan/TestCases/malloc_zero.c
compiler-rt/test/lsan/TestCases/many_tls_keys_pthread.cpp
compiler-rt/test/lsan/TestCases/many_tls_keys_thread.cpp
compiler-rt/test/lsan/TestCases/pointer_to_self.cpp
compiler-rt/test/lsan/TestCases/realloc_too_big.c
compiler-rt/test/lsan/TestCases/recoverable_leak_check.cpp
compiler-rt/test/lsan/TestCases/register_root_region.cpp
compiler-rt/test/lsan/TestCases/suppressions_default.cpp
compiler-rt/test/lsan/TestCases/suppressions_file.cpp
compiler-rt/test/lsan/TestCases/swapcontext.cpp
compiler-rt/test/lsan/TestCases/use_after_return.cpp
compiler-rt/test/lsan/TestCases/use_globals_initialized.cpp
compiler-rt/test/lsan/TestCases/use_globals_uninitialized.cpp
compiler-rt/test/lsan/TestCases/use_registers.cpp
compiler-rt/test/lsan/TestCases/use_registers_extra.cpp
compiler-rt/test/lsan/TestCases/use_stacks.cpp
compiler-rt/test/lsan/TestCases/use_stacks_threaded.cpp
compiler-rt/test/lsan/TestCases/use_unaligned.cpp
compiler-rt/test/lsan/lit.common.cfg.py

index b309995..3a0296b 100644 (file)
@@ -1,7 +1,7 @@
 set(LSAN_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
 
 set(LSAN_TESTSUITES)
+
 set(LSAN_TEST_ARCH ${LSAN_SUPPORTED_ARCH})
 if(APPLE)
   darwin_filter_host_archs(LSAN_SUPPORTED_ARCH LSAN_TEST_ARCH)
@@ -12,9 +12,9 @@ foreach(arch ${LSAN_TEST_ARCH})
   string(TOLOWER "-${arch}" LSAN_TEST_CONFIG_SUFFIX)
   get_test_cc_for_arch(${arch} LSAN_TEST_TARGET_CC LSAN_TEST_TARGET_CFLAGS)
   string(TOUPPER ${arch} ARCH_UPPER_CASE)
+
   set(LSAN_LIT_TEST_MODE "Standalone")
   set(CONFIG_NAME ${ARCH_UPPER_CASE}LsanConfig)
-
   configure_lit_site_cfg(
     ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
     ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
@@ -22,11 +22,21 @@ foreach(arch ${LSAN_TEST_ARCH})
 
   set(CONFIG_NAME ${ARCH_UPPER_CASE}AsanConfig)
   set(LSAN_LIT_TEST_MODE "AddressSanitizer")
-
   configure_lit_site_cfg(
     ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
     ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
   list(APPEND LSAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
+
+  # Fixme: make this generic 64 bit check once confirmed that at least
+  # ARM64 works.
+  if (arch STREQUAL "x86_64" AND NOT APPLE)
+    set(CONFIG_NAME ${ARCH_UPPER_CASE}HWAsanConfig)
+    set(LSAN_LIT_TEST_MODE "HWAddressSanitizer")
+    configure_lit_site_cfg(
+      ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
+      ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
+    list(APPEND LSAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
+  endif()
 endforeach()
 
 set(LSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
index 00a0ec3..7204aa9 100644 (file)
@@ -1,5 +1,8 @@
 // Regression test for thread lifetime tracking. Thread data should be
 // considered live during the thread's termination, at least until the
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 // user-installed TSD destructors have finished running (since they may contain
 // additional cleanup tasks). LSan doesn't actually meet that goal 100%, but it
 // makes its best effort.
index 6e3a9b3..a590cfb 100644 (file)
@@ -2,6 +2,9 @@
 // RUN: %clang_lsan %s -o %t
 // RUN: %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=0:use_tls=1:use_ld_allocations=0" %run %t
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <assert.h>
 #include <pthread.h>
 #include <stdio.h>
index 62702b4..b80cfee 100644 (file)
@@ -3,6 +3,9 @@
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <assert.h>
 #include <pthread.h>
 #include <stdio.h>
index ba03c1f..dd2a581 100644 (file)
@@ -1,6 +1,9 @@
 // Check that if LSan finds that SP doesn't point into thread stack (e.g.
 // if swapcontext is used), LSan will not hit the guard page.
 // RUN: %clang_lsan %s -o %t && %run %t
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 // Missing 'getcontext' and 'makecontext' on Android.
 // UNSUPPORTED: android
 
index ad7abe2..ddc9d88 100644 (file)
@@ -2,6 +2,9 @@
 // where lsan would call dl_iterate_phdr while holding the allocator lock.
 // RUN: %clangxx_lsan %s -o %t && %run %t
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <link.h>
 #include <mutex>
 #include <stdlib.h>
index e2f59ea..55f3384 100644 (file)
@@ -1,4 +1,7 @@
 // RUN: %clangxx_lsan %s -o %t
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 // The globs below do not work in the lit shell.
 
 // Regular run.
index e75fde2..da4edfd 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // Investigate why it does not fail with use_tls=0
 // UNSUPPORTED: arm-linux || armhf-linux
 
index 20000a5..8685de4 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <assert.h>
 #include <pthread.h>
 #include <stdio.h>
index 0722b88..f3a92e2 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "sanitizer_common/print_address.h"
index b5361c0..11376e7 100644 (file)
@@ -1,5 +1,8 @@
 // RUN: %clangxx_lsan -O2 %s -o %t && %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 extern "C"
 const char *__lsan_default_options() {
   // CHECK: Available flags for {{Leak|Address}}Sanitizer:
index b50b572..fb57ef5 100644 (file)
@@ -2,6 +2,9 @@
 // RUN: %clang_lsan %s -o %t
 // RUN: %env_lsan_opts=report_objects=1:use_registers=0:use_stacks=0:use_tls=0 not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // Investigate why it does not fail with use_tls=0
 // UNSUPPORTED: arm-linux || armhf-linux
 
index 840842a..ba41aaa 100644 (file)
@@ -1,5 +1,8 @@
 // Test for __lsan_do_leak_check(). We test it by making the leak check run
 // before global destructors, which also tests compatibility with HeapChecker's
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 // "normal" mode (LSan runs in "strict" mode by default).
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0 not %run %t 2>&1 | FileCheck --check-prefix=CHECK-strict %s
index e1ee9ce..c3e4c01 100644 (file)
@@ -2,6 +2,9 @@
 // Usage: ./a.out number_of_threads total_number_of_allocations
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts=use_ld_allocations=0 %run %t 5 1000000 2>&1
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 #include <assert.h>
 #include <pthread.h>
 #include <stdlib.h>
index bd329ad..4a78c56 100644 (file)
@@ -2,6 +2,9 @@
 // RUN: %clang_lsan %s -o %t
 // RUN: %env_lsan_opts=report_objects=1:use_registers=0:use_stacks=0:use_tls=0 not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // Investigate why it does not fail with use_stack=0
 // UNSUPPORTED: arm-linux || armhf-linux
 
index e95040b..c00fb5e 100644 (file)
@@ -5,6 +5,9 @@
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0:leak_check_at_exit=0 not %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-do
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0:leak_check_at_exit=0 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <sanitizer/lsan_interface.h>
index d700d7a..7227e0b 100644 (file)
@@ -2,6 +2,9 @@
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0 %run %t
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0 not %run %t foo 2>&1 | FileCheck %s
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 //
 // UNSUPPORTED: darwin
 
index 5c8d185..aadf25b 100644 (file)
@@ -1,6 +1,9 @@
 // RUN: %clang_lsan %s -o %t
 // RUN: %env_lsan_opts=use_stacks=0 not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 /// Fails when only leak sanitizer is enabled
 // UNSUPPORTED: arm-linux, armhf-linux
 
index 37b5f03..86a2839 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // On glibc, this requires the range returned by GetTLS to include
 // specific_1stblock and specific in `struct pthread`.
 // UNSUPPORTED: arm-linux, armhf-linux
index 70f54c0..dac1363 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // Patch r303906 did not fix all the problems.
 // UNSUPPORTED: arm-linux,armhf-linux
 
index efb1fd8..ed8b1e8 100644 (file)
@@ -3,6 +3,9 @@
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=0" not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "sanitizer_common/print_address.h"
index bb13160..4f98309 100644 (file)
@@ -1,6 +1,9 @@
 // RUN: %clang_lsan %s -o %t
 // RUN: %env_lsan_opts=allocator_may_return_null=1:max_allocation_size_mb=1:use_stacks=0 not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 /// Fails when only leak sanitizer is enabled
 // UNSUPPORTED: arm-linux, armhf-linux
 
index b375062..ca0326d 100644 (file)
@@ -2,6 +2,9 @@
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0 %run %t foo 2>&1 | FileCheck %s
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0 %run %t 2>&1 | FileCheck %s
+
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
 //
 // UNSUPPORTED: darwin
 
index 52b8078..9df46ce 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0 not %run %t foo 2>&1 | FileCheck %s
 // RUN: %env_lsan_opts=use_stacks=0:use_registers=0:use_root_regions=0 not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
index 533b3a0..9cc4a98 100644 (file)
@@ -1,6 +1,9 @@
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts=use_registers=0:use_stacks=0 not %run %t 2>&1 | FileCheck %s
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 
index d74bb47..441bb12 100644 (file)
@@ -1,5 +1,8 @@
 // RUN: %clangxx_lsan %s -o %t
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // RUN: rm -f %t.supp
 // RUN: touch %t.supp
 // RUN: %push_to_device %t.supp %device_rundir/%t.supp
index b67f53e..f70b5de 100644 (file)
@@ -1,6 +1,9 @@
 // We can't unwind stack if we're running coroutines on heap-allocated
 // memory. Make sure we don't report these leaks.
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // RUN: %clangxx_lsan %s -o %t
 // RUN: %env_lsan_opts= %run %t 2>&1
 // RUN: %env_lsan_opts= not %run %t foo 2>&1 | FileCheck %s
index b0adb9e..d32621e 100644 (file)
@@ -5,6 +5,9 @@
 // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=1 %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=1" %run %t 2>&1
 // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=1 %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // Investigate why it does not fail with use_stack=0
 // UNSUPPORTED: arm-linux || armhf-linux
 
index fe58a2f..e31bb28 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_globals=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "sanitizer_common/print_address.h"
index 389ef3b..1d8fc61 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_globals=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "sanitizer_common/print_address.h"
index ebea5f0..69ac4b1 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include "sanitizer_common/print_address.h"
 #include <assert.h>
 #include <pthread.h>
index 9308ee9..ffeffc4 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 // FIXME: Support more platforms.
 // REQUIRES: x86-target-arch && linux
 
index f11d7de..fc210f8 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "sanitizer_common/print_address.h"
index 7ddba88..015070f 100644 (file)
@@ -4,6 +4,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=1" %run %t 2>&1
 // RUN: %env_lsan_opts="" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <assert.h>
 #include <pthread.h>
 #include <sched.h>
index 48461aa..743e32d 100644 (file)
@@ -3,6 +3,9 @@
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_unaligned=0" not %run %t 2>&1 | FileCheck %s
 // RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_unaligned=1" %run %t 2>&1
 
+// Fixme: remove once test passes with hwasan
+// UNSUPPORTED: hwasan
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
index 0abd7e8..92f6f6b 100644 (file)
@@ -19,8 +19,9 @@ def get_required_attr(config, attr_name):
 # Setup source root.
 config.test_source_root = os.path.dirname(__file__)
 
-# Choose between standalone and LSan+ASan modes.
+# Choose between standalone and LSan+(ASan|HWAsan) modes.
 lsan_lit_test_mode = get_required_attr(config, 'lsan_lit_test_mode')
+target_arch = getattr(config, 'target_arch', None)
 
 if lsan_lit_test_mode == "Standalone":
   config.name = "LeakSanitizer-Standalone"
@@ -31,6 +32,14 @@ elif lsan_lit_test_mode == "AddressSanitizer":
   config.available_features.add('asan')
   if config.host_os == 'NetBSD':
     config.substitutions.insert(0, ('%run', config.netbsd_noaslr_prefix))
+elif lsan_lit_test_mode == "HWAddressSanitizer":
+  config.name = "LeakSanitizer-HWAddressSanitizer"
+  lsan_cflags = ["-fsanitize=hwaddress"]
+  if target_arch == "x86_64":
+    lsan_cflags = lsan_cflags + [ '-fsanitize-hwaddress-experimental-aliasing']
+  config.available_features.add('hwasan')
+  if config.host_os == 'NetBSD':
+    config.substitutions.insert(0, ('%run', config.netbsd_noaslr_prefix))
 else:
   lit_config.fatal("Unknown LSan test mode: %r" % lsan_lit_test_mode)
 config.name += config.name_suffix
@@ -72,6 +81,9 @@ config.substitutions.append( ("%clang ", build_invocation(clang_cflags)) )
 config.substitutions.append( ("%clangxx ", build_invocation(clang_cxxflags)) )
 config.substitutions.append( ("%clang_lsan ", build_invocation(clang_lsan_cflags)) )
 config.substitutions.append( ("%clangxx_lsan ", build_invocation(clang_lsan_cxxflags)) )
+config.substitutions.append( ("%clang_hwasan ", build_invocation(clang_lsan_cflags)) )
+config.substitutions.append( ("%clangxx_hwasan ", build_invocation(clang_lsan_cxxflags)) )
+
 
 # LeakSanitizer tests are currently supported on
 # Android{aarch64, x86, x86_64}, x86-64 Linux, PowerPC64 Linux, arm Linux, mips64 Linux, s390x Linux, loongarch64 Linux and x86_64 Darwin.