<div dir="ltr">Yes, like Paul says: the label you're looking for doesn't have a value as far as the assembler knows.  But you could modify the assembler to set some kind of state when it encounters the label you're interested in, and you can check that state when handling directives like `.word`.<div><br></div><div>...sorry to beat a dead horse but the assembler can take the ".s" input and make the ".obj" file.  If you're willing to modify the assembler, why not use it as-is?  It's designed to do the transformation you want.  If you use the assembler as a library, you can even emit the object file into memory and dissect it there.  </div><div><br></div><div>Then again, you could modify the assembler to provide another streamer that only overrides the emit() methods you care about - covering the label and directives.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 18, 2021 at 11:39 AM <<a href="mailto:paul.robinson@sony.com">paul.robinson@sony.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="gmail-m_-3396657711219347823WordSection1">
<p class="MsoNormal">I suspect that the MCSymbol for ‘myvar’ simply represents a position in the output stream, and certainly it is not directly tied to whatever instructions or data directives might chance to follow it.  You’re capturing the labels and data
 directives as they’re emitted, but you’ll have to make the association between them yourself.  The assembler does not consider ‘myvar’ to be a variable name; it’s the name of an offset within a section, which is (ultimately) an address in the final object. 
 How it gets used semantically by the program is not the assembler’s concern.<u></u><u></u></p>
<p class="MsoNormal">HTH,<u></u><u></u></p>
<p class="MsoNormal">--paulr<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> 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>Pietro D'Ettole via llvm-dev<br>
<b>Sent:</b> Thursday, February 18, 2021 12:13 PM<br>
<b>To:</b> Brian Cain <<a href="mailto:brian.cain@gmail.com" target="_blank">brian.cain@gmail.com</a>>; <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> Re: [llvm-dev] Asm Parser vars extraction<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<div>
<p class="MsoNormal">Even if that would be a straightforward and good way to proceed, I cannot take the way you proposed with objdump as the files I'll be dealing with are .s only, no obj files at all.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">So far, I've been able to intercept tha emission of the Label and Value while parsing; in particular, this has been done through the override of the
<i><u>virtual void MCStreamer::emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc = SMLoc())</u></i> method.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">For what I've been able to read from the doxygen documentation, MCExpr should have an attribute of MCSymbol * type which points to the symbol it refers to (in this way it should be easy to match the "myvar" label). Unfortunately I can't
 find a way to extract the actual value from it (i.e. .long directives followed by the values, as shown in the asm file in the last reply).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Now, is it possible to extract the value the way I've just described? If yes, how?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm open to other suggestions and ways to achieve this, anyway (if any).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks!<u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Il giorno gio 18 feb 2021 alle ore 05:09 Brian Cain <<a href="mailto:brian.cain@gmail.com" target="_blank">brian.cain@gmail.com</a>> ha scritto:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">Well, one good way to get this is to let the assembler make the object file and dump the contents of the object file.  I've illustrated w/objdump disassembly but a more robust way might be to use the location and read the data directly
 from the object file.  See below for an example w/objdump.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">But if you can't make the object file for some reason, I think ELFWriter might have what you need, or at least be a starting point.  There is no arch-independent / object-file-independent way to determine where "myvar" will end up.  So
 the way I think it makes sense to get this information is to wait until it's being emitted into the object file.  But this is so late in assembly that it doesn't seem to make as much sense to modify the assembler so much as you might want to dissect its output. 
 And there's lots of great tools and libraries for dissecting object files.  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, another approach might be to modify the assembler to look for labels matching "myvar" and set some kind of mode that lets you accumulate the subsequent ".word" directives.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Also: you described "myvar" as being a variable in a C program.  So this is compiler-emitted assembly?  Maybe it makes more sense to intercept this value in the compiler instead of in the assembler.  It might not be very robust to try and
 scoop up .word's - this output could vary and still be legitimate compiler output.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<blockquote style="margin-left:30pt;margin-right:0in">
<p class="MsoNormal"><span style="font-family:"Courier New"">$ /opt/clang-latest/bin/llvm-mc -filetype=obj -triple=armv7 pietro.S -o pietro.o</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-family:"Courier New"">$ /opt/clang-latest/bin/llvm-objdump --triple=armv7 -d pietro.o</span><u></u><u></u></p>
</div>
<p class="MsoNormal" style="margin-bottom:12pt"><span style="font-family:"Courier New""><br>
pietro.o: file format elf32-littlearm<br>
<br>
Disassembly of section .text:<br>
<br>
...<br>
<b>00000034 <myvar>:<br>
      34: 00 00 00 00 .word 0x00000000<br>
      38: 01 00 00 00 .word 0x00000001<br>
      3c: 02 00 00 00 .word 0x00000002<br>
      40: 03 00 00 00 .word 0x00000003</b></span><u></u><u></u></p>
