diff --git a/CMakeLists.txt b/CMakeLists.txt index aa5f6e7621..a18f82a19d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,10 +121,30 @@ if ( NOT BINARY_PACKAGING_MODE ) _make_install_dir_symlink("${CMAKE_INSTALL_PREFIX}/lib/bro" "${CMAKE_INSTALL_PREFIX}/lib/zeek") endif () -if ( SANITIZERS ) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${SANITIZERS} -fno-omit-frame-pointer") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${SANITIZERS} -fno-omit-frame-pointer") - set(CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -fsanitize=${SANITIZERS} -fno-omit-frame-pointer") +if ( ZEEK_SANITIZERS ) + # Check the thread library info early as setting compiler flags seems to + # interfere with the detection and cause CMAKE_THREAD_LIBS_INIT to not + # include -lpthread when it should. + find_package(Threads) + set(_sanitizer_flags "-fsanitize=${ZEEK_SANITIZERS}") + set(_sanitizer_flags "${_sanitizer_flags} -fno-omit-frame-pointer") + set(_sanitizer_flags "${_sanitizer_flags} -fno-optimize-sibling-calls") + + if ( NOT DEFINED ENV{NO_OPTIMIZATIONS} ) + # Using -O1 is generally the suggestion to get more reasonable + # performance. The one downside is it that the compiler may optimize out + # code that otherwise generates an error/leak in a -O0 build, but that + # should be rare and users mostly will not be running unoptimized builds + # in production anyway. + set(_sanitizer_flags "${_sanitizer_flags} -O1") + endif () + + # Technically, the we also need to use the compiler to drive linking and + # give the sanitizer flags there, too. However, CMake, by default, uses + # the compiler for linking and so the automatically flags get used. See + # https://cmake.org/pipermail/cmake/2014-August/058268.html + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_sanitizer_flags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_sanitizer_flags}") endif() ######################################################################## @@ -205,6 +225,10 @@ if ( BROKER_ROOT_DIR ) set(zeekdeps ${zeekdeps} ${BROKER_LIBRARY}) set(broker_includes ${BROKER_INCLUDE_DIR}) else () + if ( ZEEK_SANITIZERS ) + set(BROKER_SANITIZERS ${ZEEK_SANITIZERS}) + endif () + set(ENABLE_STATIC_ONLY_SAVED ${ENABLE_STATIC_ONLY}) if ( BUILD_STATIC_BROKER ) diff --git a/aux/bifcl b/aux/bifcl index e5b1940850..9cc1f0dfcd 160000 --- a/aux/bifcl +++ b/aux/bifcl @@ -1 +1 @@ -Subproject commit e5b1940850d486e3989f6a55615140a16bd1b9d2 +Subproject commit 9cc1f0dfcd7c9d7c7a4031d45732268e0d68206f diff --git a/aux/binpac b/aux/binpac index c02d6ff7be..71f815a220 160000 --- a/aux/binpac +++ b/aux/binpac @@ -1 +1 @@ -Subproject commit c02d6ff7be6bcee097d668f4f667f83c82a28cc6 +Subproject commit 71f815a22027bef47fa46459a1010013bd4f59e3 diff --git a/aux/broker b/aux/broker index 237c3cd2d8..5156ba056e 160000 --- a/aux/broker +++ b/aux/broker @@ -1 +1 @@ -Subproject commit 237c3cd2d87d467a5b9ac0517c6461ac00c7b85c +Subproject commit 5156ba056e1747b31466a29898564065d20d30a1 diff --git a/configure b/configure index 8b4b421753..cd6fd4b025 100755 --- a/configure +++ b/configure @@ -27,6 +27,7 @@ Usage: $0 [OPTION]... [VAR=VALUE]... ccache installation and CMake 3.10+) --toolchain=PATH path to a CMAKE_TOOLCHAIN_FILE (useful for cross-compiling) + --sanitizers=LIST comma-separated list of sanitizer names to enable Installation Directories: --prefix=PREFIX installation directory [/usr/local/zeek] @@ -57,7 +58,6 @@ Usage: $0 [OPTION]... [VAR=VALUE]... --disable-auxtools don't build or install auxiliary tools --disable-python don't try to build python bindings for Broker --disable-broker-tests don't try to build Broker unit tests - --sanitizers=SANITIZERS comma-separated list of Clang sanitizers to enable Required Packages in Non-Standard Locations: --with-openssl=PATH path to OpenSSL install root @@ -154,7 +154,7 @@ append_cache_entry INSTALL_AUX_TOOLS BOOL true append_cache_entry INSTALL_ZEEKCTL BOOL true append_cache_entry CPACK_SOURCE_IGNORE_FILES STRING append_cache_entry ENABLE_MOBILE_IPV6 BOOL false -append_cache_entry SANITIZERS STRING "" +append_cache_entry ZEEK_SANITIZERS STRING "" # parse arguments while [ $# -ne 0 ]; do @@ -240,7 +240,7 @@ while [ $# -ne 0 ]; do append_cache_entry ENABLE_PERFTOOLS_DEBUG BOOL true ;; --sanitizers=*) - append_cache_entry SANITIZERS STRING $optarg + append_cache_entry ZEEK_SANITIZERS STRING $optarg ;; --enable-jemalloc) append_cache_entry ENABLE_JEMALLOC BOOL true