Bug 152641 - [GTK][OSX] webkit-gtk 2.11.2 fails to link libllvmForJSC.dylib on OS X due to duplicate (local) abort and raise symbols
Summary: [GTK][OSX] webkit-gtk 2.11.2 fails to link libllvmForJSC.dylib on OS X due to...
Status: RESOLVED WONTFIX
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: Safari 9
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks: 126492
  Show dependency treegraph
 
Reported: 2016-01-01 14:53 PST by Jeremy Huddleston Sequoia
Modified: 2016-01-16 21:26 PST (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jeremy Huddleston Sequoia 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)
Comment 1 Jeremy Huddleston Sequoia 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?
Comment 2 Michael Catanzaro 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!
Comment 3 Jeremy Huddleston Sequoia 2016-01-16 21:26:18 PST
Ok, given that, I think we can close this out.