AArch64 GCS (Guarded Control Stack) is similar enough to CET that we can re-use the existing code that is guarded by _LIBUNWIND_USE_CET, so long as we also add defines to locate the GCS stack and pop the entries from it. We also need the jumpto function to exit using br instead of ret, to prevent it from popping the GCS stack. GCS support is enabled using the LIBUNWIND_ENABLE_GCS cmake option. This enables -mbranch-protection=standard, which enables GCS. For the places we need to use GCS instructions we use the target attribute, as there's not a command-line option to enable a specific architecture extension. (cherry picked from commit b32aac4358c1f6639de7c453656cd74fbab75d71)
52 lines
1.7 KiB
CMake
52 lines
1.7 KiB
CMake
include(AddLLVM) # for add_lit_testsuite
|
|
include(HandleLitArguments)
|
|
macro(pythonize_bool var)
|
|
if (${var})
|
|
set(${var} True)
|
|
else()
|
|
set(${var} False)
|
|
endif()
|
|
endmacro()
|
|
|
|
pythonize_bool(LIBUNWIND_ENABLE_CET)
|
|
pythonize_bool(LIBUNWIND_ENABLE_GCS)
|
|
pythonize_bool(LIBUNWIND_ENABLE_THREADS)
|
|
pythonize_bool(LIBUNWIND_USES_ARM_EHABI)
|
|
|
|
set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!")
|
|
set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n")
|
|
|
|
serialize_lit_string_param(SERIALIZED_LIT_PARAMS compiler "${CMAKE_CXX_COMPILER}")
|
|
|
|
if (LIBUNWIND_EXECUTOR)
|
|
message(DEPRECATION "LIBUNWIND_EXECUTOR is deprecated, please add executor=... to LIBUNWIND_TEST_PARAMS")
|
|
serialize_lit_string_param(SERIALIZED_LIT_PARAMS executor "${LIBUNWIND_EXECUTOR}")
|
|
endif()
|
|
|
|
serialize_lit_param(SERIALIZED_LIT_PARAMS enable_experimental False)
|
|
|
|
if (LLVM_USE_SANITIZER)
|
|
serialize_lit_string_param(SERIALIZED_LIT_PARAMS use_sanitizer "${LLVM_USE_SANITIZER}")
|
|
endif()
|
|
|
|
if (CMAKE_CXX_COMPILER_TARGET)
|
|
serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${CMAKE_CXX_COMPILER_TARGET}")
|
|
else()
|
|
serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${LLVM_DEFAULT_TARGET_TRIPLE}")
|
|
endif()
|
|
|
|
serialize_lit_params_list(SERIALIZED_LIT_PARAMS LIBUNWIND_TEST_PARAMS)
|
|
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/cmake-bridge.cfg.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake-bridge.cfg"
|
|
@ONLY)
|
|
|
|
configure_lit_site_cfg(
|
|
"${LIBUNWIND_TEST_CONFIG}"
|
|
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
|
|
MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py")
|
|
|
|
add_lit_testsuite(check-unwind "Running libunwind tests"
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS unwind)
|