From: Arnaud Giersch Date: Thu, 16 Jan 2020 20:35:55 +0000 (+0100) Subject: Add detection for TSan fiber support. X-Git-Tag: v3.25~92 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/e57d5f78c86b64290e11777801e4f21550754f9a Add detection for TSan fiber support. --- diff --git a/MANIFEST.in b/MANIFEST.in index 013c51230f..4523c60c5a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2722,6 +2722,7 @@ include tools/cmake/test_prog/prog_asan.cpp include tools/cmake/test_prog/prog_makecontext.c include tools/cmake/test_prog/prog_stackgrowth.c include tools/cmake/test_prog/prog_stacksetup.c +include tools/cmake/test_prog/prog_tsan.cpp include tools/doxygen/fig2dev_postprocessor.pl include tools/doxygen/list_routing_models_examples.sh include tools/doxygen/xbt_log_extract_hierarchy.pl diff --git a/src/internal_config.h.in b/src/internal_config.h.in index c87e6ac8f7..ee308f52b1 100644 --- a/src/internal_config.h.in +++ b/src/internal_config.h.in @@ -24,6 +24,7 @@ /* Address Sanitizer */ #cmakedefine01 HAVE_SANITIZER_THREAD +#cmakedefine01 HAVE_SANITIZER_THREAD_FIBER_SUPPORT #cmakedefine01 HAVE_SANITIZER_ADDRESS #cmakedefine01 HAVE_SANITIZER_ADDRESS_FIBER_SUPPORT diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index ce4f338e2d..07af2e2fad 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -1089,6 +1089,7 @@ set(CMAKE_SOURCE_FILES tools/cmake/test_prog/prog_makecontext.c tools/cmake/test_prog/prog_stackgrowth.c tools/cmake/test_prog/prog_stacksetup.c + tools/cmake/test_prog/prog_tsan.cpp tools/cmake/cross-mingw.cmake tools/smpi/generate_smpi_defines.pl tools/stack-cleaner/as diff --git a/tools/cmake/Flags.cmake b/tools/cmake/Flags.cmake index b23c24ede7..7bf32b9e4a 100644 --- a/tools/cmake/Flags.cmake +++ b/tools/cmake/Flags.cmake @@ -228,9 +228,12 @@ if(enable_thread_sanitizer) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer -no-pie") set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -fsanitize=thread -no-pie") - set(HAVE_SANITIZER_THREAD TRUE CACHE INTERNAL "") + try_compile(HAVE_SANITIZER_THREAD ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_tsan.cpp) + try_compile(HAVE_SANITIZER_THREAD_FIBER_SUPPORT ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_tsan.cpp + COMPILE_DEFINITIONS -DCHECK_FIBER_SUPPORT) else() set(HAVE_SANITIZER_THREAD FALSE CACHE INTERNAL "") + set(HAVE_SANITIZER_THREAD_FIBER_SUPPORT FALSE CACHE INTERNAL "") endif() if(enable_undefined_sanitizer) diff --git a/tools/cmake/test_prog/prog_tsan.cpp b/tools/cmake/test_prog/prog_tsan.cpp new file mode 100644 index 0000000000..41ef8badbf --- /dev/null +++ b/tools/cmake/test_prog/prog_tsan.cpp @@ -0,0 +1,27 @@ +/* Copyright (c) 2020. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +/* Check availability of ThreadSanitizer */ + +#if defined(__has_feature) +#define HAS_FEATURE(x) __has_feature(x) +#else +#define HAS_FEATURE(x) 0 +#endif + +#if not HAS_FEATURE(thread_sanitizer) && not defined(__SANITIZE_THREAD__) +#error "TSan feature not found." +#endif + +#if defined(CHECK_FIBER_SUPPORT) +#include +// Verify the existence of the fiber annotation interface, with the expected signature +void* (*create_fiber)(unsigned) = __tsan_create_fiber; +void (*destroy_fiber)(void*) = __tsan_destroy_fiber; +void (*switch_fiber)(void*, unsigned) = __tsan_switch_to_fiber; +#endif + +int main(void) {}