public inbox for
 help / color / mirror / Atom feed
From: "Zaric, Zoran (Zare)" <>
To: vaibhav kurhe <>
Cc: "" <>
Subject: Re: GDB | DWARF expression | Extracting a range of bits from an 'xmm' register
Date: Mon, 24 May 2021 10:00:48 +0000	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <>

On 5/21/21 10:09 PM, vaibhav kurhe wrote:
> [CAUTION: External Email]
> On Fri, May 21, 2021 at 10:36 PM Zaric, Zoran (Zare) via Gdb
> <> wrote:
>> On 5/21/21 3:03 PM, Andrew Burgess wrote:
>>> * vaibhav kurhe via Gdb <> [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 attribute 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 Vaibhav,
>> Maybe I am missing something, but what is the end goal that you are
>> trying to accomplish?
>> The way how you formed your expression, you can only get a read only
>> stack value location description.
>> Why not use the DW_OP_bit_piece with your register being the only piece
>> inside of it and then use that as your end location description?
>> Thanks,
>> Zoran
> Hi Zoran,
> Thanks for the reply!
> Actually I am trying to improve an object file's debug info in case of
> a vectorized transformation by the compiler.
> e.g. when a source variable, 'sum' = (xmm0[0-31] + xmm0[32-63] +
> xmm0[64-95] + xmm0[96-127]).
> Thanks for pointing out the DW_OP_bit_piece operation! It worked in a
> setting where a source variable resides directly in a 32-bit chunk of
> an 128-bit xmm register.
> But, I think it won't be possible for the above example(?).
> Here, we'll have to do 128-bit operations (such as DW_OP_shl) on the
> register to get its 32-bit chunks. Is that correct?
> Regards,
> Vaibhav

Right, so for that use case, Andrew's suggestion is the way to go and it 
should work unless there are bugs in gdb evaluator (which there could be).

Your original approach should work too, but there seems to be some 
unexpected limitation when using the shift operation with user based 
types or something similar.

I would also suggest to use the DWARF standard operations instead of GNU 
extensions whenever possible (like DW_OP_regval_type).

On another note, if you are trying to support debugging of a heavily 
optimized and vectorized code, maybe it would be worth your time 
checking out what we are trying to do with our extensions of the DWARF 

The idea is to support more descriptive and better compose-able location 
descriptions and expressions.

You can find more on this link:

There is also a working implementation in gdb that is currently being 
reviewed and can be found here:

We would greatly appreciate any input you might have about it.

Hope this helps,

  reply	other threads:[~2021-05-24 10:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-21  8:57 vaibhav kurhe
2021-05-21 14:03 ` Andrew Burgess
2021-05-21 16:02   ` Zaric, Zoran (Zare)
2021-05-21 21:09     ` vaibhav kurhe
2021-05-24 10:00       ` Zaric, Zoran (Zare) [this message]
2021-05-21 20:37   ` vaibhav kurhe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).