<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Bjoern,<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">> Symbol names shouldn't change from the moment they're added to the JIT (i.e. after being fully mangled). Consistency of symbol names is a requirement for ORC to work.<br>Right, what I meant was, that some of the symbols I take from the modules might disappear… I don’t remember the details anymore, but I think I encountered the symbol for an intrinsic version of memcpy but after the compilation it became a call to memcpy.<br>Does that explain what I mean?</blockquote></div><div><br></div><div>Oh -- You only want to look at definitions, not declarations. It's totally fine if your code adds or removes <i>uses</i> of other symbols -- that only changes the lookups that the JIT linker will need to perform at the end of the process. What's really important is that the definitions do not change.</div><div><br></div><div>That said: <i>Sometimes</i> the compiler does add or remove definitions. E.g. COFF COMDATS for floating point constants (see <a href="http://lists.llvm.org/pipermail/llvm-dev/2020-January/138584.html">http://lists.llvm.org/pipermail/llvm-dev/2020-January/138584.html</a>). These cases are rare, but if you hit one please let me know: We probably need to teach ORC to recognize it.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">So I would use the function “setPlatform” of the ”ExecutionSession”? But wouldn’t I override something really important with that?</blockquote><div><br></div><div>It depends on whether you're using LLJIT or a custom JIT class. ExecutionSession doesn't set a Platform by default so you're free to (ab)use the Platform when writing a custom JIT class. LLJIT <i>does</i> set up a Platform, but we could look at moving that into a header so that you could extend it with your own behavior.</div><div><br></div><div>-- Lang.</div><div><br></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 19, 2020 at 4:29 AM Gaier, Bjoern <<a href="mailto:Bjoern.Gaier@horiba.com">Bjoern.Gaier@horiba.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">





<div lang="DE">
<div class="gmail-m_-6453321370896536699WordSection1">
<p class="MsoNormal"><span lang="EN-GB">Hey Lang,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">> </span>
<span lang="EN-GB">Symbol names shouldn't change from the moment they're added to the JIT (i.e. after being fully mangled). Consistency of symbol names is a requirement for ORC to work.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Right, what I meant was, that some of the symbols I take from the modules might disappear… I don’t remember the details anymore, but I think I encountered the symbol for an intrinsic
 version of memcpy but after the compilation it became a call to memcpy.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Does that explain what I mean?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">> </span>
<span lang="EN-GB">You could try hooking into the orc::Platform API for this: </span><a href="https://hes32-ctp.trendmicro.com:443/wis/clicktime/v1/query?url=https%3a%2f%2fgithub.com%2fllvm%2fllvm%2dproject%2fblob%2fec29538af2e0886a65f479d6a533956a1c478132%2fllvm%2finclude%2fllvm%2fExecutionEngine%2fOrc%2fCore.h%23L1062&umid=a9f2d13d-7fe0-42bd-b679-39bf94f23b19&auth=b6f66d00f8195cc5198eee21f0dbabe6af0a3180-0818ddd39fac560390288eccb348f4aef06ae077" target="_blank"><span lang="EN-GB">https://github.com/llvm/llvm-project/blob/ec29538af2e0886a65f479d6a533956a1c478132/llvm/include/llvm/ExecutionEngine/Orc/Core.h#L1062</span></a><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">So I would use the function “setPlatform” of the ”ExecutionSession”? But wouldn’t I override something really important with that?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Thank you so far Lang :D <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Kind greetings<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Björn</span><span lang="EN-GB"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Lang Hames <<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>>
<br>
<b>Sent:</b> 18 August 2020 18:05<br>
<b>To:</b> Gaier, Bjoern <<a href="mailto:Bjoern.Gaier@horiba.com" target="_blank">Bjoern.Gaier@horiba.com</a>><br>
<b>Cc:</b> LLVM Developers Mailing List <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [llvm-dev] Get all symbols stored(?)in llvm::orc::ExecutionSession<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hi Bjoern,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal">I’m a bit worried about taking symbols from modules, because some of the symbols might change later when the code was compiled with the JIT<u></u><u></u></p>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Symbol names shouldn't change from the moment they're added to the JIT (i.e. after being fully mangled). Consistency of symbol names is a requirement for ORC to work.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">You could try hooking into the orc::Platform API for this: <a href="https://hes32-ctp.trendmicro.com:443/wis/clicktime/v1/query?url=https%3a%2f%2fgithub.com%2fllvm%2fllvm%2dproject%2fblob%2fec29538af2e0886a65f479d6a533956a1c478132%2fllvm%2finclude%2fllvm%2fExecutionEngine%2fOrc%2fCore.h%23L1062&umid=a9f2d13d-7fe0-42bd-b679-39bf94f23b19&auth=b6f66d00f8195cc5198eee21f0dbabe6af0a3180-0818ddd39fac560390288eccb348f4aef06ae077" target="_blank">https://github.com/llvm/llvm-project/blob/ec29538af2e0886a65f479d6a533956a1c478132/llvm/include/llvm/ExecutionEngine/Orc/Core.h#L1062</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The notifyAdding method will be called for each MaterializationUnit added to the JIT, which gives you an opportunity to iterate over the symbols that it provides and record them.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Lang.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Aug 17, 2020 at 11:16 PM Gaier, Bjoern <<a href="mailto:Bjoern.Gaier@horiba.com" target="_blank">Bjoern.Gaier@horiba.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span lang="EN-GB">Hey Lang,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Oh shoot… seems like I oversaw it… Sorry sorry sorry! (I was 5 weeks away but I thought I checked all mails correctly >o<)</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">I think ORCs assumption is correct, currently I do extract the symbols which I care about via the modules, but when writing the code I was like “why do I have
 to do it like that, when the ExecutionSession already knows all symbols?” – that is where my question came from.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">However… I’m a bit worried about taking symbols from modules, because some of the symbols might change later when the code was compiled with the JIT. So I felt
 like that the ExecutionSession would been more reliable. </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">But if I reaaaally want such a function, I could basically have a look into the dump function… Cause I think my motivation is not convincing xD</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Thank you Lang!</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Kind greetings</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Björn</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Lang Hames <<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>>
