<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>