From 6b8b91e9435b93839db1008be26668f2a4226648 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Sun, 23 Aug 2020 01:21:07 -0400 Subject: [PATCH] Better ASAN support --- indra/cmake/00-Common.cmake | 28 ++++++++++++++++------------ indra/newview/linux_tools/wrapper.sh | 3 +++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 23829fd0549..061be9c358d 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -206,8 +206,8 @@ if (LINUX) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if (USE_ASAN) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-recover=address") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-recover=address") link_libraries(-lasan) endif (USE_ASAN) @@ -233,23 +233,27 @@ if (LINUX) CHECK_CXX_COMPILER_FLAG(-fstack-protector-strong HAS_STRONG_STACK_PROTECTOR) CHECK_CXX_COMPILER_FLAG(-fstack-protector HAS_STACK_PROTECTOR) if (${CMAKE_BUILD_TYPE} STREQUAL "Release") - if(HAS_STRONG_STACK_PROTECTOR) + if (HAS_STRONG_STACK_PROTECTOR) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") - elseif(HAS_STACK_PROTECTOR) + elseif (HAS_STACK_PROTECTOR) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector") - endif(HAS_STRONG_STACK_PROTECTOR) + endif (HAS_STRONG_STACK_PROTECTOR) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") endif (${CMAKE_BUILD_TYPE} STREQUAL "Release") - if (HAS_DEBUG_OPTIMIZATION) - set(CMAKE_CXX_FLAGS_DEBUG "-Og ${CMAKE_CXX_FLAGS_DEBUG}") - else (HAS_DEBUG_OPTIMIZATION) - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") - endif (HAS_DEBUG_OPTIMIZATION) + if (HAS_DEBUG_OPTIMIZATION) + set(CMAKE_CXX_FLAGS_DEBUG "-Og ${CMAKE_CXX_FLAGS_DEBUG}") + else (HAS_DEBUG_OPTIMIZATION) + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") + endif (HAS_DEBUG_OPTIMIZATION) - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}") + if (USE_ASAN OR USE_LEAKSAN OR USE_UBSAN OR USE_THDSAN) + set(CMAKE_CXX_FLAGS_RELEASE "-Og ${CMAKE_CXX_FLAGS_RELEASE}") + else () + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}") + endif () # Enable these flags so we have a read only GOT and some linking opts set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now -Wl,--as-needed") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now -Wl,--as-needed") @@ -288,7 +292,7 @@ if (LINUX OR DARWIN) endif (CMAKE_CXX_COMPILER MATCHES ".*clang") if (CMAKE_COMPILER_IS_GNUCXX) - set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-deprecated-copy -Wno-ignored-qualifiers -Wnon-virtual-dtor") + set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-deprecated-copy -Wno-ignored-qualifiers -Wno-unused-function -Wnon-virtual-dtor") elseif (CMAKE_COMPILER_IS_CLANGXX) set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs") endif() diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh index 7c022c9dc1e..5607bbb564d 100755 --- a/indra/newview/linux_tools/wrapper.sh +++ b/indra/newview/linux_tools/wrapper.sh @@ -55,6 +55,9 @@ fi #export LL_WRAPPER='gdb --args' #export LL_WRAPPER='valgrind --smc-check=all --error-limit=no --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' +## For controlling various sanitizer options +#export ASAN_OPTIONS="halt_on_error=0 detect_leaks=1 symbolize=1" + ## - Avoids an often-buggy X feature that doesn't really benefit us anyway. # export SDL_VIDEO_X11_DGAMOUSE=0 -- GitLab