From 15f37aa1320fe7e1cde49aa2140f6aefa685c554 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Tue, 16 Dec 2025 14:35:22 +0000 Subject: [PATCH] added no-pic for gcc asan, added suppressions Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- cmake/XrplSanitizers.cmake | 12 +++++++++--- conan/profiles/sanitizers | 13 ++++++++----- sanitizers/suppressions/asan.supp | 4 +--- sanitizers/suppressions/sanitizer-ignorelist.txt | 1 + 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/cmake/XrplSanitizers.cmake b/cmake/XrplSanitizers.cmake index d86ac01a28..cb1b4d3628 100644 --- a/cmake/XrplSanitizers.cmake +++ b/cmake/XrplSanitizers.cmake @@ -97,16 +97,16 @@ endif() # Configure code model for GCC on amd64 # Use large code model for ASAN to avoid relocation errors # Use medium code model for TSAN (large is not compatible with TSAN) -set(SANITIZERS_RELOCATION_FLAGS "") +set(SANITIZERS_RELOCATION_FLAGS) if(IS_GCC AND IS_AMD64) if(ENABLE_ASAN) message(STATUS " Using large code model (-mcmodel=large)") list(APPEND SANITIZERS_COMPILE_FLAGS "-mcmodel=large") - set(SANITIZERS_RELOCATION_FLAGS "-mcmodel=large") + list(APPEND SANITIZERS_RELOCATION_FLAGS "-mcmodel=large") elseif(ENABLE_TSAN) message(STATUS " Using medium code model (-mcmodel=medium)") list(APPEND SANITIZERS_COMPILE_FLAGS "-mcmodel=medium") - set(SANITIZERS_RELOCATION_FLAGS "-mcmodel=medium") + list(APPEND SANITIZERS_RELOCATION_FLAGS "-mcmodel=medium") endif() endif() @@ -127,6 +127,12 @@ if(IS_GCC) list(APPEND SANITIZERS_COMPILE_FLAGS "-Wno-tsan") endif() + if(ENABLE_ASAN) + # GCC has issues with PIC and ASAN. + # https://github.com/google/sanitizers/issues/856 + list(APPEND SANITIZERS_RELOCATION_FLAGS "-fno-PIC") + endif() + # Join sanitizer flags with commas for -fsanitize option list(JOIN SANITIZERS_FLAGS "," SANITIZERS_FLAGS_STR) diff --git a/conan/profiles/sanitizers b/conan/profiles/sanitizers index 933d282726..4de7bc6801 100644 --- a/conan/profiles/sanitizers +++ b/conan/profiles/sanitizers @@ -8,15 +8,18 @@ include(default) {% if "Address" in sanitizers or "Thread" in sanitizers or "UndefinedBehavior" in sanitizers %} {% set sanitizer_list = [] %} {% set model_code = "" %} - {% set extra_cxxflags = "-fno-omit-frame-pointer -O1 -Wno-stringop-overflow" %} + {% set extra_cxxflags = ["-fno-omit-frame-pointer", "-O1", "-Wno-stringop-overflow"] %} {% if "Address" in sanitizers %} {% set _ = sanitizer_list.append("address") %} {% set model_code = "-mcmodel=large" %} + {% if version >= "15" %} + {% set _ = extra_cxxflags.append("-fno-PIC")%} + {% endif %} {% elif "Thread" in sanitizers %} {% set _ = sanitizer_list.append("thread") %} {% set model_code = "-mcmodel=medium" %} - {% set extra_cxxflags = extra_cxxflags ~ " -Wno-tsan" %} + {% set _ = extra_cxxflags.append("-Wno-tsan") %} {% endif %} {% if "UndefinedBehavior" in sanitizers %} @@ -26,14 +29,14 @@ include(default) {% set sanitizer_flags = "-fsanitize=" ~ ",".join(sanitizer_list) ~ " " ~ model_code %} - tools.build:cxxflags+=['{{sanitizer_flags}} {{extra_cxxflags}}'] + tools.build:cxxflags+=['{{sanitizer_flags}} {{" ".join(extra_cxxflags)}}'] tools.build:sharedlinkflags+=['{{sanitizer_flags}}'] tools.build:exelinkflags+=['{{sanitizer_flags}}'] {% endif %} {% elif compiler == "apple-clang" or compiler == "clang" %} {% if "Address" in sanitizers or "Thread" in sanitizers or "UndefinedBehavior" in sanitizers %} {% set sanitizer_list = [] %} - {% set extra_cxxflags = "-fno-omit-frame-pointer -O1" %} + {% set extra_cxxflags = ["-fno-omit-frame-pointer", "-O1"] %} {% if "Address" in sanitizers %} {% set _ = sanitizer_list.append("address") %} @@ -49,7 +52,7 @@ include(default) {% set sanitizer_flags = "-fsanitize=" ~ ",".join(sanitizer_list) %} - tools.build:cxxflags+=['{{sanitizer_flags}} {{extra_cxxflags}}'] + tools.build:cxxflags+=['{{sanitizer_flags}} {{" ".join(extra_cxxflags)}}'] tools.build:sharedlinkflags+=['{{sanitizer_flags}}'] tools.build:exelinkflags+=['{{sanitizer_flags}}'] {% endif %} diff --git a/sanitizers/suppressions/asan.supp b/sanitizers/suppressions/asan.supp index 40929a62df..5bf5cb6f82 100644 --- a/sanitizers/suppressions/asan.supp +++ b/sanitizers/suppressions/asan.supp @@ -8,9 +8,6 @@ # # See: https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow -# Suprpress voilations in sanitizers/suppressions code -interceptor_name:^sanitizers/suppressions - # Boost interceptor_name:boost/asio @@ -33,3 +30,4 @@ interceptor_name:__asan_memcpy # stack-use-after-scope interceptor_name:src/test/app/Invariants_test.cpp +interceptor_name:xrpl/protocol/STObject.h diff --git a/sanitizers/suppressions/sanitizer-ignorelist.txt b/sanitizers/suppressions/sanitizer-ignorelist.txt index efe64ca325..5905f20bd0 100644 --- a/sanitizers/suppressions/sanitizer-ignorelist.txt +++ b/sanitizers/suppressions/sanitizer-ignorelist.txt @@ -25,3 +25,4 @@ src:core/detail/Workers.cpp src:core/JobQueue.cpp src:libxrpl/beast/utility/beast_Journal.cpp src:test/beast/beast_PropertyStream_test.cpp +src:src/test/app/Invariants_test.cpp