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

Craig Blackmore <[email protected]>
Newsgroups gmane.comp.gdb.patches
Message-ID <[email protected]>
On 12/08/2026 15:43, Simon Marchi wrote:
> 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.

Hi Simon,

Yes, it is only the location aspect that this implementation cares about.

Thanks,

Craig

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