diff --git a/compiler-rt/test/sanitizer_common/CMakeLists.txt b/compiler-rt/test/sanitizer_common/CMakeLists.txt --- a/compiler-rt/test/sanitizer_common/CMakeLists.txt +++ b/compiler-rt/test/sanitizer_common/CMakeLists.txt @@ -7,7 +7,7 @@ # FIXME(dliew): We should switch to COMPILER_RT_SANITIZERS_TO_BUILD instead of # the hard coded `SUPPORTED_TOOLS_INIT` list once we know that the other # sanitizers work. -set(SUPPORTED_TOOLS_INIT asan lsan msan tsan ubsan) +set(SUPPORTED_TOOLS_INIT asan lsan hwasan msan tsan ubsan) set(SUPPORTED_TOOLS) foreach(SANITIZER_TOOL ${SUPPORTED_TOOLS_INIT}) string(TOUPPER ${SANITIZER_TOOL} SANITIZER_TOOL_UPPER) diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/allow_user_segv.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/allow_user_segv.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/allow_user_segv.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/allow_user_segv.cpp @@ -3,6 +3,9 @@ // Fails with debug checks: https://bugs.llvm.org/show_bug.cgi?id=46860 // XFAIL: !compiler-rt-optimized && tsan +// FIXME: Implement. +// XFAIL: hwasan + // RUN: %clangxx -O0 %s -o %t // RUN: %env_tool_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/deepbind.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/deepbind.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/deepbind.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/deepbind.cpp @@ -1,6 +1,9 @@ // RUN: %clangxx %s -o %t && %run not %t 1 2>&1 | FileCheck %s // UNSUPPORTED: lsan,ubsan,android +// FIXME: Implement. +// XFAIL: hwasan + #include #include #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/malloc_usable_size.c b/compiler-rt/test/sanitizer_common/TestCases/Linux/malloc_usable_size.c --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/malloc_usable_size.c +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/malloc_usable_size.c @@ -1,7 +1,10 @@ // RUN: %clang -O2 %s -o %t && %run %t -// Ubsan does not provide allocator. -// UNSUPPORTED: ubsan +// Must not be implemented, no other reason to install interceptors. +// XFAIL: ubsan + +// FIXME: Implement. +// XFAIL: hwasan #include #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/mlock_test.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/mlock_test.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/mlock_test.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/mlock_test.cpp @@ -1,13 +1,24 @@ +// Test that sanitizers suppress mlock. // RUN: %clang %s -o %t && %run %t -// XFAIL: ubsan,lsan + +// No shadow, so no need to disable mlock. +// XFAIL: ubsan, lsan + +// FIXME: Implement. +// XFAIL: hwasan #include #include int main() { +#if defined(__has_feature) +# if __has_feature(hwaddress_sanitizer) + // Don't mlock, it may claim all memory. + abort(); +# endif +#endif assert(0 == mlockall(MCL_CURRENT)); assert(0 == mlock((void *)0x12345, 0x5678)); assert(0 == munlockall()); assert(0 == munlock((void *)0x987, 0x654)); } - diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/dump_registers.cpp b/compiler-rt/test/sanitizer_common/TestCases/Posix/dump_registers.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Posix/dump_registers.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/dump_registers.cpp @@ -4,11 +4,7 @@ // RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-DUMP // // FIXME: Implement. -// UNSUPPORTED: asan -// UNSUPPORTED: lsan -// UNSUPPORTED: msan -// UNSUPPORTED: tsan -// UNSUPPORTED: ubsan +// XFAIL: * #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/mmap_write_exec.cpp b/compiler-rt/test/sanitizer_common/TestCases/Posix/mmap_write_exec.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Posix/mmap_write_exec.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/mmap_write_exec.cpp @@ -7,6 +7,9 @@ // TODO: Fix option on Android, it hangs there for unknown reasons. // XFAIL: android +// FIXME: Implement. +// XFAIL: hwasan + #if defined(__APPLE__) #include #endif diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/print-module-map.cpp b/compiler-rt/test/sanitizer_common/TestCases/Posix/print-module-map.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Posix/print-module-map.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/print-module-map.cpp @@ -18,8 +18,8 @@ // FIXME: Add linux support. // XFAIL: msan && target={{.*linux.*}} -// FIXME: Add lsan support. -// XFAIL: lsan +// FIXME: Implement. +// XFAIL: lsan, hwasan int global; diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/weak_hook_test.cpp b/compiler-rt/test/sanitizer_common/TestCases/Posix/weak_hook_test.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/Posix/weak_hook_test.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/weak_hook_test.cpp @@ -1,10 +1,11 @@ // Test the weak hooks. -// RUN: %clangxx %s -o %t -// RUN: %run %t +// RUN: %clangxx %s -o %t && %run %t -// Hooks are not implemented for lsan. -// XFAIL: lsan -// XFAIL: ubsan +// Must not be implemented, no other reason to install interceptors. +// XFAIL: lsan, ubsan + +// FIXME: Implement. +// XFAIL: hwasan #include #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/get_allocated_begin.cpp b/compiler-rt/test/sanitizer_common/TestCases/get_allocated_begin.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/get_allocated_begin.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/get_allocated_begin.cpp @@ -1,7 +1,10 @@ // RUN: %clangxx -O0 -g %s -o %t && %run %t -// UBSan does not have its own allocator -// UNSUPPORTED: ubsan +// Must not be implemented, no other reason to install interceptors. +// XFAIL: ubsan + +// FIXME: Implement. +// XFAIL: hwasan #include #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/malloc_hook.cpp b/compiler-rt/test/sanitizer_common/TestCases/malloc_hook.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/malloc_hook.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/malloc_hook.cpp @@ -2,8 +2,13 @@ // Malloc/free hooks are not supported on Windows. // XFAIL: target={{.*windows-msvc.*}} + +// Must not be implemented, no other reason to install interceptors. // XFAIL: ubsan +// FIXME: Implement. +// XFAIL: hwasan + #include #include #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/max_allocation_size.cpp b/compiler-rt/test/sanitizer_common/TestCases/max_allocation_size.cpp --- a/compiler-rt/test/sanitizer_common/TestCases/max_allocation_size.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/max_allocation_size.cpp @@ -43,6 +43,9 @@ // win32 is disabled due to failing errno tests. // UNSUPPORTED: ubsan, target={{.*windows-msvc.*}} +// FIXME: Implement. +// XFAIL: hwasan + #include #include #include diff --git a/compiler-rt/test/sanitizer_common/lit.common.cfg.py b/compiler-rt/test/sanitizer_common/lit.common.cfg.py --- a/compiler-rt/test/sanitizer_common/lit.common.cfg.py +++ b/compiler-rt/test/sanitizer_common/lit.common.cfg.py @@ -10,6 +10,11 @@ if config.tool_name == "asan": tool_cflags = ["-fsanitize=address"] tool_options = "ASAN_OPTIONS" +elif config.tool_name == "hwasan": + tool_cflags = ["-fsanitize=hwaddress", "-fuse-ld=lld"] + if config.target_arch == "x86_64": + tool_cflags += ["-fsanitize-hwaddress-experimental-aliasing"] + tool_options = "HWASAN_OPTIONS" elif config.tool_name == "tsan": tool_cflags = ["-fsanitize=thread"] tool_options = "TSAN_OPTIONS"