Bug 152641

Summary: [GTK][OSX] webkit-gtk 2.11.2 fails to link libllvmForJSC.dylib on OS X due to duplicate (local) abort and raise symbols
Product: WebKit Reporter: Jeremy Huddleston Sequoia <jeremyhu>
Component: JavaScriptCoreAssignee: Nobody <webkit-unassigned>
Status: RESOLVED WONTFIX    
Severity: Normal CC: bugs-noreply, mcatanzaro, philip.chimento
Priority: P2    
Version: Safari 9   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://llvm.org/bugs/show_bug.cgi?id=26174
Bug Depends on:    
Bug Blocks: 126492    

Jeremy Huddleston Sequoia
Reported 2016-01-01 14:53:02 PST
After working around bug #152640, linking libllvmForJSC.dylib fails with: [ 1%] Linking CXX shared library ../../lib/libllvmForJSC.dylib cd /opt/local/var/macports/build/_Volumes_Home_jeremy_src_macports_trunk_dports_www_webkit-gtk-devel/webkit-gtk-devel/work/webkitgtk-2.11.2/Source/JavaScriptCore && /opt/local/bin/cmake -E cmake_link_script CMakeFiles/llvmForJSC.dir/link.txt --verbose=1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -pipe -O0 -g3 -ftemplate-depth=256 -Wno-c++11-extensions -stdlib=libc++ -std=c++11 -Qunused-arguments -std=c++11 -Qunused-arguments -DNDEBUG -fno-exceptions -fno-strict-aliasing -fno-rtti -fno-exceptions -fno-strict-aliasing -fno-rtti -arch x86_64 -mmacosx-version-min=10.11 -dynamiclib -Wl,-headerpad_max_install_names -L/opt/local/lib -Wl,-headerpad_max_install_names -o ../../lib/libllvmForJSC.dylib -install_name /opt/local/lib/libllvmForJSC.dylib CMakeFiles/llvmForJSC.dir/llvm/library/LLVMAnchor.cpp.o CMakeFiles/llvmForJSC.dir/llvm/library/LLVMExports.cpp.o CMakeFiles/llvmForJSC.dir/llvm/library/LLVMOverrides.cpp.o /opt/local/libexec/llvm-3.7/lib/libLLVMLTO.a /opt/local/libexec/llvm-3.7/lib/libLLVMObjCARCOpts.a /opt/local/libexec/llvm-3.7/lib/libLLVMLinker.a /opt/local/libexec/llvm-3.7/lib/libLLVMBitWriter.a /opt/local/libexec/llvm-3.7/lib/libLLVMIRReader.a /opt/local/libexec/llvm-3.7/lib/libLLVMBPFCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMBPFDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMBPFInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMBPFAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMAMDGPUCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMAMDGPUAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMAMDGPUUtils.a /opt/local/libexec/llvm-3.7/lib/libLLVMAMDGPUDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMAMDGPUInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMAMDGPUAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMSystemZDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMSystemZCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMSystemZAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMSystemZDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMSystemZInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMSystemZAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMHexagonDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMHexagonCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMHexagonDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMHexagonInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMNVPTXCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMNVPTXDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMNVPTXInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMNVPTXAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMCppBackendCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMCppBackendInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMMSP430CodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMMSP430Desc.a /opt/local/libexec/llvm-3.7/lib/libLLVMMSP430Info.a /opt/local/libexec/llvm-3.7/lib/libLLVMMSP430AsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMXCoreDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMXCoreCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMXCoreDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMXCoreInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMXCoreAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMMipsDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMMipsCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMMipsAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMMipsDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMMipsInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMMipsAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64Disassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64CodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64AsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64Desc.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64Info.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64AsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMAArch64Utils.a /opt/local/libexec/llvm-3.7/lib/libLLVMARMDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMARMCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMARMAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMARMDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMARMInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMARMAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMPowerPCDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMPowerPCCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMPowerPCAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMPowerPCDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMPowerPCInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMPowerPCAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMSparcDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMSparcCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMSparcAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMSparcDesc.a /opt/local/libexec/llvm-3.7/lib/libLLVMSparcInfo.a /opt/local/libexec/llvm-3.7/lib/libLLVMSparcAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMMIRParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMAsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMLibDriver.a /opt/local/libexec/llvm-3.7/lib/libLLVMOption.a /opt/local/libexec/llvm-3.7/lib/libLLVMDebugInfoPDB.a /opt/local/libexec/llvm-3.7/lib/libLLVMTableGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMOrcJIT.a /opt/local/libexec/llvm-3.7/lib/libLLVMLineEditor.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86Disassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86AsmParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86CodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMSelectionDAG.a /opt/local/libexec/llvm-3.7/lib/libLLVMAsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86Desc.a /opt/local/libexec/llvm-3.7/lib/libLLVMMCDisassembler.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86Info.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86AsmPrinter.a /opt/local/libexec/llvm-3.7/lib/libLLVMX86Utils.a /opt/local/libexec/llvm-3.7/lib/libLLVMMCJIT.a /opt/local/libexec/llvm-3.7/lib/libLLVMDebugInfoDWARF.a /opt/local/libexec/llvm-3.7/lib/libLLVMPasses.a /opt/local/libexec/llvm-3.7/lib/libLLVMipo.a /opt/local/libexec/llvm-3.7/lib/libLLVMVectorize.a /opt/local/libexec/llvm-3.7/lib/libLLVMInterpreter.a /opt/local/libexec/llvm-3.7/lib/libLLVMExecutionEngine.a /opt/local/libexec/llvm-3.7/lib/libLLVMRuntimeDyld.a /opt/local/libexec/llvm-3.7/lib/libLLVMCodeGen.a /opt/local/libexec/llvm-3.7/lib/libLLVMTarget.a /opt/local/libexec/llvm-3.7/lib/libLLVMScalarOpts.a /opt/local/libexec/llvm-3.7/lib/libLLVMProfileData.a /opt/local/libexec/llvm-3.7/lib/libLLVMObject.a /opt/local/libexec/llvm-3.7/lib/libLLVMMCParser.a /opt/local/libexec/llvm-3.7/lib/libLLVMBitReader.a /opt/local/libexec/llvm-3.7/lib/libLLVMInstCombine.a /opt/local/libexec/llvm-3.7/lib/libLLVMInstrumentation.a /opt/local/libexec/llvm-3.7/lib/libLLVMTransformUtils.a /opt/local/libexec/llvm-3.7/lib/libLLVMipa.a /opt/local/libexec/llvm-3.7/lib/libLLVMMC.a /opt/local/libexec/llvm-3.7/lib/libLLVMAnalysis.a /opt/local/libexec/llvm-3.7/lib/libLLVMCore.a /opt/local/libexec/llvm-3.7/lib/libLLVMSupport.a -lz -lpthread -lffi -ledit -lcurses -lm -Wl,-rpath,/opt/local/lib duplicate symbol _abort in: CMakeFiles/llvmForJSC.dir/llvm/library/LLVMOverrides.cpp.o /opt/local/libexec/llvm-3.7/lib/libLLVMSupport.a(Signals.o) duplicate symbol _raise in: CMakeFiles/llvmForJSC.dir/llvm/library/LLVMOverrides.cpp.o /opt/local/libexec/llvm-3.7/lib/libLLVMSupport.a(Signals.o) ld: 2 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Attachments
Jeremy Huddleston Sequoia
Comment 1 2016-01-16 10:13:47 PST
Some history here... the llvm-provided definitions are conditional on: #if defined(__APPLE__) && defined(ENABLE_CRASH_OVERRIDES) The llvm ones are there to redefine raise() as: return pthread_kill(pthread_self(), sig); compared to the system definition as: return(kill(getpid(), s)); --- The wording of the comment around this is: // On Darwin, raise sends a signal to the main thread instead of the current // thread. This has the unfortunate effect that assert() and abort() will end up // bypassing our crash recovery attempts. We work around this for anything in // the same linkage unit by just defining our own versions of the assert handler // and abort. While raise() does behave as described, I changed the behavior of abort() in Lion (10.7) to use pthread_kill() instead of raise(). I think it best to handle removal of the llvm overrides, and I'll file a bug at llvm.org for that. Additionally, libllvmForJSC.dylib is linking in the static archive directly instead of libLLVM-3.7.dylib. Again, this isn't a bug in webkit as it is just doing what llvm-config --libs instructs it to. I'll file a bug at llvm.org for that as well. Given the above, do we want to add a workaround in webkit or detect the problem during configure?
Michael Catanzaro
Comment 2 2016-01-16 15:22:03 PST
(In reply to comment #1) > Additionally, libllvmForJSC.dylib is linking in the static archive directly > instead of libLLVM-3.7.dylib. Again, this isn't a bug in webkit as it is > just doing what llvm-config --libs instructs it to. I'll file a bug at > llvm.org for that as well. We added a workaround so that we could dynamic link to LLVM right after the 2.11.3 release: http://trac.webkit.org/changeset/195009 Try it out!
Jeremy Huddleston Sequoia
Comment 3 2016-01-16 21:26:18 PST
Ok, given that, I think we can close this out.
Note You need to log in before you can comment on or make changes to this bug.