2016-02-18 00:38:54 +08:00
|
|
|
# Needed for lit support
|
|
|
|
include(AddLLVM)
|
|
|
|
|
2014-02-14 19:00:07 +08:00
|
|
|
configure_lit_site_cfg(
|
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/lit.common.configured.in
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/lit.common.configured)
|
|
|
|
|
2017-03-10 01:02:16 +08:00
|
|
|
# BlocksRuntime (and most of builtins) testsuites are not yet ported to lit.
|
2014-02-14 19:00:07 +08:00
|
|
|
# add_subdirectory(BlocksRuntime)
|
2014-02-14 19:42:22 +08:00
|
|
|
|
2014-02-19 18:04:29 +08:00
|
|
|
set(SANITIZER_COMMON_LIT_TEST_DEPS)
|
2015-02-20 11:41:07 +08:00
|
|
|
if(COMPILER_RT_STANDALONE_BUILD)
|
|
|
|
add_executable(FileCheck IMPORTED GLOBAL)
|
|
|
|
set_property(TARGET FileCheck PROPERTY IMPORTED_LOCATION ${LLVM_TOOLS_BINARY_DIR}/FileCheck)
|
|
|
|
list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS FileCheck)
|
|
|
|
endif()
|
|
|
|
|
2014-02-18 15:52:40 +08:00
|
|
|
# When ANDROID, we build tests with the host compiler (i.e. CMAKE_C_COMPILER),
|
|
|
|
# and run tests with tools from the host toolchain.
|
2014-02-19 18:04:29 +08:00
|
|
|
if(NOT ANDROID)
|
|
|
|
if(NOT COMPILER_RT_STANDALONE_BUILD)
|
|
|
|
# Use LLVM utils and Clang from the same build tree.
|
|
|
|
list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS
|
2015-12-08 06:43:30 +08:00
|
|
|
clang clang-headers FileCheck count not llvm-config llvm-nm llvm-objdump
|
2016-11-15 01:37:50 +08:00
|
|
|
llvm-readobj llvm-symbolizer compiler-rt-headers sancov)
|
2014-11-22 07:09:51 +08:00
|
|
|
if (COMPILER_RT_HAS_PROFILE)
|
|
|
|
list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS profile)
|
|
|
|
endif()
|
2015-07-03 06:08:38 +08:00
|
|
|
if (WIN32)
|
|
|
|
list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS KillTheDoctor)
|
|
|
|
endif()
|
2014-02-19 18:04:29 +08:00
|
|
|
endif()
|
2016-04-07 07:18:09 +08:00
|
|
|
if(CMAKE_HOST_UNIX)
|
2014-02-18 15:52:40 +08:00
|
|
|
list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS SanitizerLintCheck)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2017-06-27 23:22:56 +08:00
|
|
|
function(compiler_rt_test_runtime runtime)
|
|
|
|
string(TOUPPER ${runtime} runtime_uppercase)
|
|
|
|
if(COMPILER_RT_HAS_${runtime_uppercase})
|
|
|
|
add_subdirectory(${runtime})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(compiler_rt_test_sanitizer sanitizer)
|
|
|
|
string(TOLOWER ${sanitizer} sanitizer_lowercase)
|
|
|
|
list(FIND COMPILER_RT_SANITIZERS_TO_BUILD ${sanitizer_lowercase} result)
|
|
|
|
if(NOT ${result} EQUAL -1)
|
|
|
|
compiler_rt_test_runtime(${sanitizer})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2014-02-14 19:42:22 +08:00
|
|
|
# Run sanitizer tests only if we're sure that clang would produce
|
|
|
|
# working binaries.
|
|
|
|
if(COMPILER_RT_CAN_EXECUTE_TESTS)
|
2017-03-10 01:02:16 +08:00
|
|
|
if(COMPILER_RT_BUILD_BUILTINS)
|
|
|
|
add_subdirectory(builtins)
|
|
|
|
endif()
|
2017-04-26 15:35:36 +08:00
|
|
|
if(COMPILER_RT_BUILD_SANITIZERS)
|
2017-06-27 23:22:56 +08:00
|
|
|
compiler_rt_test_runtime(interception)
|
|
|
|
|
|
|
|
compiler_rt_test_runtime(lsan)
|
|
|
|
compiler_rt_test_runtime(ubsan)
|
|
|
|
compiler_rt_test_runtime(sanitizer_common)
|
|
|
|
|
|
|
|
compiler_rt_test_sanitizer(asan)
|
|
|
|
compiler_rt_test_sanitizer(dfsan)
|
|
|
|
compiler_rt_test_sanitizer(msan)
|
|
|
|
compiler_rt_test_sanitizer(tsan)
|
|
|
|
compiler_rt_test_sanitizer(safestack)
|
|
|
|
compiler_rt_test_sanitizer(cfi)
|
|
|
|
compiler_rt_test_sanitizer(esan)
|
|
|
|
compiler_rt_test_sanitizer(scudo)
|
|
|
|
|
|
|
|
compiler_rt_test_runtime(profile)
|
[sanitizer] Initial implementation of a Hardened Allocator
Summary:
This is an initial implementation of a Hardened Allocator based on Sanitizer Common's CombinedAllocator.
It aims at mitigating heap based vulnerabilities by adding several features to the base allocator, while staying relatively fast.
The following were implemented:
- additional consistency checks on the allocation function parameters and on the heap chunks;
- use of checksum protected chunk header, to detect corruption;
- randomness to the allocator base;
- delayed freelist (quarantine), to mitigate use after free and overall determinism.
Additional mitigations are in the works.
Reviewers: eugenis, aizatsky, pcc, krasin, vitalybuka, glider, dvyukov, kcc
Subscribers: kubabrecka, filcab, llvm-commits
Differential Revision: http://reviews.llvm.org/D20084
llvm-svn: 271968
2016-06-07 09:20:26 +08:00
|
|
|
endif()
|
2017-06-27 23:22:56 +08:00
|
|
|
if(COMPILER_RT_BUILD_XRAY)
|
|
|
|
compiler_rt_test_runtime(xray)
|
2016-08-08 11:10:22 +08:00
|
|
|
endif()
|
2014-02-14 19:42:22 +08:00
|
|
|
endif()
|
2014-02-20 20:36:26 +08:00
|
|
|
|
|
|
|
if(COMPILER_RT_STANDALONE_BUILD)
|
|
|
|
# Now that we've traversed all the directories and know all the lit testsuites,
|
|
|
|
# introduce a rule to run to run all of them.
|
|
|
|
get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES)
|
|
|
|
get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS)
|
2016-08-20 06:17:48 +08:00
|
|
|
add_lit_target(check-compiler-rt
|
2014-02-20 20:36:26 +08:00
|
|
|
"Running all regression tests"
|
|
|
|
${LLVM_LIT_TESTSUITES}
|
|
|
|
DEPENDS ${LLVM_LIT_DEPENDS})
|
2016-08-20 06:17:48 +08:00
|
|
|
if(NOT TARGET check-all)
|
|
|
|
add_custom_target(check-all)
|
|
|
|
endif()
|
2016-09-02 02:26:51 +08:00
|
|
|
add_custom_target(compiler-rt-test-depends DEPENDS ${LLVM_LIT_DEPENDS})
|
2016-08-20 06:17:48 +08:00
|
|
|
add_dependencies(check-all check-compiler-rt)
|
2014-02-20 20:36:26 +08:00
|
|
|
endif()
|