From 77d5ccdc6f460732942c8630c7356e72f48ccf39 Mon Sep 17 00:00:00 2001 From: Leonard Chan Date: Wed, 6 Oct 2021 11:09:29 -0700 Subject: [PATCH] [compiler-rt][test] Add shared_unwind requirement 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 | 1 + compiler-rt/test/lit.common.cfg.py | 3 +++ compiler-rt/test/lit.common.configured.in | 1 + compiler-rt/test/tsan/Linux/check_memcpy.c | 5 +++++ 4 files changed, 10 insertions(+) diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt index 4bbcf9a..aa14cef 100644 --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -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) diff --git a/compiler-rt/test/lit.common.cfg.py b/compiler-rt/test/lit.common.cfg.py index ca9047b..a5ef10f 100644 --- a/compiler-rt/test/lit.common.cfg.py +++ b/compiler-rt/test/lit.common.cfg.py @@ -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') diff --git a/compiler-rt/test/lit.common.configured.in b/compiler-rt/test/lit.common.configured.in index be4501b..42a5b55 100644 --- a/compiler-rt/test/lit.common.configured.in +++ b/compiler-rt/test/lit.common.configured.in @@ -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@) diff --git a/compiler-rt/test/tsan/Linux/check_memcpy.c b/compiler-rt/test/tsan/Linux/check_memcpy.c index 55705ce..26f9961 100644 --- a/compiler-rt/test/tsan/Linux/check_memcpy.c +++ b/compiler-rt/test/tsan/Linux/check_memcpy.c @@ -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 -- 2.7.4