<br>
<b>Sent:</b> 17 August 2020 18:40<br>
<b>To:</b> Gaier, Bjoern <<a href="mailto:Bjoern.Gaier@horiba.com" target="_blank">Bjoern.Gaier@horiba.com</a>><br>
<b>Cc:</b> LLVM Developers Mailing List <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [llvm-dev] Get all symbols stored(?)in llvm::orc::ExecutionSession</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">Hi Bjoern,<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Did you see my previous reply?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<p class="MsoNormal">There's no way to do this currently. ORC assumes you know all the symbols, since you added the modules defining them.<br>
For testing / debugging you can dump the modules to stderr using ExecutionSession::dump, but that's about it.<br>
Do you want the symbols for diagnostic purposes, or some other reason?<u></u><u></u></p>
</blockquote>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Lang.<u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Aug 17, 2020 at 5:19 AM Gaier, Bjoern via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin:5pt 0cm 5pt 4.8pt">
<div>
<div>
<p class="MsoNormal"><span lang="EN-GB">This issue is still not solved for me…<br>
<br>
What can I improve on my question? :o</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Adding more details or something? >_x<br>
<br>
Kind greetings</span><u></u><u></u></p>
<p class="MsoNormal" style="margin-bottom:12pt"><span lang="EN-GB">Björn</span><u></u><u></u></p>
<div>
<div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>>
<b>On Behalf Of </b>Gaier, Bjoern via llvm-dev<br>
<b>Sent:</b> 03 July 2020 13:51<br>
<b>To:</b> LLVM Developers Mailing List <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [llvm-dev] Get all symbols stored(?)in llvm::orc::ExecutionSession</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Hey everyone,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">is there a way to get the name of all symbols that are stored (“stored” is not the right term – is it?) in my current ExecutionSession?</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">I know by now that you can use "lookup" to get symbols, but this requires knowing those names.
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Mhh... I guess that is my shortest so far question xD Thank you in advance for any help!</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Kind greetings</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Björn</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal">Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert,
 Takashi Nagano, Junichi Tajika, Ergin Cansiz. <u></u><u></u></p>
</div>
<p class="MsoNormal">Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert,
 Takashi Nagano, Junichi Tajika, Ergin Cansiz. <u></u><u></u></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<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><u></u><u></u></p>
</blockquote>
</div>
</div>
<p class="MsoNormal">Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Takashi Nagano, Junichi Tajika, Ergin Cansiz.
<u></u><u></u></p>
</div>
</blockquote>
</div>
</div>
Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Takashi Nagano, Junichi Tajika, Ergin Cansiz.
</div>

</blockquote></div>