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

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Jan 22 12:43:41 PST 2015


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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: t.patch
Type: text/x-patch
Size: 684 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150122/d46bdc72/attachment.bin>


More information about the llvm-commits mailing list