mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
* gdbtypes.c (append_composite_type_field_raw): New.
(append_composite_type_field_aligned): Use the new function. * gdbtypes.h (append_composite_type_field_raw): Declare. * target-descriptions.c (struct tdesc_type_field): Add start and end. (struct tdesc_type_flag): New type. (struct tdesc_type): Add TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS to kind. Add size to u.u. Add u.f for flags. (tdesc_gdb_type): Handle TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS. (tdesc_free_type): Likewise. (tdesc_create_struct, tdesc_set_struct_size, tdesc_create_flags): New. (tdesc_add_field): Handle TDESC_TYPE_STRUCT. (tdesc_add_bitfield, tdesc_add_flag): New. * target-descriptions.h (tdesc_create_struct, tdesc_set_struct_size) (tdesc_create_flags, tdesc_add_bitfield, tdesc_add_flag): Declare. * xml-tdesc.c (struct tdesc_parsing_data): Rename current_union to current_type. Add current_type_size and current_type_is_flags. (tdesc_start_union): Clear the new fields. (tdesc_start_struct, tdesc_start_flags): New. (tdesc_start_field): Handle struct fields, including bitfields. (field_attributes): Make type optional. Add start and end. (union_children): Rename to struct_union_children. (union_attributes): Rename to struct_union_attributes. Add optional size. (flags_attributes): New. (feature_children): Add struct and flags. * features/gdb-target.dtd: Add flags and struct to features. Make field type optional. Add field start and end. doc/ * gdb.texinfo (Types): Describe <struct> and <flags>. testsuite/ * gdb.xml/extra-regs.xml: Add struct1, struct2, and flags types. Add structreg, bitfields, and flags registers. * gdb.xml/tdesc-regs.exp: Test structreg and bitfields registers.
This commit is contained in:
@@ -3303,10 +3303,11 @@ arch_composite_type (struct gdbarch *gdbarch, char *name, enum type_code code)
|
||||
}
|
||||
|
||||
/* Add new field with name NAME and type FIELD to composite type T.
|
||||
ALIGNMENT (if non-zero) specifies the minimum field alignment. */
|
||||
void
|
||||
append_composite_type_field_aligned (struct type *t, char *name,
|
||||
struct type *field, int alignment)
|
||||
Do not set the field's position or adjust the type's length;
|
||||
the caller should do so. Return the new field. */
|
||||
struct field *
|
||||
append_composite_type_field_raw (struct type *t, char *name,
|
||||
struct type *field)
|
||||
{
|
||||
struct field *f;
|
||||
TYPE_NFIELDS (t) = TYPE_NFIELDS (t) + 1;
|
||||
@@ -3316,6 +3317,16 @@ append_composite_type_field_aligned (struct type *t, char *name,
|
||||
memset (f, 0, sizeof f[0]);
|
||||
FIELD_TYPE (f[0]) = field;
|
||||
FIELD_NAME (f[0]) = name;
|
||||
return f;
|
||||
}
|
||||
|
||||
/* Add new field with name NAME and type FIELD to composite type T.
|
||||
ALIGNMENT (if non-zero) specifies the minimum field alignment. */
|
||||
void
|
||||
append_composite_type_field_aligned (struct type *t, char *name,
|
||||
struct type *field, int alignment)
|
||||
{
|
||||
struct field *f = append_composite_type_field_raw (t, name, field);
|
||||
if (TYPE_CODE (t) == TYPE_CODE_UNION)
|
||||
{
|
||||
if (TYPE_LENGTH (t) < TYPE_LENGTH (field))
|
||||
|
||||
Reference in New Issue
Block a user