Re: [PATCH v5 1/1] gdb: Add python support for transforming register unwind values

Simon Marchi <[email protected]>
Newsgroups gmane.comp.gdb.patches
Message-ID <[email protected]>
On 6/8/26 8:04 AM, Craig Blackmore wrote:
> This patch addresses the scenario where a register value is saved in
> some mangled form on the target and gdb does not have sufficient
> information to demangle it.
> 
> After getting a register value from an unwinder, gdb will call out to
> extension languages to allow the value to be transformed.  This avoids
> having to write a new unwinder and allows the standard unwinders to be
> used.
> 
> This patch adds the python class
> `gdb.unwinder.UnwindRegisterValueTransformer` which is the base class
> for transformers which provide a `read` method for transforming unwind
> register values that have been read.  There is no similar support for
> transforming values being written back to the target as this was not
> something I needed to be able to do.  Such support can be added to the
> python API in future by supporting a `write` method.  Currently writing
> back to a transformed register will produce an "Attempt to assign to an
> unmodifiable value" error.
> 
> Only one transformer can be registered globally at any one time.
> Attempting to register more than one transformer or to any other locus
> produces an error.  The function for registering transformers takes a
> locus to allow other loci to be supported in future.  Registered
> transformers are stored in a list so that registering multiple
> transformers may be supported in future.
> 
> `gdbpy_get_register_descriptor` is now externally visible as it is used
> to create a gdb.RegisterDescriptor object to pass to the `read` method.
> 
> This patch adds read-only attribute `gdb.Value.lval_type` which
> transformer methods can use to decide to skip modifying values that did
> not come directly from the target and may not need transforming, for
> example, values taken directly from DWARF.

I remember that when discussing DWARF locations on the stack things with
Pedro (upcoming DWARF 6 features), and how GDB would implement them, the
conclusion was that the lval_type enum was really conflating two things
that should be orthogonal.  If I remember correctly, I think that it
should be two axis:

 - the location part: where are the bits located (register, memory,
   nowhere)
 - the lval-ness: is this a value that can be assigned

The details are blurry because it's been a while, and unfortunately
Pedro is OOO at the moment.  I'd like to have a chat with him about this
once he's back, before we expose this concept to Python.  It might just
be a matter of choosing a future-proof name for the new property.  From
what I understand, what you care about in the
UnwindRegisterValueTransformer implementation is the "location" aspect
of it, so perhaps the property name could convey just that, and not the
"lval" aspect.

Simon
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.