<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hello, <br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thank you all for prompt reply.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<a id="OWAAM675036" class="_1OtrSZdhKXVv3UhaivrdJ4 mention ms-bgc-nlr ms-fcl-b" href="mailto:paul.robinson@sony.com">@Robinson, Paul</a>,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks for the shorter list of operators, but as Michael has suggested, i have added a vendor specific operator for that in llvm/lldb(fork of our branch anyways).</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
the operator, pops the stack entry and byte reverses the value and pushes it back on the stack.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div><a id="OWAAM360261" class="_1OtrSZdhKXVv3UhaivrdJ4 mention ms-bgc-nlr ms-fcl-b" href="mailto:ron.brender@gmail.com">@Ron Brender</a><br>
</div>
<div>The operator that i was suggesting, pops the top of the stack, reverses the bytes and pushes it on the stack(like neg operator does for negation).(on second thought the byte_rev would be a better name)
<br>
</div>
<div>About the other cases you suggested, i sure hope others can help to zero in for perfect
<br>
</div>
<div>design to cover wide range.<br>
</div>
<div><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<a id="OWAAM190192" class="_1OtrSZdhKXVv3UhaivrdJ4 mention ms-bgc-nlr ms-fcl-b" href="mailto:eager@eagercon.com">@Michael Eager</a></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks, i have tried the same for our fork of llvm/lldb branch and it seems to be working well(for our case :).
<a href="https://gitlab.phidani.be/Chirag.Patel" id="LPlnk713515">https://gitlab.phidani.be/Chirag.Patel</a>
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thank you all for the helpful comments. i will open a dwarf enhancement request soon.<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Best Regards.<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;"><b><span style="color:#2F5597" lang="EN-US"><br>
</span></b></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;"><b><span style="color:#2F5597" lang="EN-US">Chirag Patel</span></b><span style="color:#2F5597" lang="EN-US"><br>
</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;"><span style="color:#2F5597" lang="EN-US">Software Engineer<b> |
</b>Raincode Labs India</span><b><span style="font-size:10.0pt; color:#2F5597" lang="EN-US"><br>
</span></b></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;"><span style="color:#2F5597">Tel: (+91) 080 41159811</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;"><span style="color:#2F5597">Mob: (+91) 9049336744</span><br>
<span style="font-size:10.0pt; color:#2F5597" lang="EN-US"></span></p>
<u><span style="color:blue" lang="EN-US"><a href="http://www.raincodelabs.com/" target="_blank" rel="noopener noreferrer"></a></span></u></div>
<div dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
</div>
<a href="https://www.linkedin.com/in/chirag-patel-/" class="OWAAutoLink">
<div dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<br>
</div>
<div dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<img class="EmojiInsert" data-outlook-trace="F:1|T:1" src="cid:68b118f1-419e-4f8e-a7ba-1d94b0379f85"></div>
</a>
<div dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<br>
<p style="margin-top: 0px; margin-bottom: 0px;"></p>
</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Michael Eager <eager@eagercon.com><br>
<b>Sent:</b> 28 October 2019 20:37<br>
<b>To:</b> Robinson, Paul <paul.robinson@sony.com>; Chirag Patel <Chirag@raincode.com><br>
<b>Cc:</b> dwarf-discuss@lists.dwarfstd.org <dwarf-discuss@lists.dwarfstd.org><br>
<b>Subject:</b> Re: [Dwarf-Discuss] dwarf stack operator for byte swap.</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hi Chirag --<br>
<br>
A byte-swap operator would be a reasonable addition to the DWARF <br>
interpreter.<br>
<br>
In addition to writing a proposal as Paul suggests, one option I would <br>
recommend you consider is to create a user-defined operation to perform <br>
this byte-swap operation and give it a value in the range between <br>
DW_OP_lo_user and DW_OP_hi_user.  Of course, this user-defined would <br>
need to be implemented not only in the producer (i.e., compiler) but in <br>
any consumers (i.e., debugger).<br>
<br>
When a new version of the DWARF Standard is released, this operation <br>
would be assigned a new value.<br>
<br>
On 10/28/19 6:53 AM, Robinson, Paul via Dwarf-Discuss wrote:<br>
> Hello Chirag,<br>
> <br>
> Regarding a byte-swap operation, it seems that you have a reasonable <br>
> use-case on a bi-endian machine.  Feel free to request a new operator on <br>
> the “public comments” page at <a href="http://dwarfstd.org/Comment.php">http://dwarfstd.org/Comment.php</a><br>
> <br>
> Note that a byte-swap operator would swap all bytes in the top-of-stack <br>
> value, which on your 64-bit machine would of course be a 64-bit value.  <br>
> As you want a 32-bit swapped value, you would still need to do a shift <br>
> afterward, but even so, “DW_OP_byte_swap DW_OP_const1u 32 DW_OP_shr” <br>
> would be considerably shorter than what you have to do now.<br>
> <br>
> Of course a new operator would be introduced in a new DWARF revision, <br>
> which is likely to be years away.  In the meantime let me suggest a <br>
> shorter expression for doing the byte-swap operation.  The book <br>
> “Hacker’s Delight” shows a straightforward 32-bit byte swap with masks <br>
> no wider than 16 bits, as follows:<br>
> <br>
>                 x = (x << 24) | ((x & 0xff00) << 8) | ((x >> 8) & <br>
> 0xff00) | (x >> 24);<br>
> <br>
> Your 64-bit machine will of course use 64-bit values on the expression <br>
> stack, so to keep the result “32-bit clean” we want to do one additional <br>
> mask:<br>
> <br>
>                 x = ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x >> 8) <br>
> & 0xff00) | (x >> 24);<br>
> <br>
> Translating this into a DWARF expression, I get the following:<br>
> <br>
>                 DW_OP_dup, DW_OP_const1u 0xff, DW_OP_and, DW_OP_lit24, <br>
> DW_OP_shl, DW_OP_swap, DW_OP_dup, DW_OP_const2u 0xff00, DW_OP_and, <br>
> DW_OP_lit8, DW_OP_shl, DW_OP_swap, DW_OP_dup, DW_OP_lit8, DW_OP_shr, <br>
> DW_OP_const2u 0xff00, DW_OP_and, DW_OP_swap, DW_OP_lit24, DW_OP_shr, <br>
> DW_OP_or, DW_OP_or, DW_OP_or<br>
> <br>
> I hope this is helpful to you.<br>
> <br>
> --paulr<br>
> <br>
> *From:* Dwarf-Discuss <dwarf-discuss-bounces@lists.dwarfstd.org> *On <br>
> Behalf Of *Chirag Patel via Dwarf-Discuss<br>
> *Sent:* Monday, October 28, 2019 12:47 AM<br>
> *To:* dwarf-discuss@lists.dwarfstd.org<br>
> *Subject:* [Dwarf-Discuss] dwarf stack operator for byte swap.<br>
> <br>
> Hello Dwarf experts.<br>
> <br>
> I am currently working trying to encode dwarf of binaries with having <br>
> bi-endian variables marked with DW_AT_endianity attribute.<br>
> <br>
> The location calculation for some  variable depends on other variable <br>
> with different endianity, also the value of this other variable is known <br>
> at runtime.<br>
> <br>
> At the moment I am using location list to calculate the correct location <br>
> of first variable and list of dwarf operators to reverse the endianity <br>
> of variable “__gbloffset__” in below case (I only needed lower 32 bits <br>
> on 64 bit machine).<br>
> <br>
> 0x000001e5: DW_TAG_base_type<br>
> <br>
>   DW_AT_byte_size  (0x04)<br>
> <br>
>    DW_AT_encoding  (DW_ATE_signed)<br>
> <br>
>                  DW_AT_name      ("int")<br>
> <br>
>                  DW_AT_endianity (DW_END_big)<br>
> <br>
> …<br>
> <br>
> 0x00000057:   DW_TAG_variable<br>
> <br>
>                  DW_AT_name      ("__gbloffset__")<br>
> <br>
>                  DW_AT_type      (0x000001e5 "int")<br>
> <br>
>                  DW_AT_external  (true)<br>
> <br>
>                  DW_AT_decl_file ("…")<br>
> <br>
>                  DW_AT_decl_line (8)<br>
> <br>
>                  DW_AT_location  (DW_OP_addr 0) // pre linkage<br>
> <br>
>                  DW_AT_linkage_name      ("_gblsection__")<br>
> <br>
> 0x00000170:   DW_TAG_variable<br>
> <br>
>                  DW_AT_name      ("VAR1")<br>
> <br>
>                  DW_AT_type      (0x0000010b "fixed.dec.display.72")<br>
> <br>
>                  DW_AT_decl_file ("…")<br>
> <br>
>                  DW_AT_decl_line (10)<br>
> <br>
>                  DW_AT_location  (DW_OP_addr 0x0, DW_OP_call4 0x57, <br>
> DW_OP_deref_size, 4,<br>
> <br>
> DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit0, DW_OP_shl, DW_OP_and, <br>
> DW_OP_lit24, DW_OP_shl, DW_OP_swap, DW_OP_dup, DW_OP_constu 0xff, <br>
> DW_OP_lit8, DW_OP_shl, DW_OP_and, DW_OP_lit8, DW_OP_shl, DW_OP_swap, <br>
> DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit16, DW_OP_shl, DW_OP_and, <br>
> DW_OP_lit8, DW_OP_shr, DW_OP_swap, DW_OP_constu 0xff, DW_OP_lit24, <br>
> DW_OP_shl, DW_OP_and, DW_OP_lit24, DW_OP_shr, DW_OP_swap, DW_OP_or, <br>
> DW_OP_or, DW_OP_or, DW_OP_plus)<br>
> <br>
>                  DW_AT_linkage_name      ("VAR1")<br>
> <br>
> In above snippet of dwarf dump, I am using yellow highlighted list of <br>
> operators to swap the bytes.<br>
> <br>
> I think there should be a support for DW_OP_byte_swap simple operator to <br>
> accomplice this simple task. Does this idea looks like it can be useful? <br>
> Is there any specific reason why dwarf spec does not have it or I am <br>
> missing something subtle.<br>
> <br>
> I hope I conveyed the idea properly, apologies in advanced as English is <br>
> not my first language.<br>
> <br>
> **<br>
> <br>
> *Thanks and regards,*<br>
> <br>
> **<br>
> <br>
> *Chirag Patel*<br>
> <br>
> Software Engineer | Raincode Labs India<br>
> <br>
> *Tel*: (+91) 080 41159811<br>
> <br>
> *Mob*: (+91) 9049336744<br>
> <br>
> <a href="http://www.raincodelabs.com">www.raincodelabs.com</a> <<a href="http://www.raincodelabs.com/">http://www.raincodelabs.com/</a>>__<br>
> <br>
> linkedin-button <<a href="https://in.linkedin.com/in/chirag-patel-">https://in.linkedin.com/in/chirag-patel-</a>><br>
> <br>
> <br>
> _______________________________________________<br>
> Dwarf-Discuss mailing list<br>
> Dwarf-Discuss@lists.dwarfstd.org<br>
> <a href="http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org">http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org</a><br>
> <br>
<br>
-- <br>
Michael Eager    eager@eagercon.com<br>
1960 Park Blvd., Palo Alto, CA 94306<br>
</div>
</span></font></div>
</body>
</html>