[PATCH] D70232: compiler-rt: use correct builtins library when linking sanitizers
Marc-Antoine Perennou via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 14 03:52:51 PST 2019
Keruspe created this revision.
Keruspe added a reviewer: beanz.
Herald added subscribers: llvm-commits, Sanitizers, mgorny, dberris.
Herald added projects: Sanitizers, LLVM.
Keruspe updated this revision to Diff 229266.
Keruspe added a comment.
Fix variable indirection. (Wrong verison of the patch was attached)
When building on x86_64 with -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON we try to build sanitizers for both x86_64 and i386 but we tried to link both to the x86_64 builtins.
This patch uses the correct builtins to link into the sanitizers.
Based on patch attached here: https://bugs.llvm.org/show_bug.cgi?id=38025
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D70232
Files:
compiler-rt/CMakeLists.txt
compiler-rt/cmake/Modules/AddCompilerRT.cmake
compiler-rt/cmake/Modules/HandleCompilerRT.cmake
compiler-rt/cmake/config-ix.cmake
Index: compiler-rt/cmake/config-ix.cmake
===================================================================
--- compiler-rt/cmake/config-ix.cmake
+++ compiler-rt/cmake/config-ix.cmake
@@ -15,7 +15,7 @@
check_library_exists(c fopen "" COMPILER_RT_HAS_LIBC)
if (COMPILER_RT_USE_BUILTINS_LIBRARY)
include(HandleCompilerRT)
- find_compiler_rt_library(builtins COMPILER_RT_BUILTINS_LIBRARY)
+ find_compiler_rt_library(builtins "" COMPILER_RT_BUILTINS_LIBRARY)
else()
if (ANDROID)
check_library_exists(gcc __gcc_personality_v0 "" COMPILER_RT_HAS_GCC_LIB)
Index: compiler-rt/cmake/Modules/HandleCompilerRT.cmake
===================================================================
--- compiler-rt/cmake/Modules/HandleCompilerRT.cmake
+++ compiler-rt/cmake/Modules/HandleCompilerRT.cmake
@@ -1,7 +1,9 @@
-function(find_compiler_rt_library name variable)
+function(find_compiler_rt_library name target variable)
set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${SANITIZER_COMMON_CFLAGS}
"--rtlib=compiler-rt" "--print-libgcc-file-name")
- if (CMAKE_CXX_COMPILER_ID MATCHES Clang AND CMAKE_CXX_COMPILER_TARGET)
+ if (target)
+ list(APPEND CLANG_COMMAND "--target=${target}")
+ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang AND CMAKE_CXX_COMPILER_TARGET)
list(APPEND CLANG_COMMAND "--target=${CMAKE_CXX_COMPILER_TARGET}")
endif()
get_property(SANITIZER_CXX_FLAGS CACHE CMAKE_CXX_FLAGS PROPERTY VALUE)
Index: compiler-rt/cmake/Modules/AddCompilerRT.cmake
===================================================================
--- compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -1,5 +1,6 @@
include(ExternalProject)
include(CompilerRTUtils)
+include(HandleCompilerRT)
function(set_target_output_directories target output_dir)
# For RUNTIME_OUTPUT_DIRECTORY variable, Multi-configuration generators
@@ -226,6 +227,13 @@
set(extra_cflags_${libname} ${TARGET_${arch}_CFLAGS} ${NO_LTO_FLAGS} ${LIB_CFLAGS})
get_compiler_rt_output_dir(${arch} output_dir_${libname})
get_compiler_rt_install_dir(${arch} install_dir_${libname})
+ if(COMPILER_RT_USE_BUILTINS_LIBRARY)
+ if(NOT builtins_${arch})
+ get_compiler_rt_target(${arch} target)
+ find_compiler_rt_library(builtins ${target} builtins_${arch})
+ endif()
+ set(builtins_${libname} ${builtins_${arch}})
+ endif()
endforeach()
endif()
@@ -311,6 +319,9 @@
OUTPUT_NAME ${output_name_${libname}})
set_target_properties(${libname} PROPERTIES FOLDER "Compiler-RT Runtime")
if(LIB_LINK_LIBS)
+ if(builtins_${libname})
+ set(LIB_LINK_LIBS ${LIB_LINK_LIBS} ${builtins_${libname}})
+ endif()
target_link_libraries(${libname} PRIVATE ${LIB_LINK_LIBS})
endif()
if(${type} STREQUAL "SHARED")
Index: compiler-rt/CMakeLists.txt
===================================================================
--- compiler-rt/CMakeLists.txt
+++ compiler-rt/CMakeLists.txt
@@ -397,7 +397,6 @@
append_list_if(COMPILER_RT_HAS_Z_TEXT -Wl,-z,text SANITIZER_COMMON_LINK_FLAGS)
if (COMPILER_RT_USE_BUILTINS_LIBRARY)
- list(APPEND SANITIZER_COMMON_LINK_LIBS ${COMPILER_RT_BUILTINS_LIBRARY})
string(REPLACE "-Wl,-z,defs" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
else()
if (ANDROID)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70232.229266.patch
Type: text/x-patch
Size: 3336 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191114/06117a32/attachment.bin>
More information about the llvm-commits
mailing list