added no-pic for gcc asan, added suppressions

Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com>
This commit is contained in:
Pratik Mankawde
2025-12-16 14:35:22 +00:00
parent 89a135649b
commit 15f37aa132
4 changed files with 19 additions and 11 deletions

View File

@@ -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)

View File

@@ -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 %}

View File

@@ -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

View File

@@ -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