[llvm] r226828 - Pass -Wl, -z, defs when building shared libraries, but not with the sanitizers.

Dimitry Andric dimitry at andric.com
Thu Jan 22 12:56:08 PST 2015


Yes, that fixes it. Thanks!

-Dimitry

> On 22 Jan 2015, at 21:43, Rafael EspĂ­ndola <rafael.espindola at gmail.com> wrote:
> 
> Sure. Can you try the attached patch?
> 
> On 22 January 2015 at 15:35, Dimitry Andric <dimitry at andric.com> wrote:
>> Hi Rafael,
>> 
>> This commit causes link failures on FreeBSD:
>> 
>> [205/242] Linking CXX shared library lib/libclang.so.3.7
>> FAILED: : && /usr/bin/clang++  -fPIC -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Werror=date-time -std=c++11 -fcolor-diagnostics -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -fno-strict-aliasing -Wno-nested-anon-types -O3  -Wl,-z,defs -Wl,-z,origin   -Wl,-O3 -Wl,--gc-sections  -Wl,--version-script,/home/dim/obj/llvm-fkp-test/tools/clang/tools/libclang/libclang.exports -shared -Wl,-soname,libclang.so.3.7 -o lib/libclang.so.3.7 tools/clang/tools/libclang/CMakeFiles/libclang.dir/ARCMigrate.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/BuildSystem.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndex.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexCXX.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexCodeCompletion.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexDiagnostic.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexHigh.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexInclusionStack.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexUSRs.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CIndexer.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXComment.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXCursor.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXCompilationDatabase.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXLoadedDiagnostic.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXSourceLocation.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXStoredDiagnostic.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXString.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/CXType.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexBody.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexDecl.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexTypeSourceInfo.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/Indexing.cpp.o tools/clang/tools/libclang/CMakeFiles/libclang.dir/IndexingContext.cpp.o -L/usr/local/lib lib/libclangAST.a lib/libclangBasic.a lib/libclangFrontend.a lib/libclangIndex.a lib/libclangLex.a lib/libclangSema.a lib/libclangTooling.a lib/libclangARCMigrate.a lib/libLLVMCore.a lib/libLLVMSupport.a lib/libclangFormat.a lib/libclangToolingCore.a lib/libclangASTMatchers.a lib/libclangFrontend.a lib/libclangDriver.a lib/libclangParse.a lib/libLLVMMCParser.a lib/libLLVMOption.a lib/libclangSerialization.a lib/libclangSema.a lib/libclangEdit.a lib/libLLVMBitReader.a lib/libclangStaticAnalyzerCheckers.a lib/libclangStaticAnalyzerCore.a lib/libclangRewrite.a lib/libclangAnalysis.a lib/libclangAST.a lib/libclangLex.a lib/libclangBasic.a lib/libLLVMCore.a lib/libLLVMMC.a lib/libLLVMSupport.a -lrt -ltinfo -lpthread -lz -lm -Wl,-rpath,"\$ORIGIN/../lib" && :
>> lib/libLLVMSupport.a(Program.cpp.o): In function `Execute(llvm::sys::ProcessInfo&, llvm::StringRef, char const**, char const**, llvm::StringRef const**, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)':
>> /share/dim/src/llvm/git/lib/Support/Program.cpp:(.text._ZL7ExecuteRN4llvm3sys11ProcessInfoENS_9StringRefEPPKcS6_PPKS3_jPNSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEE+0x9a4): undefined reference to `environ'
>> clang++: error: linker command failed with exit code 1 (use -v to see invocation)
>> 
>> Can you please add FreeBSD to the list of excluded systems, at least for now?
>> 
>> -Dimitry
>> 
>>> On 22 Jan 2015, at 15:06, Rafael Espindola <rafael.espindola at gmail.com> wrote:
>>> 
>>> Author: rafael
>>> Date: Thu Jan 22 08:06:51 2015
>>> New Revision: 226828
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=226828&view=rev
>>> Log:
>>> Pass -Wl,-z,defs when building shared libraries, but not with the sanitizers.
>>> 
>>> Modified:
>>>   llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
>>> 
>>> Modified: llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=226828&r1=226827&r2=226828&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/cmake/modules/HandleLLVMOptions.cmake (original)
>>> +++ llvm/trunk/cmake/modules/HandleLLVMOptions.cmake Thu Jan 22 08:06:51 2015
>>> @@ -104,6 +104,14 @@ if(APPLE)
>>>  set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-flat_namespace -Wl,-undefined -Wl,suppress")
>>> endif()
>>> 
>>> +# Pass -Wl,-z,defs. This makes sure all symbols are defined. Otherwise a DSO
>>> +# build might work on ELF but fail on MachO/COFF.
>>> +if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR WIN32) AND
>>> +  NOT LLVM_USE_SANITIZER)
>>> +  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
>>> +endif()
>>> +
>>> +
>>> function(append value)
>>>  foreach(variable ${ARGN})
>>>    set(${variable} "${${variable}} ${value}" PARENT_SCOPE)
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> 
> <t.patch>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150122/db71cf58/attachment.sig>


More information about the llvm-commits mailing list