<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hey Praveen – and everyone else,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For 1.) <o:p></o:p></p>
<p class="MsoNormal">In my “Main.cpp” file I used <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:blue">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> (*function)() = (</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black">(*)())jit</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">lookup(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515">"?helloOrc@@YAHXZ"</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">While the lookup looked like that:<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">uintptr_t</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> lookup(</span><span style="font-size:9.5pt;font-family:Consolas;color:#2B91AF">StringRef</span><span style="font-size:9.5pt;font-family:Consolas;color:black">
</span><span style="font-size:9.5pt;font-family:Consolas;color:gray">Name</span><span style="font-size:9.5pt;font-family:Consolas;color:black">)
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">      
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">auto</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> result =
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">this</span><span style="font-size:9.5pt;font-family:Consolas;color:black">->es.lookup({&</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">this</span><span style="font-size:9.5pt;font-family:Consolas;color:black">->es.getMainJITDylib()},
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">this</span><span style="font-size:9.5pt;font-family:Consolas;color:black">->mangle</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">(</span><span style="font-size:9.5pt;font-family:Consolas;color:gray">Name</span><span style="font-size:9.5pt;font-family:Consolas;color:black">.str()</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">)</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">      
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">if</span><span style="font-size:9.5pt;font-family:Consolas;color:black">(result)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">       {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">             
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">return</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> result</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">getAddress();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">       }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black">      
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">return</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> 0x0;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal">Basically – it is the code from the tutorial, besides I wanted it to return an unintpr_t.<br>
Anyway, if I remove “<span style="font-size:9.5pt;font-family:Consolas;color:blue">this</span><span style="font-size:9.5pt;font-family:Consolas;color:black">->mangle</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">(</span><span style="font-size:9.5pt;font-family:Consolas;color:gray">Name</span><span style="font-size:9.5pt;font-family:Consolas;color:black">.str()</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">)</span>”
 and use “<span style="font-size:9.5pt;font-family:Consolas;color:gray">Name</span><span style="font-size:9.5pt;font-family:Consolas;color:black">.str()</span>” instead - then it is still working. This is why I wonder, why that call is important.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">A call like:<br>
<span style="font-size:9.5pt;font-family:Consolas;color:blue">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black"> (*function)() = (</span><span style="font-size:9.5pt;font-family:Consolas;color:blue">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black">(*)())jit</span><span style="font-size:9.5pt;font-family:Consolas;color:teal">-></span><span style="font-size:9.5pt;font-family:Consolas;color:black">lookup(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515">"int
 helloOrc()"</span><span style="font-size:9.5pt;font-family:Consolas;color:black">);</span><br>
Never worked.<span style="font-size:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:teal"><o:p> </o:p></span></p>
<p class="MsoNormal">For 2.)<br>
I solved the problem by exporting the missing symbols, I just wanted to understand if the error is coming from the “DynamicLibrarySearchGenerator” and if I can silence it to keep my console output clean.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For 3.) <o:p></o:p></p>
<p class="MsoNormal">I understand that!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you so much for this x3<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Kind greetings<o:p></o:p></p>
<p class="MsoNormal">Björn<o:p></o:p></p>
<p class="MsoNormal"><span style="color:teal"><o:p> </o:p></span></p>
<p class="MsoNormal"><b>From:</b> Praveen Velliengiri <praveenvelliengiri@gmail.com>
<br>
<b>Sent:</b> Donnerstag, 12. September 2019 19:51<br>
<b>To:</b> David Blaikie <dblaikie@gmail.com><br>
<b>Cc:</b> Gaier, Bjoern <Bjoern.Gaier@horiba.com>; Lang Hames <lhames@gmail.com>; llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] Questions after completed Kaleidoscope Chapter 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">Hi Bjoren,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">For question 1:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">As you mentioned, it is used to mangle to the symbol name and interning them, So ORC can find them at runtime in one of the JITDylibs. It would be helpful to know what you tried? (please attach code lines).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">For question 2:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">I guess you might be missing to link libraries that your program depend on, you can do that via setting up your dynamiclibrary search generator or getCurrentProcess symbols. Plus, Why do you want to hide them, it is an error?
<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">For question 3:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Currently, every symbol whether it is added via generator or not, must be defined in a JITDylib. It is more of a design choice, it makes implementation and resolution logic much easier within ORC.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Praveen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Thu, 12 Sep 2019 at 22:56, David Blaikie via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal">(adding Lang Hames, Orcish Scientist, for Orc-related queries)<br>
<br>
On Thu, Sep 12, 2019 at 3:23 AM Gaier, Bjoern via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Hello there,<br>
><br>
><br>
><br>
> I finished Chapter 1 of the Kaleidoscope tutorial for using the Orc JIT API. I played around with some things and ended with some questions.<br>
><br>
><br>
><br>
> What is the use of “MangleAndInterner”?<br>
> I read it is used to mangle the name for the lookup search, but I seem to be not able to use it correctly. In my first attempt I used the mangled name of my function “?helloOrc@@YAHXZ” with the lookup method – that worked.<br>
><br>
> Now I tried “int helloOrc()” and it failed/did not found the function. Then I tried “?helloOrc@@YAHXZ” again but removed the use of the “MangleAndInterner” instance – that worked again.<br>
><br>
> What is that instance used for?<br>
><br>
><br>
><br>
> JIT session error<br>
><br>
> When I first run the JIT, the message “JIT session error: Symbols not found: { __security_check_cookie, __security_cookie }” was printed into the console.<br>
><br>
> Origin<br>
> Is that message coming from "DynamicLibrarySearchGenerator”?<br>
><br>
><br>
><br>
> Redirect<br>
> Can I somehow redirect this message to a string or something, or silence it? I want to keep my console output clean.<br>
><br>
><br>
><br>
> Generator function<br>
><br>
> Why does the generator function looks like this: “SymbolNameSet(JITDylib &Parent, const SymbolNameSet &Names)”?<br>
><br>
> I understood, that the “Parent” will be the value from “ES.getMainJITDylib()” while “Names” will have the names that should be resolved. I saw an implementation for the Generator function that kinda looked like that:<br>
> {<br>
><br>
>       orc::SymbolNameSet Added;<br>
><br>
>       orc::SymbolMap     NewSymbols;<br>
><br>
><br>
><br>
>       for(auto &Name : Names)<br>
><br>
>       {<br>
><br>
>             Added.insert(Name);<br>
><br>
>             NewSymbols[Name] = //Something<br>
><br>
>       }<br>
><br>
><br>
><br>
>       Parent.define(absoluteSymbols(std::move(NewSymbols)));<br>
><br>
>       return Added;<br>
><br>
> }<br>
><br>
><br>
><br>
> I understood that “SymbolMap NewSymbols” will store a pair of name and the address to resolve – but why do I tell the JITDylib about this?<br>
> And why do I also keep a map of the symbols I added and have to return them? (SymbolNameSet Added)<br>
><br>
><br>
><br>
> I hope my questions are not too stupid and that someone can help me with that!<br>
><br>
> Thank you a lot x3<br>
><br>
><br>
><br>
> Kind greetings<br>
><br>
> Björn<br>
><br>
> 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, Takeshi Fukushima. Junichi Tajika<br>
> _______________________________________________<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><br>
_______________________________________________<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><o:p></o:p></p>
</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, Takeshi Fukushima. Junichi Tajika
</body>
</html>