Hello Michael, Thanks for opening the issue. Can you kindly provide me with the details about what is the next step, till issue gets accepted/rejected or any modifications are needed?
Regards, Chirag Patel Software Engineer | Raincode Labs India Tel: (+91) 080 41159811 Mob: (+91) 9049336744 ________________________________ From: Chirag Patel Sent: 11 November 2019 13:07:19 To: Michael Eager <ea...@eagercon.com>; Robinson, Paul <paul.robin...@sony.com>; Ron Brender <ron.bren...@gmail.com> Cc: dwarf-discuss@lists.dwarfstd.org <dwarf-discuss@lists.dwarfstd.org> Subject: RE: [Dwarf-Discuss] dwarf stack operator for byte swap. Hello Michael, Thanks for the confirmation. Kindly inform me if anything needs to be updated from myside. Regards, Chirag Patel Software Engineer | Raincode Labs India Tel: (+91) 080 41159811 Mob: (+91) 9049336744 www.raincodelabs.com<http://www.raincodelabs.com> -----Original Message----- From: Michael Eager <ea...@eagercon.com> Sent: 08 November 2019 20:04 To: Chirag Patel <chi...@raincode.com>; Robinson, Paul <paul.robin...@sony.com>; Ron Brender <ron.bren...@gmail.com> Cc: dwarf-discuss@lists.dwarfstd.org Subject: Re: [Dwarf-Discuss] dwarf stack operator for byte swap. Hi Chirag -- Thanks for your submission. It was received. I'm redesigning the DWARF website, in part to address the problem that it receives a lot of spam submissions. Your issue will be posted soon. On 11/7/19 10:51 PM, Chirag Patel wrote: > Hi all, > > I have sent a comment through http://dwarfstd.org/Comment.php > > But below is the body of the comment “ > > Section 2.5.1.7, pg 37 > > DW_OP_byte_swap to Byte Swap the data on top of the dwarf stack. > > ====================================================================== > ========= > > Overview > > ------------ > > For debugging binary with bi-endian marked dwarf DIEs and the some > calculation > > depending at runtime, the data needs to be loaded at runtime and needs > to be > > byte swapped. the depended variable DIE here is marked as big-endian > and the > > host is little-endian. The DW_OP_byte_swap will byte swap the raw data > stored > > in top dwarf stack entry. > > … > > 0x00000057: DW_TAG_variable > > DW_AT_name ("__gbloffset__") > > DW_AT_type (0x000001e5 "int") > > DW_AT_external (true) > > DW_AT_decl_file ("…") > > DW_AT_decl_line (8) > > DW_AT_location (DW_OP_addr 0) // pre linkage > > DW_AT_linkage_name ("_gblsection__") > > DW_AT_endianity (DW_END_big) > > 0x00000170: DW_TAG_variable > > DW_AT_name ("VAR1") > > DW_AT_type (0x0000010b "fixed.dec.display.72") > > DW_AT_decl_file ("…") > > DW_AT_decl_line (10) > > DW_AT_location (DW_OP_addr 0x0, DW_OP_call4 0x57, > DW_OP_deref_size, 4, > > DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit0, DW_OP_shl, DW_OP_and, > DW_OP_lit24, DW_OP_shl, DW_OP_swap, DW_OP_dup, DW_OP_constu 0xff, > DW_OP_lit8, DW_OP_shl, DW_OP_and, DW_OP_lit8, DW_OP_shl, DW_OP_swap, > DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit16, DW_OP_shl, DW_OP_and, > DW_OP_lit8, DW_OP_shr, DW_OP_swap, DW_OP_constu 0xff, DW_OP_lit24, > DW_OP_shl, DW_OP_and, DW_OP_lit24, DW_OP_shr, DW_OP_swap, DW_OP_or, > DW_OP_or, DW_OP_or, DW_OP_plus) > > DW_AT_linkage_name ("VAR1") > > In above snippet, the DW_OP_byte_swap will replace, > > DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit0, DW_OP_shl, DW_OP_and, > DW_OP_lit24, DW_OP_shl, DW_OP_swap, DW_OP_dup, DW_OP_constu 0xff, > DW_OP_lit8, DW_OP_shl, DW_OP_and, DW_OP_lit8, DW_OP_shl, DW_OP_swap, > DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit16, DW_OP_shl, DW_OP_and, > DW_OP_lit8, DW_OP_shr, DW_OP_swap, DW_OP_constu 0xff, DW_OP_lit24, > DW_OP_shl, DW_OP_and, DW_OP_lit24, DW_OP_shr, DW_OP_swap, DW_OP_or, > DW_OP_or, DW_OP_or number of operations. > > Proposed changes to DWARF > > --------------------------- > > 2.5.1.7 Special Operation > > Addition > > <n> DW_OP_byte_swap > > The DW_OP_byte_swap operation pops the top stack > entry, byte swaps the value > > and pushes back the swapped value on the dwarf stack. > > e.g. so 0x12345678 will become 0x78563412, useful to > change endianity of raw > > data. > > --------------------------- > > “ > > i did not received any confirmation on my mail. How can I check if it > was sent correctly? > > Kindly inform me if anything more needs to be done from myside. > > Regards, > > ** > > *Chirag Patel* > > Software Engineer | Raincode Labs India > > *Tel*: (+91) 080 41159811 > > *Mob*: (+91) 9049336744 > > _www.raincodelabs.com <http://www.raincodelabs.com/>_ > > linkedin-button <https://in.linkedin.com/in/chirag-patel-> > > *From:*Chirag Patel <chi...@raincode.com> > *Sent:* 29 October 2019 17:10 > *To:* Michael Eager <ea...@eagercon.com>; Robinson, Paul > <paul.robin...@sony.com>; Ron Brender <ron.bren...@gmail.com> > *Cc:* dwarf-discuss@lists.dwarfstd.org > *Subject:* Re: [Dwarf-Discuss] dwarf stack operator for byte swap. > > Hello, > > Thank you all for prompt reply. > > @Robinson, Paul <mailto:paul.robin...@sony.com>, > > 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). > > the operator, pops the stack entry and byte reverses the value and > pushes it back on the stack. > > @Ron Brender <mailto:ron.bren...@gmail.com> > > 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) > > About the other cases you suggested, i sure hope others can help to > zero in for perfect > > design to cover wide range. > > @Michael Eager <mailto:ea...@eagercon.com> > > Thanks, i have tried the same for our fork of llvm/lldb branch and it > seems to be working well(for our case :). > https://gitlab.phidani.be/Chirag.Patel > > Thank you all for the helpful comments. i will open a dwarf > enhancement request soon. > > Best Regards. > > *Chirag Patel* > > Software Engineer*| *Raincode Labs India > > Tel: (+91) 080 41159811 > > Mob: (+91) 9049336744 > > <https://www.linkedin.com/in/chirag-patel-/> > > _ > > <https://www.linkedin.com/in/chirag-patel-/>_ > > <https://www.linkedin.com/in/chirag-patel-/> > > ---------------------------------------------------------------------- > -- > > *From:*Michael Eager <ea...@eagercon.com <mailto:ea...@eagercon.com>> > *Sent:* 28 October 2019 20:37 > *To:* Robinson, Paul <paul.robin...@sony.com > <mailto:paul.robin...@sony.com>>; Chirag Patel <chi...@raincode.com > <mailto:chi...@raincode.com>> > *Cc:* dwarf-discuss@lists.dwarfstd.org > <mailto:dwarf-discuss@lists.dwarfstd.org> > <dwarf-discuss@lists.dwarfstd.org > <mailto:dwarf-discuss@lists.dwarfstd.org>> > *Subject:* Re: [Dwarf-Discuss] dwarf stack operator for byte swap. > > Hi Chirag -- > > A byte-swap operator would be a reasonable addition to the DWARF > interpreter. > > In addition to writing a proposal as Paul suggests, one option I would > recommend you consider is to create a user-defined operation to > perform this byte-swap operation and give it a value in the range > between DW_OP_lo_user and DW_OP_hi_user. Of course, this user-defined > would need to be implemented not only in the producer (i.e., compiler) > but in any consumers (i.e., debugger). > > When a new version of the DWARF Standard is released, this operation > would be assigned a new value. > > On 10/28/19 6:53 AM, Robinson, Paul via Dwarf-Discuss wrote: > > Hello Chirag, > > > > Regarding a byte-swap operation, it seems that you have a > reasonable > use-case on a bi-endian machine. Feel free to request a > new operator on > the “public comments” page at > http://dwarfstd.org/Comment.php > > Note that a byte-swap operator > would swap all bytes in the top-of-stack > value, which on your > 64-bit machine would of course be a 64-bit value. > > As you want a 32-bit swapped value, you would still need to do a > shift > afterward, but even so, “DW_OP_byte_swap DW_OP_const1u 32 DW_OP_shr” > > would be considerably shorter than what you have to do now. > > > > Of course a new operator would be introduced in a new DWARF > revision, > which is likely to be years away. In the meantime let me > suggest a > shorter expression for doing the byte-swap operation. > The book > “Hacker’s Delight” shows a straightforward 32-bit byte > swap with masks > no wider than 16 bits, as follows: > > > > x = (x << 24) | ((x & 0xff00) << 8) | ((x >> 8) & > > 0xff00) | (x >> 24); > > Your 64-bit machine will of course use > 64-bit values on the expression > stack, so to keep the result > “32-bit clean” we want to do one additional > mask: > > > > x = ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x > >> 8) > & 0xff00) | (x >> 24); > > Translating this into a DWARF > expression, I get the following: > > > > DW_OP_dup, DW_OP_const1u 0xff, DW_OP_and, > DW_OP_lit24, > DW_OP_shl, DW_OP_swap, DW_OP_dup, DW_OP_const2u > 0xff00, DW_OP_and, > DW_OP_lit8, DW_OP_shl, DW_OP_swap, DW_OP_dup, > DW_OP_lit8, DW_OP_shr, > DW_OP_const2u 0xff00, DW_OP_and, DW_OP_swap, > DW_OP_lit24, DW_OP_shr, > DW_OP_or, DW_OP_or, DW_OP_or > > I hope > this is helpful to you. > > > > --paulr > > > > *From:* Dwarf-Discuss <dwarf-discuss-boun...@lists.dwarfstd.org > <mailto:dwarf-discuss-boun...@lists.dwarfstd.org>> *On > Behalf Of > *Chirag Patel via Dwarf-Discuss > *Sent:* Monday, October 28, 2019 > 12:47 AM > *To:* dwarf-discuss@lists.dwarfstd.org > <mailto:dwarf-discuss@lists.dwarfstd.org> > > *Subject:* [Dwarf-Discuss] dwarf stack operator for byte swap. > > > > Hello Dwarf experts. > > > > I am currently working trying to encode dwarf of binaries with > having > bi-endian variables marked with DW_AT_endianity attribute. > > > > The location calculation for some variable depends on other > variable > with different endianity, also the value of this other > variable is known > at runtime. > > > > At the moment I am using location list to calculate the correct > location > of first variable and list of dwarf operators to reverse > the endianity > of variable “__gbloffset__” in below case (I only > needed lower 32 bits > on 64 bit machine). > > > > 0x000001e5: DW_TAG_base_type > > > > DW_AT_byte_size (0x04) > > > > DW_AT_encoding (DW_ATE_signed) > > > > DW_AT_name ("int") > > > DW_AT_endianity (DW_END_big) > > … > > 0x00000057: > DW_TAG_variable > > DW_AT_name > ("__gbloffset__") > > DW_AT_type (0x000001e5 > "int") > > DW_AT_external (true) > > > DW_AT_decl_file ("…") > > DW_AT_decl_line (8) > > > DW_AT_location (DW_OP_addr 0) // pre linkage > > > DW_AT_linkage_name ("_gblsection__") > > 0x00000170: > DW_TAG_variable > > DW_AT_name ("VAR1") > > > DW_AT_type (0x0000010b "fixed.dec.display.72") > > > DW_AT_decl_file ("…") > > DW_AT_decl_line (10) > > > DW_AT_location (DW_OP_addr 0x0, DW_OP_call4 0x57, > > DW_OP_deref_size, 4, > > DW_OP_dup, DW_OP_constu 0xff, DW_OP_lit0, > DW_OP_shl, DW_OP_and, > DW_OP_lit24, DW_OP_shl, DW_OP_swap, > DW_OP_dup, DW_OP_constu 0xff, > DW_OP_lit8, DW_OP_shl, DW_OP_and, > DW_OP_lit8, DW_OP_shl, DW_OP_swap, > DW_OP_dup, DW_OP_constu 0xff, > DW_OP_lit16, DW_OP_shl, DW_OP_and, > DW_OP_lit8, DW_OP_shr, > DW_OP_swap, DW_OP_constu 0xff, DW_OP_lit24, > DW_OP_shl, DW_OP_and, > DW_OP_lit24, DW_OP_shr, DW_OP_swap, DW_OP_or, > DW_OP_or, DW_OP_or, > DW_OP_plus) > > DW_AT_linkage_name ("VAR1") > > > In above snippet of dwarf dump, I am using yellow highlighted list > of > operators to swap the bytes. > > > > I think there should be a support for DW_OP_byte_swap simple > operator to > accomplice this simple task. Does this idea looks like it can > be useful? > > Is there any specific reason why dwarf spec does not have it or I > am > missing something subtle. > > > > I hope I conveyed the idea properly, apologies in advanced as > English is > not my first language. > > > > ** > > > > *Thanks and regards,* > > > > ** > > > > *Chirag Patel* > > > > Software Engineer | Raincode Labs India > > *Tel*: (+91) 080 > 41159811 > > *Mob*: (+91) 9049336744 > > > www.raincodelabs.com<http://www.raincodelabs.com> > <http://www.raincodelabs.com> <http://www.raincodelabs.com/>__ > > > linkedin-button <https://in.linkedin.com/in/chirag-patel-> > > > > > > _______________________________________________ > > Dwarf-Discuss mailing list > > Dwarf-Discuss@lists.dwarfstd.org > <mailto:Dwarf-Discuss@lists.dwarfstd.org> > > http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org > > > > -- > Michael Eager ea...@eagercon.com <mailto:ea...@eagercon.com> > 1960 Park Blvd., Palo Alto, CA 94306 > -- Michael Eager ea...@eagercon.com 1960 Park Blvd., Palo Alto, CA 94306
_______________________________________________ Dwarf-Discuss mailing list Dwarf-Discuss@lists.dwarfstd.org http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org