diff --git a/CMakeLists.txt b/CMakeLists.txt index 27a7c471d5..931ef0be00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,6 +193,13 @@ if (SANITIZE_ADDRESS) # wrong in the pthread library, or something subtly wrong in this CMakeLists.txt. Use Ubuntu 20.04 instead. endif () +add_boolean_option(SANITIZE_THREAD False "enable the address sanitizer (TSan)" ON) +if (SANITIZE_THREAD) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer -fno-common") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer -fno-common") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread") +endif() + add_boolean_option(SANITIZE_UNDEFINED False "enable the undefined behavior sanitizer (UBSan)" ON) if (SANITIZE_UNDEFINED) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all") diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 8de83f473d..819017fedb 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -158,6 +158,8 @@ Options: Enable the memory sanitizer on all targets. Requires clang, and is incompatible with ASan/UBSan. To build, issue: CC=/usr/bin/clang CXX=/usr/bin/clang++ ./build_oai ... --sanitize-memory +--sanitize-thread | -fsanitize=thread + Enable the thread sanitizer on all targets -h | --help Print this help" } @@ -416,6 +418,9 @@ function main() { CMAKE_CMD="$CMAKE_CMD -DTRACE_ASN1C_ENC_DEC=ON" echo_info "Enabling asn1c internal traces via OAI logging system" shift 1;; + --sanitize-thread | -fthread=address) + CMAKE_CMD="$CMAKE_CMD -DSANITIZE_THREAD=True" + shift;; -h | --help) print_help exit 1;;