From fa7f48480d5f954ef590b92da1b8544b9ff95705 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Fri, 21 Apr 2017 18:11:23 +0000 Subject: [cfi] Run tests with and without lld and thinlto. Run tests in all configurations: (standalone, with devirtualization) * (gold, lld) * (lto, thinlto) git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@301016 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/asan/TestCases/Windows/fuse-lld.cc | 2 +- test/cfi/CMakeLists.txt | 62 +++++++++++++++++++++++++-------- test/cfi/cross-dso/icall/lit.local.cfg | 3 ++ test/cfi/cross-dso/stats.cpp | 4 +++ test/cfi/icall/lit.local.cfg | 3 ++ test/cfi/lit.cfg | 4 +-- test/cfi/lit.site.cfg.in | 3 ++ test/lit.common.cfg | 16 ++++++++- test/lit.common.configured.in | 2 ++ test/safestack/lit.cfg | 2 +- 10 files changed, 81 insertions(+), 20 deletions(-) diff --git a/test/asan/TestCases/Windows/fuse-lld.cc b/test/asan/TestCases/Windows/fuse-lld.cc index 7fa5d4e8a..c20e5ff6c 100644 --- a/test/asan/TestCases/Windows/fuse-lld.cc +++ b/test/asan/TestCases/Windows/fuse-lld.cc @@ -1,6 +1,6 @@ // If we have LLD, see that things more or less work. // -// REQUIRES: lld +// REQUIRES: lld-available // // FIXME: Use -fuse-ld=lld after the old COFF linker is removed. // FIXME: Test will fail until we add flags for requesting dwarf or cv. diff --git a/test/cfi/CMakeLists.txt b/test/cfi/CMakeLists.txt index c3123a820..17266e5c0 100644 --- a/test/cfi/CMakeLists.txt +++ b/test/cfi/CMakeLists.txt @@ -1,14 +1,48 @@ -set(CFI_LIT_TEST_MODE Standalone) -configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/Standalone/lit.site.cfg - ) +set(CFI_TESTSUITES) -set(CFI_LIT_TEST_MODE Devirt) -configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/Devirt/lit.site.cfg - ) +macro (add_cfi_test_suites lld thinlto) + set(suffix) + if (${lld}) + set(suffix ${suffix}-lld) + endif() + if (${thinlto}) + set(suffix ${suffix}-thinlto) + endif() + + set(CFI_TEST_USE_LLD ${lld}) + set(CFI_TEST_USE_THINLTO ${thinlto}) + + set(CFI_LIT_TEST_MODE Standalone) + set(CFI_TEST_CONFIG_SUFFIX -standalone${suffix}) + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/Standalone${suffix}/lit.site.cfg + ) + list(APPEND CFI_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/Standalone${suffix}) + + set(CFI_LIT_TEST_MODE Devirt) + set(CFI_TEST_CONFIG_SUFFIX -devirt${suffix}) + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/Devirt${suffix}/lit.site.cfg + ) + list(APPEND CFI_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/Devirt${suffix}) +endmacro() + +if (APPLE) + add_cfi_test_suites(False False) + add_cfi_test_suites(False True) +elif (WINDOWS) + add_cfi_test_suites(True False) + add_cfi_test_suites(True True) +else() + add_cfi_test_suites(False False) + add_cfi_test_suites(False True) + if (COMPILER_RT_HAS_LLD) + add_cfi_test_suites(True False) + add_cfi_test_suites(True True) + endif() +endif() set(CFI_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS}) list(APPEND CFI_TEST_DEPS @@ -34,7 +68,7 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) LTO ) endif() - if(WIN32 AND COMPILER_RT_HAS_LLD) + if(NOT APPLE AND COMPILER_RT_HAS_LLD) list(APPEND CFI_TEST_DEPS lld ) @@ -42,13 +76,11 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) endif() add_lit_testsuite(check-cfi "Running the cfi regression tests" - ${CMAKE_CURRENT_BINARY_DIR}/Standalone - ${CMAKE_CURRENT_BINARY_DIR}/Devirt + ${CFI_TESTSUITES} DEPENDS ${CFI_TEST_DEPS}) add_lit_target(check-cfi-and-supported "Running the cfi regression tests" - ${CMAKE_CURRENT_BINARY_DIR}/Standalone - ${CMAKE_CURRENT_BINARY_DIR}/Devirt + ${CFI_TESTSUITES} PARAMS check_supported=1 DEPENDS ${CFI_TEST_DEPS}) diff --git a/test/cfi/cross-dso/icall/lit.local.cfg b/test/cfi/cross-dso/icall/lit.local.cfg index db08765a2..322b287a6 100644 --- a/test/cfi/cross-dso/icall/lit.local.cfg +++ b/test/cfi/cross-dso/icall/lit.local.cfg @@ -1,3 +1,6 @@ # The cfi-icall checker is only supported on x86 and x86_64 for now. if config.root.host_arch not in ['x86', 'x86_64']: config.unsupported = True + +if config.root.use_thinlto: + config.unsupported = True diff --git a/test/cfi/cross-dso/stats.cpp b/test/cfi/cross-dso/stats.cpp index 6566ea2fc..fb98a50a3 100644 --- a/test/cfi/cross-dso/stats.cpp +++ b/test/cfi/cross-dso/stats.cpp @@ -3,6 +3,10 @@ // RUN: env SANITIZER_STATS_PATH=%t.stats %t // RUN: sanstats %t.stats | FileCheck %s +// CFI-icall is not implemented in thinlto mode => ".cfi" suffixes are missing +// in sanstats output. +// XFAIL: thinlto + struct ABase {}; struct A : ABase { diff --git a/test/cfi/icall/lit.local.cfg b/test/cfi/icall/lit.local.cfg index db08765a2..44891c5e2 100644 --- a/test/cfi/icall/lit.local.cfg +++ b/test/cfi/icall/lit.local.cfg @@ -1,3 +1,6 @@ # The cfi-icall checker is only supported on x86 and x86_64 for now. if config.root.host_arch not in ['x86', 'x86_64']: config.unsupported = True + +if config.use_thinlto: + config.unsupported = True diff --git a/test/cfi/lit.cfg b/test/cfi/lit.cfg index 3c0250632..314ba5ce9 100644 --- a/test/cfi/lit.cfg +++ b/test/cfi/lit.cfg @@ -1,7 +1,7 @@ import lit.formats import os -config.name = 'cfi' +config.name = 'cfi' + config.name_suffix config.suffixes = ['.c', '.cpp', '.test'] config.test_source_root = os.path.dirname(__file__) @@ -10,7 +10,7 @@ clangxx = ' '.join([config.clang] + config.cxx_mode_flags) config.substitutions.append((r"%clang ", ' '.join([config.clang]) + ' ')) config.substitutions.append((r"%clangxx ", clangxx + ' ')) if config.lto_supported: - clang_cfi = ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=cfi ']) + clang_cfi = ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-fsanitize=cfi ']) if config.cfi_lit_test_mode == "Devirt": config.available_features.add('devirt') diff --git a/test/cfi/lit.site.cfg.in b/test/cfi/lit.site.cfg.in index 87e5b51e7..63611f659 100644 --- a/test/cfi/lit.site.cfg.in +++ b/test/cfi/lit.site.cfg.in @@ -1,6 +1,9 @@ @LIT_SITE_CFG_IN_HEADER@ +config.name_suffix = "@CFI_TEST_CONFIG_SUFFIX@" config.cfi_lit_test_mode = "@CFI_LIT_TEST_MODE@" +config.use_lld = @CFI_TEST_USE_LLD@ +config.use_thinlto = @CFI_TEST_USE_THINLTO@ lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg") diff --git a/test/lit.common.cfg b/test/lit.common.cfg index d59d7d668..4b03a5504 100644 --- a/test/lit.common.cfg +++ b/test/lit.common.cfg @@ -129,6 +129,9 @@ if sanitizer_can_use_cxxabi: config.available_features.add('cxxabi') if config.has_lld: + config.available_features.add('lld-available') + +if config.use_lld: config.available_features.add('lld') if config.can_symbolize: @@ -180,6 +183,9 @@ def is_darwin_lto_supported(): return os.path.exists(os.path.join(config.llvm_shlib_dir, 'libLTO.dylib')) def is_linux_lto_supported(): + if config.use_lld: + return True + if not os.path.exists(os.path.join(config.llvm_shlib_dir, 'LLVMgold.so')): return False @@ -202,7 +208,10 @@ if config.host_os == 'Darwin' and is_darwin_lto_supported(): elif config.host_os == 'Linux' and is_linux_lto_supported(): config.lto_supported = True config.lto_launch = [] - config.lto_flags = ["-fuse-ld=gold"] + if config.use_lld: + config.lto_flags = ["-fuse-ld=lld"] + else: + config.lto_flags = ["-fuse-ld=gold"] elif config.host_os == 'Windows' and is_windows_lto_supported(): config.lto_supported = True config.lto_launch = [] @@ -213,6 +222,11 @@ else: if config.lto_supported: config.available_features.add('lto') + if config.use_thinlto: + config.available_features.add('thinlto') + config.lto_flags += ["-flto=thin"] + else: + config.lto_flags += ["-flto"] # Ask llvm-config about assertion mode. try: diff --git a/test/lit.common.configured.in b/test/lit.common.configured.in index 387f4d4a7..0ad03a180 100644 --- a/test/lit.common.configured.in +++ b/test/lit.common.configured.in @@ -28,6 +28,8 @@ set_default("emulator", "@COMPILER_RT_EMULATOR@") set_default("sanitizer_can_use_cxxabi", @SANITIZER_CAN_USE_CXXABI_PYBOOL@) set_default("has_lld", @COMPILER_RT_HAS_LLD_PYBOOL@) set_default("can_symbolize", @CAN_SYMBOLIZE@) +set_default("use_lld", False) +set_default("use_thinlto", False) config.available_features.add('target-is-%s' % config.target_arch) # LLVM tools dir can be passed in lit parameters, so try to diff --git a/test/safestack/lit.cfg b/test/safestack/lit.cfg index d4ec73ce7..fb5672936 100644 --- a/test/safestack/lit.cfg +++ b/test/safestack/lit.cfg @@ -16,7 +16,7 @@ config.substitutions.append( ("%clang_nosafestack ", config.clang + " -O0 -fno-s config.substitutions.append( ("%clang_safestack ", config.clang + " -O0 -fsanitize=safe-stack ") ) if config.lto_supported: - config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=safe-stack ']))) + config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-fsanitize=safe-stack ']))) # SafeStack tests are currently supported on Linux, FreeBSD and Darwin only. if config.host_os not in ['Linux', 'FreeBSD', 'Darwin']: -- cgit v1.2.3