[compiler-rt] [safestack] Support multilib testing (PR #98002)
Rainer Orth via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 8 01:41:47 PDT 2024
https://github.com/rorth created https://github.com/llvm/llvm-project/pull/98002
While working on my safestack patches, I noticed that only the default multilib was tested even though all multilib versions of `libclang_rt.safestack.a` were built.
This patch fixes this, patterned after the ubsan testing support.
Tested on `amd64-pc-solaris2.11` (`amd64` and `i386`), `sparcv9-sun-solaris2.11` (`sparcv9` and `sparc`), `x86_64-pc-linux-gnu` (`x86_64` and `i386`), and `sparc64-unknown-linux-gnu` (`sparcv9`).
Linux/i386 testing requires the patch switching safestack to `sanitizer_common` functions, otherwise all tests `FAIL`.
Linux/sparc testing doesn't work (only 64-bit) since `clang` doesn't find the 32-bit runtime.
>From 1be593b867e23162f8dfe393dfc7da7694b4c8ca Mon Sep 17 00:00:00 2001
From: Rainer Orth <ro at gcc.gnu.org>
Date: Mon, 8 Jul 2024 10:39:34 +0200
Subject: [PATCH] [safestack] Support multilib testing
While working on my safestack patches, I noticed that only the default
multilib was tested even though all multilib versions of
`libclang_rt.safestack.a` were built.
This patch fixes this, patterned after the ubsan testing support.
Tested on `amd64-pc-solaris2.11` (`amd64` and `i386`),
`sparcv9-sun-solaris2.11` (`sparcv9` and `sparc`), `x86_64-pc-linux-gnu`
(`x86_64` and `i386`), and `sparc64-unknown-linux-gnu` (`sparcv9`).
Linux/i386 testing requires the patch switching safestack to
`sanitizer_common` functions, otherwise all tests `FAIL`.
Linux/sparc testing doesn't work (only 64-bit) since `clang` doesn't find
the 32-bit runtime.
---
compiler-rt/test/safestack/CMakeLists.txt | 47 ++++++++++++-------
compiler-rt/test/safestack/lit.cfg.py | 2 +-
compiler-rt/test/safestack/lit.site.cfg.py.in | 6 +++
3 files changed, 36 insertions(+), 19 deletions(-)
diff --git a/compiler-rt/test/safestack/CMakeLists.txt b/compiler-rt/test/safestack/CMakeLists.txt
index 89ba6e74884b1..fca06024c9856 100644
--- a/compiler-rt/test/safestack/CMakeLists.txt
+++ b/compiler-rt/test/safestack/CMakeLists.txt
@@ -1,29 +1,40 @@
set(SAFESTACK_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(SAFESTACK_LIT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set(SAFESTACK_TESTSUITES)
set(SAFESTACK_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
list(APPEND SAFESTACK_TEST_DEPS safestack)
-if(NOT COMPILER_RT_STANDALONE_BUILD)
- # Some tests require LTO, so add a dependency on the relevant LTO plugin.
- if(LLVM_ENABLE_PIC)
- if(LLVM_BINUTILS_INCDIR)
- list(APPEND SAFESTACK_TEST_DEPS
- LLVMgold
- )
- endif()
- if(APPLE)
- list(APPEND SAFESTACK_TEST_DEPS
- LTO
- )
+
+macro(add_safestack_testsuite test_mode sanitizer arch)
+ set(SAFESTACK_LIT_TEST_MODE "${test_mode}")
+ set(CONFIG_NAME ${SAFESTACK_LIT_TEST_MODE})
+
+ if(NOT COMPILER_RT_STANDALONE_BUILD)
+ # Some tests require LTO, so add a dependency on the relevant LTO plugin.
+ if(LLVM_ENABLE_PIC)
+ if(LLVM_BINUTILS_INCDIR)
+ list(APPEND SAFESTACK_TEST_DEPS LLVMgold)
+ endif()
+ if(APPLE)
+ list(APPEND SAFESTACK_TEST_DEPS LTO)
+ endif()
endif()
endif()
-endif()
+ set(CONFIG_NAME ${CONFIG_NAME}-${arch})
+ 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 SAFESTACK_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
+endmacro()
+
+set(SAFESTACK_TEST_ARCH ${SAFESTACK_SUPPORTED_ARCH})
-configure_lit_site_cfg(
- ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
- ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
- )
+foreach(arch ${SAFESTACK_TEST_ARCH})
+ set(SAFESTACK_TEST_TARGET_ARCH ${arch})
+ get_test_cc_for_arch(${arch} SAFESTACK_TEST_TARGET_CC SAFESTACK_TEST_TARGET_CFLAGS)
+ add_safestack_testsuite("Standalone" safestack ${arch})
+endforeach()
add_lit_testsuite(check-safestack "Running the SafeStack tests"
- ${CMAKE_CURRENT_BINARY_DIR}
+ ${SAFESTACK_TESTSUITES}
DEPENDS ${SAFESTACK_TEST_DEPS})
diff --git a/compiler-rt/test/safestack/lit.cfg.py b/compiler-rt/test/safestack/lit.cfg.py
index aadb8bf0d5c77..c266fe3e7b6bb 100644
--- a/compiler-rt/test/safestack/lit.cfg.py
+++ b/compiler-rt/test/safestack/lit.cfg.py
@@ -3,7 +3,7 @@
import os
# Setup config name.
-config.name = "SafeStack"
+config.name = "SafeStack-" + config.name_suffix
# Setup source root.
config.test_source_root = os.path.dirname(__file__)
diff --git a/compiler-rt/test/safestack/lit.site.cfg.py.in b/compiler-rt/test/safestack/lit.site.cfg.py.in
index 3c8bf41b283b8..ee866bca2bad3 100644
--- a/compiler-rt/test/safestack/lit.site.cfg.py.in
+++ b/compiler-rt/test/safestack/lit.site.cfg.py.in
@@ -1,5 +1,11 @@
@LIT_SITE_CFG_IN_HEADER@
+# Tool-specific config options.
+config.name_suffix = "@CONFIG_NAME@"
+config.safestack_lit_test_mode = "@SAFESTACK_LIT_TEST_MODE@"
+config.target_cflags = "@SAFESTACK_TEST_TARGET_CFLAGS@"
+config.target_arch = "@SAFESTACK_TEST_TARGET_ARCH@"
+
# Load common config for all compiler-rt lit tests.
lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
More information about the llvm-commits
mailing list