diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2022-07-27 12:30:18 +0200 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2022-08-02 01:47:41 -0700 |
commit | 73d45fea656b1c15c20dd96b386d6004638ae7f3 (patch) | |
tree | b9158aa5d0ab86e6c2504467f6a9f39292afa33a | |
parent | 3928c126568de5f45d46c68cff12dbc88a40a250 (diff) |
[compiler-rt][Sanitizer] Link sanitizer libs with -latomic on SPARC
When building on Linux/sparc64, the 32-bit `libclang_rt.asan.so`,
`libclang_rt.ubsan_minimal.so`, and `libclang_rt.ubsan_standalone.so`
failed to link with undefined references to 64-bit atomics, which `clang`
cannot inline. Even D130569 <https://reviews.llvm.org/D130569> didn't help
because those libraries are linked with `-nodefaultlibs`, so dependent
libraries need to be added explicitly.
That's what this patch does.
Tested on `sparc64-unknown-linux-gnu` and `sparcv9-sun-solaris2.11`.
Differential Revision: https://reviews.llvm.org/D130571
(cherry picked from commit 0b2d5fd48bc281af89e5e7bfa33a3054b826ed52)
-rw-r--r-- | compiler-rt/CMakeLists.txt | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt index 4a572bc005fe..62737735695f 100644 --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -479,6 +479,12 @@ append_list_if(MINGW -fms-extensions SANITIZER_COMMON_CFLAGS) append_list_if(C_SUPPORTS_NODEFAULTLIBS_FLAG -nodefaultlibs SANITIZER_COMMON_LINK_FLAGS) append_list_if(COMPILER_RT_HAS_Z_TEXT -Wl,-z,text SANITIZER_COMMON_LINK_FLAGS) +# Only necessary for 32-bit SPARC. Solaris 11.2+ ld uses -z ignore/-z record +# natively, but supports --as-needed/--no-as-needed for GNU ld compatibility. +if("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "sparc") + list(APPEND SANITIZER_COMMON_LINK_LIBS -Wl,--as-needed atomic -Wl,--no-as-needed) +endif() + if (COMPILER_RT_USE_BUILTINS_LIBRARY) string(REPLACE "-Wl,-z,defs" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") else() |