mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
8151645076
gdb/ChangeLog: Extend flags to support multibit and enum bitfields. NEWS: Document new features. * c-typeprint.c (c_type_print_varspec_prefix): Handle TYPE_CODE_FLAGS. (c_type_print_varspec_suffix, c_type_print_base): Ditto. * gdbtypes.c (arch_flags_type): Don't assume all fields are one bit. (append_flags_type_field): New function. (append_flags_type_flag): Call it. * gdbtypes.h (append_flags_type_field): Declare. * target-descriptions.c (struct tdesc_type_flag): Delete. (enum tdesc_type_kind) <TDESC_TYPE_BOOL>: New enum value. (enum tdesc_type_kind) <TDESC_TYPE_ENUM>: Ditto. (struct tdesc_type) <u.f>: Delete. (tdesc_predefined_types): Add "bool". (tdesc_predefined_type): New function. (tdesc_gdb_type): Handle TDESC_TYPE_BOOL, TDESC_TYPE_ENUM. Update TDESC_TYPE_FLAGS support. (tdesc_free_type): Handle TDESC_TYPE_ENUM. Update TDESC_TYPE_FLAGS. (tdesc_create_flags): Update. (tdesc_create_enum): New function. (tdesc_add_field): Initialize start,end to -1. (tdesc_add_typed_bitfield): New function. (tdesc_add_bitfield): Call it. (tdesc_add_flag): Allow TDESC_TYPE_STRUCT. Update. (tdesc_add_enum_value): New function. (maint_print_c_tdesc_cmd): Fold TDESC_TYPE_FLAGS support into TDESC_TYPE_STRUCT. Handle TDESC_TYPE_ENUM. * target-descriptions.h (tdesc_create_enum): Declare. (tdesc_add_typed_bitfield, tdesc_add_enum_value): Declare. * valprint.c (generic_val_print_enum_1): New function. (generic_val_print_enum): Call it. (val_print_type_code_flags): Make static. Handle multibit bitfields and enum bitfields. * valprint.h (val_print_type_code_flags): Delete. * xml-tdesc.c (struct tdesc_parsing_data) <current_type_is_flags>: Delete. All uses removed. (tdesc_start_enum): New function. (tdesc_start_field): Handle multibit and enum bitfields. (tdesc_start_enum_value): New function. (enum_value_attributes, enum_children, enum_attributes): New static globals. (feature_children): Add "enum". * features/gdb-target.dtd (enum, evalue): New elements. gdb/doc/ChangeLog: * gdb.texinfo (Target Descriptions): New menu item "Enum Target Types". (Target Description Format): Mention enum types. Update docs on flags types. (Predefined Target Types): Add "bool". (Enum Target Types): New node. gdb/testsuite/ChangeLog: * gdb.xml/extra-regs.xml: Add enum, mixed_flags values. * gdb.xml/tdesc-regs.exp (load_description): New arg xml_file. All callers updated. Add tests for enums, mixed flags register.
60 lines
1.9 KiB
XML
60 lines
1.9 KiB
XML
<target>
|
|
<xi:include href="core-regs.xml"/>
|
|
<feature name="extra">
|
|
<vector id="v4int8" type="int8" count="4"/>
|
|
<vector id="v2int16" type="int16" count="2"/>
|
|
<union id="vecint">
|
|
<field name="v4" type="v4int8"/>
|
|
<field name="v2" type="v2int16"/>
|
|
</union>
|
|
|
|
<struct id="struct1">
|
|
<field name="v4" type="v4int8"/>
|
|
<field name="v2" type="v2int16"/>
|
|
</struct>
|
|
|
|
<struct id="struct2" size="8">
|
|
<field name="f1" start="0" end="34"/>
|
|
<field name="f2" start="63" end="63"/>
|
|
</struct>
|
|
|
|
<flags id="flags" size="4">
|
|
<field name="X" start="0" end="0"/>
|
|
<field name="Y" start="2" end="2"/>
|
|
</flags>
|
|
|
|
<enum id="Z_values" size="4">
|
|
<evalue name="yes" value="1"/>
|
|
<evalue name="no" value="0"/>
|
|
<evalue name="maybe" value="2"/>
|
|
<evalue name="so" value="3"/>
|
|
</enum>
|
|
|
|
<flags id="mixed_flags" size="4">
|
|
<!-- Elided end and type. -->
|
|
<field name="A" start="0"/>
|
|
<!-- Elided end, unsigned int. -->
|
|
<field name="B" start="1" type="uint32"/>
|
|
<!-- Elided end, bool. -->
|
|
<field name="C" start="2" type="bool"/>
|
|
<!-- Elided type, single bitfield. -->
|
|
<field name="D" start="3" end="3"/>
|
|
<!-- Anonymous field. -->
|
|
<field name="" start="4" end="5"/>
|
|
<!-- Multi-bit bitfield, elided type. -->
|
|
<field name="E" start="6" end="7"/>
|
|
<!-- Enum bitfield. -->
|
|
<field name="Z" start="8" end="9" type="Z_values"/>
|
|
</flags>
|
|
|
|
<reg name="extrareg" bitsize="32"/>
|
|
<reg name="uintreg" bitsize="32" type="uint32"/>
|
|
<reg name="vecreg" bitsize="32" type="v4int8"/>
|
|
<reg name="unionreg" bitsize="32" type="vecint"/>
|
|
<reg name="structreg" bitsize="64" type="struct1"/>
|
|
<reg name="bitfields" bitsize="64" type="struct2"/>
|
|
<reg name="flags" bitsize="32" type="flags"/>
|
|
<reg name="mixed_flags" bitsize="32" type="mixed_flags"/>
|
|
</feature>
|
|
</target>
|