ubuntu@llvm-ppcle:~$ which ld /usr/bin/ld ubuntu@llvm-ppcle:~$ ld --version GNU ld (GNU Binutils for Ubuntu) 2.26 Copyright (C) 2015 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty. Note that this code links just fine on a Fedora powerpc64le system that uses binutils 2.24. [8/9] Linking CXX executable unittests/Support/SupportTests FAILED: : && /usr/bin/c++ -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -std=c++11 -ffunction-sections -fdata-sections -O3 -Wl,-allow-shlib-undefined -Wl,-O3 -Wl,--gc-sections unittests/Support/CMakeFiles/SupportTests.dir/AlignOfTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/AllocatorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ArrayRecyclerTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/BlockFrequencyTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/BranchProbabilityTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/Casting.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/CommandLineTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/CompressionTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ConvertUTFTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/DataExtractorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/DwarfTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/EndianStreamTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/EndianTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ErrorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ErrorOrTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/FileOutputBufferTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/IteratorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/LEB128Test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/LineIteratorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/LockFileManagerTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MD5Test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ManagedStatic.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MathExtrasTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MemoryBufferTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MemoryTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/Path.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ProcessTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ProgramTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/RegexTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ReplaceFileTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ScaledNumberTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/SourceMgrTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/SpecialCaseListTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/StreamingMemoryObjectTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/StringPool.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/SwapByteOrderTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TargetParserTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ThreadLocalTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ThreadPool.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TimerTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TimeValueTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TypeNameTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TrailingObjectsTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/UnicodeTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/YAMLIOTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/YAMLParserTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/formatted_raw_ostream_test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/raw_ostream_test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/raw_pwrite_stream_test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/raw_sha1_ostream_test.cpp.o -o unittests/Support/SupportTests lib/libLLVMSupport.a lib/libLLVMSupport.a lib/libgtest_main.a lib/libgtest.a -lpthread lib/libLLVMSupport.a -lrt -ldl -lm -lpthread -Wl,-rpath,"\$ORIGIN/../../lib" && : /usr/bin/ld: lib/libLLVMSupport.a(ThreadPool.cpp.o): In function `void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >()': ThreadPool.cpp:(.text._ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv[_ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv]+0x1c): unresolvable R_PPC64_REL24 against `__tls_get_addr_opt@@GLIBC_2.22' ThreadPool.cpp:(.text._ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv[_ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv]+0x1c): relocation truncated to fit: R_PPC64_REL24 against symbol `__tls_get_addr_opt@@GLIBC_2.22' defined in .text section in /lib/powerpc64le-linux-gnu/ld64.so.2 /usr/bin/ld: final link failed: Nonrepresentable section on output collect2: error: ld returned 1 exit status Based on a discussion I found I tried adding -Wl,--relax to the LDFLAGS but the error still occurs FAILED: : && /usr/bin/c++ -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -std=c++11 -ffunction-sections -fdata-sections -O3 -Wl,--relax -Wl,-allow-shlib-undefined -Wl,-O3 -Wl,--gc-sections unittests/Support/CMakeFiles/SupportTests.dir/AlignOfTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/AllocatorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ArrayRecyclerTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/BlockFrequencyTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/BranchProbabilityTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/Casting.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/CommandLineTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/CompressionTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ConvertUTFTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/DataExtractorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/DwarfTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/EndianStreamTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/EndianTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ErrorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ErrorOrTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/FileOutputBufferTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/IteratorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/LEB128Test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/LineIteratorTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/LockFileManagerTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MD5Test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ManagedStatic.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MathExtrasTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MemoryBufferTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/MemoryTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/Path.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ProcessTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ProgramTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/RegexTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ReplaceFileTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ScaledNumberTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/SourceMgrTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/SpecialCaseListTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/StreamingMemoryObjectTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/StringPool.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/SwapByteOrderTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TargetParserTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ThreadLocalTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/ThreadPool.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TimerTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TimeValueTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TypeNameTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/TrailingObjectsTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/UnicodeTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/YAMLIOTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/YAMLParserTest.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/formatted_raw_ostream_test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/raw_ostream_test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/raw_pwrite_stream_test.cpp.o unittests/Support/CMakeFiles/SupportTests.dir/raw_sha1_ostream_test.cpp.o -o unittests/Support/SupportTests lib/libLLVMSupport.a lib/libLLVMSupport.a lib/libgtest_main.a lib/libgtest.a -lpthread lib/libLLVMSupport.a -lrt -ldl -lm -lpthread -Wl,-rpath,"\$ORIGIN/../../lib" && : /usr/bin/ld: lib/libLLVMSupport.a(ThreadPool.cpp.o): In function `void std::__once_call_impl<std::_Bind_simple<std::_Mem_fn<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> (std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)> >()': ThreadPool.cpp:(.text._ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv[_ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv]+0x1c): unresolvable R_PPC64_REL24 against `__tls_get_addr_opt@@GLIBC_2.22' ThreadPool.cpp:(.text._ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv[_ZSt16__once_call_implISt12_Bind_simpleIFSt7_Mem_fnIMNSt13__future_base13_State_baseV2EFvPSt8functionIFSt10unique_ptrINS2_12_Result_baseENS6_8_DeleterEEvEEPbEEPS3_SB_SC_EEEvv]+0x1c): relocation truncated to fit: R_PPC64_REL24 against symbol `__tls_get_addr_opt@@GLIBC_2.22' defined in .text section in /lib/powerpc64le-linux-gnu/ld64.so.2 /usr/bin/ld: final link failed: Nonrepresentable section on output collect2: error: ld returned 1 exit status I also built and used my own copy of binutils-2.26 but again the same error occurs.
The master branch has been updated by Alan Modra <amodra@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3bd43ebcb6025a8a43f119238f490e2e238697a2 commit 3bd43ebcb6025a8a43f119238f490e2e238697a2 Author: Alan Modra <amodra@gmail.com> Date: Wed May 11 21:54:05 2016 +0930 ld --gc-sections fail with __tls_get_addr_opt When --gc-sections is active, __tls_get_addr_opt is marked as not needed and forced local before ppc*_elf_tls_setup is run. bfd/ PR 20060 * elf64-ppc.c (ppc64_elf_tls_setup): Clear forced_local. * elf32-ppc.c (ppc_elf_tls_setup): Likewise. ld/ PR 20060 * testsuite/ld-powerpc/powerpc.exp: Run new tests. * testsuite/ld-powerpc/tlsdll.s: New. * testsuite/ld-powerpc/tlsdll.ver: New. * testsuite/ld-powerpc/tlsdll_32.s: New. * testsuite/ld-powerpc/tlsopt5.d: New. * testsuite/ld-powerpc/tlsopt5.s: New. * testsuite/ld-powerpc/tlsopt5_32.d: New. * testsuite/ld-powerpc/tlsopt5_32.s: New.
The binutils-2_26-branch branch has been updated by Alan Modra <amodra@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ad79d09b98fcb5574b1353554018762628d2be88 commit ad79d09b98fcb5574b1353554018762628d2be88 Author: Alan Modra <amodra@gmail.com> Date: Wed May 11 21:54:05 2016 +0930 ld --gc-sections fail with __tls_get_addr_opt When --gc-sections is active, __tls_get_addr_opt is marked as not needed and forced local before ppc*_elf_tls_setup is run. bfd/ PR 20060 * elf64-ppc.c (ppc64_elf_tls_setup): Clear forced_local. * elf32-ppc.c (ppc_elf_tls_setup): Likewise. ld/ PR 20060 * testsuite/ld-powerpc/powerpc.exp: Run new tests. * testsuite/ld-powerpc/tlsdll.s: New. * testsuite/ld-powerpc/tlsdll.ver: New. * testsuite/ld-powerpc/tlsdll_32.s: New. * testsuite/ld-powerpc/tlsopt5.d: New. * testsuite/ld-powerpc/tlsopt5.s: New. * testsuite/ld-powerpc/tlsopt5_32.d: New. * testsuite/ld-powerpc/tlsopt5_32.s: New.
Fixed master and 2.26