<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi Haoran<br>
      <br>
      Yes, that's expected behavior. Definition generators only get
      invoked for symbols that are not defined in your modules. The
      documentation in <a class="moz-txt-link-freetext" href="https://llvm.org/docs/ORCv2.html">https://llvm.org/docs/ORCv2.html</a> says:<br>
      <br>
      > If a definition generator is attached to a JITDylib,
      then any unsuccessful lookup on that JITDylib will fall back to
      calling the
      definition generator<br>
      <br>
      I guess the situation is hard to compare with the context a static
      linker runs in. It's an interesting idea though. Maybe it's
      possible achieve with a JITLink plugin?<br>
      <br>
      Best<br>
      Stefan<br>
      <br>
      On 07/08/2020 11:51, Haoran Xu via llvm-dev wrote:<br>
    </p>
    <blockquote type="cite"
cite="mid:CA+jENm+qA2Gd1u26gro1-rFprWpMVqXHRgcT-th2XZLDCVbe8Q@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div>Hello,</div>
        <div><br>
        </div>
        <div>I recently hit an issue when JIT'ing my generated IR using
          llvm::orc::LLJIT. My IR contains the following definition of a
          global variable:</div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>$_ZZ23TestStaticVarInFunctionbE1x = comdat any<br>
            @_ZZ23TestStaticVarInFunctionbE1x = linkonce_odr dso_local
            global i32 123, comdat, align 4</div>
        </blockquote>
        <div><br>
        </div>
        <div>And in my host process, there exists the same symbol. I
          would expect LLJIT to resolve the global variable above to the
          address inside the host process, since it has linkage
          'linkonce_odr'. However, it turns out that LLJIT resolved it
          as if it were a conventional global variable definition and
          gave it its own address (I have added 'GetForCurrentProcess'
          generator for symbol resolution of course). <br>
        </div>
        <div><br>
        </div>
        <div>I can workaround this issue by making the symbol a
          declaration (drop the initializer, comdat and make the linkage
          external), but I'm wondering if it is expected behavior that
          LLJIT does not respect linkonce_odr specifier, since the
          documentation says LLJIT's symbol resolution should work as if
          I were running a normal linker. </div>
        <div><br>
        </div>
        <div>Best,</div>
        <div>Haoran<br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
<a class="moz-txt-link-freetext" href="https://flowcrypt.com/pub/stefan.graenitz@gmail.com">https://flowcrypt.com/pub/stefan.graenitz@gmail.com</a></pre>
  </body>
</html>