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