[Dwarf-Discuss] dwarf stack operator for byte swap.
Cary Coutant
ccoutant@gmail.com
Sat Dec 28 01:39:31 GMT 2019
> >> <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.
While I can see the potential usefulness of a byte-swap operator, it's
not clear to me that it's the right approach for Chirag's case. In his
example, the __gbloffset__ variable has a DW_AT_type which is
explicitly given a DW_AT_endianity attribute. A DWARF consumer would
be expected to pay attention to the byte order when presenting the
value of that variable, but the DW_OP_call4 pushes just the address of
the variable as a value of "generic" type, and DW_OP_deref will
dereference it without knowing its type.
What we're missing is an operator to attach a type to the current
value on top of the stack; if we had that, we could do (DW_OP_call4,
DW_OP_attach_type, DW_OP_deref) and expect the DWARF consumer to honor
the byte order and do a byte swap implicitly when executing the
DW_OP_deref.
Or, we could specify that DW_OP_call* should not only push the result
of evaluating the DW_AT_location of the target DIE, but also attach
the DW_AT_type of the target DIE to that value.
Or, we could add DW_OP_call*_type operators, and leave the original
DW_OP_call* operators to deal with values of generic type only.
-cary
More information about the Dwarf-discuss
mailing list