diff --git a/cmake/XrplSanitizers.cmake b/cmake/XrplSanitizers.cmake index f9630f6856..2228381286 100644 --- a/cmake/XrplSanitizers.cmake +++ b/cmake/XrplSanitizers.cmake @@ -34,10 +34,12 @@ * -fsanitize=: Links sanitizer runtime libraries * -mcmodel=large/medium: (GCC only) Matches compile-time code model - - SANITIZERS_RELOCATION_FLAGS: (GCC only) Code model flags for linking. + - SANITIZERS_RELOCATION_FLAGS: (GCC only, x86_64 only) Code model flags for linking. Used to handle large instrumented binaries on x86_64: * -mcmodel=large: For AddressSanitizer (prevents relocation errors) * -mcmodel=medium: For ThreadSanitizer (large model is incompatible) + On ARM64, these flags are omitted since GCC does not support + -mcmodel=large with -fPIC, and -mcmodel=medium does not exist. #]===================================================================] include(CompilationEnv) @@ -151,9 +153,11 @@ if(is_gcc) elseif(enable_tsan) # GCC doesn't support atomic_thread_fence with tsan. Suppress warnings. list(APPEND SANITIZERS_COMPILE_FLAGS "-Wno-tsan") - message(STATUS " Using medium code model (-mcmodel=medium)") - list(APPEND SANITIZERS_COMPILE_FLAGS "-mcmodel=medium") - list(APPEND SANITIZERS_RELOCATION_FLAGS "-mcmodel=medium") + if(is_amd64) + message(STATUS " Using medium code model (-mcmodel=medium)") + list(APPEND SANITIZERS_COMPILE_FLAGS "-mcmodel=medium") + list(APPEND SANITIZERS_RELOCATION_FLAGS "-mcmodel=medium") + endif() endif() # Join sanitizer flags with commas for -fsanitize option diff --git a/conan/profiles/sanitizers b/conan/profiles/sanitizers index 073fcf3072..800e6eb48c 100644 --- a/conan/profiles/sanitizers +++ b/conan/profiles/sanitizers @@ -1,5 +1,6 @@ include(default) {% set compiler, version, compiler_exe = detect_api.detect_default_compiler() %} +{% set arch = detect_api.detect_arch() %} {% set sanitizers = os.getenv("SANITIZERS") %} [conf] @@ -13,12 +14,16 @@ include(default) {% if "address" in sanitizers %} {% set _ = sanitizer_list.append("address") %} - {% set model_code = "-mcmodel=large" %} + {% if arch == "x86_64" %} + {% set model_code = "-mcmodel=large" %} + {% endif %} {% set _ = defines.append("BOOST_USE_ASAN")%} {% set _ = defines.append("BOOST_USE_UCONTEXT")%} {% elif "thread" in sanitizers %} {% set _ = sanitizer_list.append("thread") %} - {% set model_code = "-mcmodel=medium" %} + {% if arch == "x86_64" %} + {% set model_code = "-mcmodel=medium" %} + {% endif %} {% set _ = extra_cxxflags.append("-Wno-tsan") %} {% set _ = defines.append("BOOST_USE_TSAN")%} {% set _ = defines.append("BOOST_USE_UCONTEXT")%}