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/>__
 >
 > 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

Reply via email to