diff --git a/Libraries/LibJS/Tests/run-tests b/Libraries/LibJS/Tests/run-tests index f16e97aac30..fbe8951bb0f 100755 --- a/Libraries/LibJS/Tests/run-tests +++ b/Libraries/LibJS/Tests/run-tests @@ -4,6 +4,9 @@ if [ "`uname`" = "SerenityOS" ]; then js_program=/bin/js else [ -z "$js_program" ] && js_program="$SERENITY_ROOT/Meta/Lagom/build/js" + + # Enable back traces if sanitizers are enabled + export UBSAN_OPTIONS=print_stacktrace=1 fi pass_count=0 diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index f4bd211687d..cc8138b68cb 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -5,6 +5,29 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wextra -Werror -std=c++17 -fP if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wconsumed") + + option(ENABLE_ADDRESS_SANITIZER "Enable address sanitizer testing in gcc/clang" FALSE) + if (ENABLE_ADDRESS_SANITIZER) + add_definitions(-fsanitize=address -fno-omit-frame-pointer) + set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=address") + endif() + + option(ENABLE_MEMORY_SANITIZER "Enable memory sanitizer testing in gcc/clang" FALSE) + if (ENABLE_MEMORY_SANITIZER) + add_definitions(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer) + set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins") + endif() + + option(ENABLE_UNDEFINED_SANITIZER "Enable undefined behavior sanitizer testing in gcc/clang" FALSE) + if (ENABLE_UNDEFINED_SANITIZER) + add_definitions(-fsanitize=undefined -fno-omit-frame-pointer) + set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=undefined") + endif() + + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-expansion-to-defined") endif()