<div dir="ltr">Hey all, and Paul,<div>first of all thanks again to Paul for the help, I'm replying to this message with a little more details to the solution I used for future reference for anyone who's a beginner in LLVM and requires it.</div><div><br></div><div>Once the code selection is complete, the AsmPrinter takes control,</div><div>At first it lowers the MachineInstr into MCInst, and then proceed to generate what ever was asked of it (assembly/obj).</div><div><br></div><div>During the work of AsmPrinter, you could call OutStreamer->EmitLabel which accepts MCSymbol, and in turn creates a symbol in the current location you are at (for example, if you call this during the EmitInstruction function, the symbol will be generated at the location of the current instruction being emitted)</div><div><br></div><div>I also needed to add relocation to a MOV_RI instruction, during the time working on this I learned about ComplexPattern which gave me the ability to create an instruction that can accept either immediate and MCSymbol as it's second operand, and in the <span style="color:rgb(111,66,193);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre">MCCodeEmitter::getMachineOpValue</span> hook you can turn the MCSymbol into a fix-up (which in the next few steps, in my case, will turn in to link-time relocation). (Some of you might notice this case is very similar to x86 MOV32RI instruction)</div><div><br></div><div>I hope this information helps people with the same case as mine in the future, Liad.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 14, 2017 at 11:34 PM, Robinson, Paul <span dir="ltr"><<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div class="m_-5958538093214585975WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Liad,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">I'm not an expert in MC, but what you describe doesn't sound any different from how you would handle a branch instruction.  Create an MCSymbol that represents
 the address of the target instruction; use that symbol as an operand in the referencing instruction; emit the symbol as a label just prior to emitting the target instruction.  The second and third steps can occur in either order, depending on which instruction
 is emitted first.  I'd expect the reference to be fixed up as part of the normal assembly and linking process, nothing special there.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">It's a little more complicated if the two instructions are in different compilation units, but if they are in the same compilation then it should be pretty
 straightforward.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">--paulr
<u></u><u></u></span></p>
<p class="MsoNormal"><a name="m_-5958538093214585975__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Liad Mordekoviz [mailto:<a href="mailto:liad.mordekoviz@nextsilicon.com" target="_blank">liad.mordekoviz@<wbr>nextsilicon.com</a>]
<br>
<b>Sent:</b> Thursday, December 14, 2017 1:00 PM<br>
<b>To:</b> Robinson, Paul; llvm-dev<br>
<b>Subject:</b> Re: [llvm-dev] Help adding entries to .symtab<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">Hey Paul,</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">first of all thank you for taking the time to answer me,<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">if I understand you correctly, I need to modify the instruction it self so one of it's operands is a symbol, and then at MC layer handle that symbol and add an entry to the symtab for that label?<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">What kind of symbol should I use doing such thing? external symbol or MCSymbol?<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">I was trying to find where in the code during the MC layer I add entries to the symtab, I'd really appreciate some directions in the area.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">Let me give an example so my questions might be a bit more clearer:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">BB#0<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">...some opcodes...<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">mov r1, BB#1<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">BB#1<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">...some opcodes...<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">I'd like to put a place holder instead of the BB#1 in the mov opcode, and create a symbol named "BB#1" that points to that opcode, so during link time I can replace that placeholder with the actual address
 of BB#1.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">Again thank you for your time and answer,<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">Liad.<u></u><u></u></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Thu, Dec 14, 2017 at 9:03 PM, Robinson, Paul <<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>> wrote:<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">The .symtab has symbols; you could define a label for the instruction, and store something in the
 symbol table entry for the label.  This kind of thing would be done in the MC layer.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">This would be one way to provide annotations that aren't needed for execution.  If you need to change
 the instruction itself, for example to have the instruction refer to memory somewhere, then you need to modify the instruction itself.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">--paulr</span><u></u><u></u></p>
<p class="MsoNormal"><a name="m_-5958538093214585975_m_-332612994014142287__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"> </span></a><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@<wbr>lists.llvm.org</a>]
<b>On Behalf Of </b>Liad Mordekoviz via llvm-dev<br>
<b>Sent:</b> Thursday, December 14, 2017 2:37 AM<br>
<b>To:</b> llvm-dev<br>
<b>Subject:</b> [llvm-dev] Help adding entries to .symtab</span><u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Hi everyone,<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I am fairly new to LLVM, I'm working on a new backend.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I am trying to add information to a specific instruction using the .symtab in the ELF format.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I've been searching through the LLVM source code trying to find a way to do such a thing.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Can anyone help me with some directions or point me to some documents in the matter.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks, Liad.<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>
</div>

</blockquote></div><br></div>