</blockquote>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Feb 17, 2021 at 10:48 AM Pietro D'Ettole <<a href="mailto:progettoiotpolimi2019@gmail.com" target="_blank">progettoiotpolimi2019@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I'll try to give you more context through an example.<u></u><u></u></p>
<div>
<p class="MsoNormal">What I need is to extract the value of a variable (aka a label) inside an assembly file; for example given the following assembly (compiled with armv7-a clang 10.0.0):<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>
<p class="MsoNormal">main:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        sub     sp, sp, #12<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        mov     r2, #0<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        str     r2, [sp, #8]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        str     r0, [sp, #4]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        str     r1, [sp]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        ldr     r0, .LCPI0_0<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        ldr     r1, [r0, #4]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        ldr     r0, [r0, #8]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        mul     r2, r1, r0<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        mov     r0, r2<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        add     sp, sp, #12<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        bx      lr<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">.LCPI0_0:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        .long   myvar<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">myvar:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        .long   0                       @ 0x0<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        .long   1                       @ 0x1<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        .long   2                       @ 0x2<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        .long   3                       @ 0x3<u></u><u></u></p>
</div>
</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">As you can see there's a label, namely "myvar", which is a variable in the C program. What I'm trying to achieve is, while parsing with the Asm Parser, get the parsed value of "myvar" out of the asm file (i.e. get the values of 0x0, 0x1,
 0x2, 0x3). Is this possible?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks a lot!<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
<div id="gmail-m_-3396657711219347823gmail-m_8689612410467660059gmail-m_-9023349424044236096DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2">
<p class="MsoNormal"><u></u> <u></u></p>
<table border="1" cellspacing="3" cellpadding="0" style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(211,212,222)">
<tbody>
<tr>
<td width="55" style="width:41.25pt;border:none;padding:13.5pt 0.75pt 0.75pt">
<p class="MsoNormal"><a href="https://urldefense.com/v3/__http:/www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail__;!!JmoZiZGBv3RvKRSx!qgVwD7iMmy2B0XeAZCRNKis4oRthX9uZ1wrhAa-RmgXOd-d5G6CJVIxa_398yT8Yrw$" target="_blank"><span style="text-decoration:none"><img border="0" width="46" height="29" style="width: 0.4833in; height: 0.3in;" id="gmail-m_-3396657711219347823_x0000_i1025" src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-green-avg-v1.png"></span></a><u></u><u></u></p>
</td>
<td width="470" style="width:352.5pt;border:none;padding:12.75pt 0.75pt 0.75pt">
<p class="MsoNormal" style="line-height:13.5pt"><span style="font-size:10pt;font-family:Arial,sans-serif;color:rgb(65,66,78)">Mail priva di virus.
<a href="https://urldefense.com/v3/__http:/www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail__;!!JmoZiZGBv3RvKRSx!qgVwD7iMmy2B0XeAZCRNKis4oRthX9uZ1wrhAa-RmgXOd-d5G6CJVIxa_398yT8Yrw$" target="_blank">
<span style="color:rgb(68,83,234)">www.avg.com</span></a> <u></u><u></u></span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Il giorno mar 9 feb 2021 alle ore 03:01 Brian Cain <<a href="mailto:brian.cain@gmail.com" target="_blank">brian.cain@gmail.com</a>> ha scritto:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">I don't quite know exactly, but I suppose one way would be to modify ELFWriter::writeSymbol() to emit something when a symbol appears that matches your criteria.  I'm taking some liberty here assuming you can use an ELF object file.  I
 imagine there's something similar for macho/coff.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Then again, that information is present in the object file too.  You could use llvm-readelf or obj2yaml to extract what you want.<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Maybe you could give a little more context about how you plan to use the info and the community could offer a better answer.<u></u><u></u></p>
<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>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Feb 8, 2021 at 5:03 PM Pietro D'Ettole <<a href="mailto:progettoiotpolimi2019@gmail.com" target="_blank">progettoiotpolimi2019@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">Hi Brian, thanks for your reply.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">My goal is to be able to extract from an assembly file (i.e. source compiled to assembly, directly) the static global vars declared in the source. So far I haven't found any API in the llvm asm parser to serve my purpose. Do you know if/
 how I can accomplish that?<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thank you.<u></u><u></u></p>
<div>
<p class="MsoNormal"><br>
<br>
Il giorno sabato 6 febbraio 2021, Brian Cain <<a href="mailto:brian.cain@gmail.com" target="_blank">brian.cain@gmail.com</a>> ha scritto:<u></u><u></u></p>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">You need to extract it from the source?  Is it possible to use the resulting object file instead?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Note that there's no way to get an 'address' but you can get a section offset. The section offset for both code and data are available in the object file and from the assembler as it writes the object file.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">The contents of the assembly file - instructions and directives - contribute to the resulting layout.  The AsmParser can find tokens and build instructions but shouldn't know how it will get layed out.<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Sat, Feb 6, 2021, 3:16 AM Pietro D'Ettole 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-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm a little bit stuck in code reading right now. Maybe some of you can help me to understand fast if what I need is feasible or not.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I was trying to understand if currently asm parser in llvm allows to easily extract from an asm file variable names alongside with their values and their addresses.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks for the help!<u></u><u></u></p>
</div>
</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://urldefense.com/v3/__https:/lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev__;!!JmoZiZGBv3RvKRSx!qgVwD7iMmy2B0XeAZCRNKis4oRthX9uZ1wrhAa-RmgXOd-d5G6CJVIxa_3-cSqTCSQ$" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><u></u><u></u></p>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<p class="MsoNormal">-Brian<u></u><u></u></p>
</div>
</blockquote>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<p class="MsoNormal">-Brian<u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">-Brian</div>