[compiler-rt][test] Add shared_unwind requirement
authorLeonard Chan <leonardchan@google.com>
Wed, 6 Oct 2021 18:09:29 +0000 (11:09 -0700)
committerLeonard Chan <leonardchan@google.com>
Wed, 6 Oct 2021 18:10:36 +0000 (11:10 -0700)
When using a static libunwind, the check_memcpy.c can fail because it checks
that tsan intercepted all memcpy/memmoves in the final binary. Though if the
static libunwind is not instrumented, then this will fail because it may contain
regular memcpy/memmoves.

This adds a new REQUIRES check for ensuring that this test won't run unless a
dynamic libunwind.so is provided.

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

compiler-rt/CMakeLists.txt
compiler-rt/test/lit.common.cfg.py
compiler-rt/test/lit.common.configured.in
compiler-rt/test/tsan/Linux/check_memcpy.c

index 4bbcf9a..aa14cef 100644 (file)
@@ -233,6 +233,7 @@ endif()
 
 option(SANITIZER_USE_STATIC_LLVM_UNWINDER
   "Use static LLVM unwinder." ${DEFAULT_SANITIZER_USE_STATIC_LLVM_UNWINDER})
+pythonize_bool(SANITIZER_USE_STATIC_LLVM_UNWINDER)
 
 set(DEFAULT_SANITIZER_USE_STATIC_CXX_ABI OFF)
 if (DEFINED LIBCXXABI_ENABLE_SHARED AND NOT LIBCXXABI_ENABLE_SHARED)
index ca9047b..a5ef10f 100644 (file)
@@ -366,6 +366,9 @@ if sanitizer_can_use_cxxabi:
 if not getattr(config, 'sanitizer_uses_static_cxxabi', False):
   config.available_features.add('shared_cxxabi')
 
+if not getattr(config, 'sanitizer_uses_static_unwind', False):
+  config.available_features.add('shared_unwind')
+
 if config.has_lld:
   config.available_features.add('lld-available')
 
index be4501b..42a5b55 100644 (file)
@@ -34,6 +34,7 @@ set_default("apple_platform", "osx")
 set_default("apple_platform_min_deployment_target_flag", "-mmacosx-version-min")
 set_default("sanitizer_can_use_cxxabi", @SANITIZER_CAN_USE_CXXABI_PYBOOL@)
 set_default("sanitizer_uses_static_cxxabi", @SANITIZER_USE_STATIC_CXX_ABI_PYBOOL@)
+set_default("sanitizer_uses_static_unwind", @SANITIZER_USE_STATIC_LLVM_UNWINDER_PYBOOL@)
 set_default("has_lld", @COMPILER_RT_HAS_LLD_PYBOOL@)
 set_default("can_symbolize", @CAN_SYMBOLIZE@)
 set_default("use_lld", @COMPILER_RT_TEST_USE_LLD_PYBOOL@)
index 55705ce..26f9961 100644 (file)
@@ -2,6 +2,11 @@
 // memcpy/memmove calls. It builds the binary with TSan and check's
 // its objdump.
 
+// This could fail if using a static libunwind because that static libunwind
+// could be uninstrumented and contain memcpy/memmove calls not intercepted by
+// tsan.
+// REQUIRES: shared_unwind
+
 // RUN: %clang_tsan -O1 %s -o %t
 // RUN: llvm-objdump -d -l %t | FileCheck %s