mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
Handle dynamic field properties
I found a situation where gdb could not properly decode an Ada type. In this first scenario, the discriminant of a type is a bit-field. PROP_ADDR_OFFSET does not handle this situation, because it only allows an offset -- not a bit-size. My original approach to this just added a bit size as well, but after some discussion with Eric Botcazou, we found another failing case: a tagged type can have a second discriminant that appears at a variable offset. So, this patch changes this code to accept a general 'struct field' instead of trying to replicate the field-finding machinery by itself. This is handled at property-evaluation time by simply using a 'field' and resolving its dynamic properties. Then the usual field-extraction function is called to get the value. Because the baton now just holds a field, I renamed PROP_ADDR_OFFSET to PROP_FIELD. The DWARF reader now defers filling in the property baton until the fields have been attached to the type. Finally, I noticed that if the discriminant field has a biased representation, then unpack_field_as_long would not handle this either. This bug is also fixed here, and the test case checks this. Regression tested on x86-64 Fedora 41.
This commit is contained in:
@@ -902,7 +902,7 @@ operator== (const dynamic_prop &l, const dynamic_prop &r)
|
||||
return true;
|
||||
case PROP_CONST:
|
||||
return l.const_val () == r.const_val ();
|
||||
case PROP_ADDR_OFFSET:
|
||||
case PROP_FIELD:
|
||||
case PROP_LOCEXPR:
|
||||
case PROP_LOCLIST:
|
||||
return l.baton () == r.baton ();
|
||||
|
||||
Reference in New Issue
Block a user