Re: GDB | DWARF expression | Extracting a range of bits from an 'xmm' register

vaibhav kurhe via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAHKv1qvRJHAA=91iwGV_tVoqRXSu-UXRdvaBssyvxhD+MFc4Fw@mail.gmail.com>
On Fri, May 21, 2021 at 7:33 PM Andrew Burgess
<[email protected]> wrote:
>
> * vaibhav kurhe via Gdb <[email protected]> [2021-05-21 14:27:15 +0530]:
>
> > Hello all,
> > For a use case, I am trying to build a DWARF expression which represents
> > the value of an arbitrary range of bits (e.g. 96-127 bits) in an *128-bit
> > xmm register* to be used as a *location attri
bute value* for a variable DIE.
> > I am using GDB to consume the debug info and test it.
> >
> > Following is the expression I started with to test out a shift operation on
> > an 128-bit xmm0 register using Typed DWARF stack :-
> >
> > *"DW_OP_GNU_regval_type: 21 (xmm0) <0x30>; DW_OP_GNU_const_type: <0x30>  16
> > byte block: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; DW_OP_shl;
>
> I'm probably just not understanding correctly, but I'm confused by the
> use of DW_OP_GNU_const_type.  Isn't this providing the number of bits
> to shift?  I'd have expected something like 'DW_OP_const1u 96'.
>
> Thanks,
> Andrew

Hi Andrew,
Thanks for the reply!

Yes, the second operand to DW_OP_shl is indeed the number of bits to
shift. But, I saw that the DWARF5 standard mentions that both the
operands should be of the same type.
So, in this case, as the 1st operand is typed (which points to a DIE
for the base type), I think the 2nd operand also has to be typed and
hence used the operation DW_OP_const_type.

Regards,
Vaibhav
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.