<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>152641</bug_id>
          
          <creation_ts>2016-01-01 14:53:02 -0800</creation_ts>
          <short_desc>[GTK][OSX] webkit-gtk 2.11.2 fails to link libllvmForJSC.dylib on OS X due to duplicate (local) abort and raise symbols</short_desc>
          <delta_ts>2016-01-16 21:26:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          <see_also>https://llvm.org/bugs/show_bug.cgi?id=26174</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>126492</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Huddleston Sequoia">jeremyhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>philip.chimento</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1151863</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2016-01-01 14:53:02 -0800</bug_when>
    <thetext>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 &amp;&amp; /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)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156187</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2016-01-16 10:13:47 -0800</bug_when>
    <thetext>Some history here... the llvm-provided definitions are conditional on:

#if defined(__APPLE__) &amp;&amp; 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&apos;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&apos;t a bug in webkit as it is just doing what llvm-config --libs instructs it to.  I&apos;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?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156229</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-16 15:22:03 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Additionally, libllvmForJSC.dylib is linking in the static archive directly
&gt; instead of libLLVM-3.7.dylib.  Again, this isn&apos;t a bug in webkit as it is
&gt; just doing what llvm-config --libs instructs it to.  I&apos;ll file a bug at
&gt; 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!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156259</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2016-01-16 21:26:18 -0800</bug_when>
    <thetext>Ok, given that, I think we can close this out.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>