[llvm] r223372 - Detect if the linker is gold and if so always use --gc-sections.
Rafael Espindola
rafael.espindola at gmail.com
Thu Dec 4 09:54:36 PST 2014
Author: rafael
Date: Thu Dec 4 11:54:35 2014
New Revision: 223372
URL: http://llvm.org/viewvc/llvm-project?rev=223372&view=rev
Log:
Detect if the linker is gold and if so always use --gc-sections.
Modified:
llvm/trunk/cmake/modules/AddLLVM.cmake
Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=223372&r1=223371&r2=223372&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
+++ llvm/trunk/cmake/modules/AddLLVM.cmake Thu Dec 4 11:54:35 2014
@@ -142,6 +142,14 @@ function(add_llvm_symbol_exports target_
set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE)
endfunction(add_llvm_symbol_exports)
+if(NOT WIN32 AND NOT APPLE)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} -Wl,--version
+ OUTPUT_VARIABLE stdout)
+ if("${stdout}" MATCHES "GNU gold")
+ set(LLVM_LINKER_IS_GOLD ON)
+ endif()
+endif()
+
function(add_link_opts target_name)
# Pass -O3 to the linker. This enabled different optimizations on different
# linkers.
@@ -150,12 +158,18 @@ function(add_link_opts target_name)
LINK_FLAGS " -Wl,-O3")
endif()
+ if(LLVM_LINKER_IS_GOLD)
+ # With gold gc-sections is always safe.
+ set_property(TARGET ${target_name} APPEND_STRING PROPERTY
+ LINK_FLAGS " -Wl,--gc-sections")
+ endif()
+
if(NOT LLVM_NO_DEAD_STRIP)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# ld64's implementation of -dead_strip breaks tools that use plugins.
set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-dead_strip")
- elseif(NOT WIN32)
+ elseif(NOT WIN32 AND NOT LLVM_LINKER_IS_GOLD)
# Object files are compiled with -ffunction-data-sections.
# Versions of bfd ld < 2.23.1 have a bug in --gc-sections that breaks
# tools that use plugins. Always pass --gc-sections once we require
More information about the llvm-commits
mailing list