<div dir="ltr"><div>Thanks for the info, Stefan. I will have a think about it. We may just give up on JITting on Windows for the time being. We are a small, private company, meaning we have to be at least a bit profitable, and I'm not sure that is reconcilable with trailblazing in JIT compilation for Windows.</div><div><br></div><div>Geoff</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 7, 2021 at 9:42 AM Stefan Gränitz <<a href="mailto:stefan.graenitz@gmail.com">stefan.graenitz@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <blockquote type="cite">Thanks for that, Stefan. I built the main
      branch of LLVM (I have been using the 11.1 release branch) and
      tried again with --jit-kind=orc. That does indeed fix the crash.</blockquote>
    Nice, so this issue originated from module splitting in orc-lazy
    mode. Your options are:<br>
    (1) Keep the --jit-kind=orc greedy mode, which materializes all
    reachable code upfront and can be fine if you deal with small
    amounts only.<br>
    (2) Go lazy but compile modules as a whole with --jit-kind=orc-lazy
    --per-module-lazy; it's the most performant lazy flavor in my
    experience and it hopefully avoids the CodeGen error as well.<br>
    (3) Or go lazy and supply your own partitioning function. Then you
    could tune everything yourself in detail.<br>
    <br>
    <blockquote type="cite">But lli fails with unresolved symbols:
      <div><br>
      </div>
      <div>    Symbols not found: [ __emutls_v._Init_thread_epoch,
        __emutls_get_address, _Init_thread_header, _Init_thread_footer,
        ??3@YAXPEAX_K@Z, ??_7type_info@@6B@,
        ?_Facet_Register@std@@YAXPEAV_Facet_base@1@@Z ]</div>
    </blockquote>
    I think these are all Windows-specific issues that are not currently
    supported in RuntimeDyld and, honestly, I don't know if it's
    realistic to still expect it to happen. My understanding is that
    someone will have to write a COFF backend for JITLink to have a
    chance at solving all the Windows mysteries eventually.<br>
    <br>
    In the meantime, you can try to compile with exceptions disabled and
    fake/provide a delete from the host process. The TLS ones you
    probably know. I guess the std::locale::facet one indicates you are
    missing a library, libcmt.lib or libcpmt.lib maybe?<br>
    <br>
    Good luck.<br>
    <br>
    <div>On 06/04/2021 12:19, Geoff Levner
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>Thanks for that, Stefan. I built the main branch of LLVM (I
          have been using the 11.1 release branch) and tried again with
          --jit-kind=orc. That does indeed fix the crash. But lli fails
          with unresolved symbols:</div>
        <div><br>
        </div>
        <div>    Symbols not found: [ __emutls_v._Init_thread_epoch,
          __emutls_get_address, _Init_thread_header,
          _Init_thread_footer, ??3@YAXPEAX_K@Z, ??_7type_info@@6B@,
          ?_Facet_Register@std@@YAXPEAV_Facet_base@1@@Z ]</div>
        <div><br>
        </div>
        <div>Geoff<br>
        </div>
        <div><br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Sat, Apr 3, 2021 at 1:53 PM
          Stefan Gränitz <<a href="mailto:stefan.graenitz@gmail.com" target="_blank">stefan.graenitz@gmail.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div> Hi Geoff<br>
            <br>
            <blockquote type="cite">LLVM ERROR: Associative COMDAT
              symbol 'GVName' is not a key for its COMDAT.</blockquote>
            This is in CodeGen TargetLoweringObjectFileCOFF so this
            isn't necessarily JIT specific. Maybe a backtrace would be
            helpful?<br>
            <br>
            <blockquote type="cite">lli --jit-end=orc-lazy hello.bc</blockquote>
            Greedy Orc mode recently landed in lli: <a href="https://reviews.llvm.org/rGe1579894d2051db8" target="_blank">https://reviews.llvm.org/rGe1579894d2051db8</a><br>
            You might want to retry with that in order to rule out the
            lazy-JIT-infrastructure as a cause for the error.<br>
            <br>
            <blockquote type="cite">should I just give up now on porting
              our Orc-based application to Windows?</blockquote>
            I am not aware of anyone actively working on improved Orc
            Windows support right now.<br>
            <br>
            <div>On 02/04/2021 12:40, Geoff Levner via llvm-dev wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">Sorry, there is a typo in my previous
                message: read "jit-kind" where I typed "jit-end".<br>
              </div>
              <br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">On Fri, Apr 2, 2021 at
                  12:37 PM Geoff Levner <<a href="mailto:glevner@gmail.com" target="_blank">glevner@gmail.com</a>>
                  wrote:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                  <div dir="ltr">
                    <div>Given this C++ code (hello.cpp):</div>
                    <div><br>
                    </div>
                    <div><span style="font-family:monospace">   
                        #include <iostream><br>
                            int main()<br>
                            {<br>
                                std::cout << "Hi, mom." <<
                        std::endl;<br>
                                return 0;<br>
                            }</span></div>
                    <div><br>
                    </div>
                    <div>On Linux (CentOS 7), no problem:</div>
                    <div><br>
                    </div>
                    <div><span style="font-family:monospace">    >
                        clang++ -c -emit-llvm hello.cpp</span></div>
                    <div><span style="font-family:monospace">    >
                        lli --jit-end=orc-lazy hello.bc</span></div>
                    <div><span style="font-family:monospace">    Hi,
                        mom.</span></div>
                    <div><span style="font-family:monospace">    ></span></div>
                    <div><br>
                    </div>
                    <div>But on Windows (7):</div>
                    <div>
                      <div><br>
                      </div>
                      <div><span style="font-family:monospace">    >
                          clang++ -c -emit-llvm hello.cpp</span></div>
                      <div><span style="font-family:monospace">    >
                          lli --jit-end=orc-lazy hello.bc</span></div>
                    </div>
                    <div><span style="font-family:monospace">    LLVM
                        ERROR: Associative COMDAT symbol
                        '??_7_Iostream_error_category2@std@@6B@' is not
                        a key for its COMDAT.<br>
                        PLEASE submit a bug report to <a href="https://bugs.llvm.org/" target="_blank">https://bugs.llvm.org/</a>
                        and include the crash backtrace.</span></div>
                    <div><br>
                    </div>
                    <div>I know Orc JIT lacks COMDAT support, but I
                      thought that just caused duplicate symbols
                      sometimes. Am I doing something stupid here? Or
                      should I just give up now on porting our Orc-based
                      application to Windows? (The application
                      JIT-compiles C++ modules which rely heavily on
                      STL.)<br>
                    </div>
                    <div><br>
                    </div>
                    <div>Geoff</div>
                    <div><br>
                    </div>
                  </div>
                </blockquote>
              </div>
              <br>
              <fieldset></fieldset>
              <pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
            </blockquote>
            <pre cols="72">-- 
<a href="https://flowcrypt.com/pub/stefan.graenitz@gmail.com" target="_blank">https://flowcrypt.com/pub/stefan.graenitz@gmail.com</a></pre>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <pre cols="72">-- 
<a href="https://flowcrypt.com/pub/stefan.graenitz@gmail.com" target="_blank">https://flowcrypt.com/pub/stefan.graenitz@gmail.com</a></pre>
  </div>

</blockquote></div>