diff options
author | Doug Evans <dje@google.com> | 2016-03-15 14:37:29 -0700 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2016-03-15 14:37:29 -0700 |
commit | 8151645076ce927e0ee866c598a19f192e68e103 (patch) | |
tree | b9270d1643c875c060e7d55746c50c69ee2e24bd /gdb/target-descriptions.h | |
parent | 54157a25aa28ba78e1da1dfa06e6c988d75e88f1 (diff) | |
download | gdb-8151645076ce927e0ee866c598a19f192e68e103.zip gdb-8151645076ce927e0ee866c598a19f192e68e103.tar.gz gdb-8151645076ce927e0ee866c598a19f192e68e103.tar.bz2 |
Extend flags to support multibit and enum bitfields.
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.
Diffstat (limited to 'gdb/target-descriptions.h')
-rw-r--r-- | gdb/target-descriptions.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h index f777a92..ef97d1d 100644 --- a/gdb/target-descriptions.h +++ b/gdb/target-descriptions.h @@ -235,12 +235,20 @@ struct tdesc_type *tdesc_create_union (struct tdesc_feature *feature, struct tdesc_type *tdesc_create_flags (struct tdesc_feature *feature, const char *name, int size); +struct tdesc_type *tdesc_create_enum (struct tdesc_feature *feature, + const char *name, + int size); void tdesc_add_field (struct tdesc_type *type, const char *field_name, struct tdesc_type *field_type); +void tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name, + int start, int end, + struct tdesc_type *field_type); void tdesc_add_bitfield (struct tdesc_type *type, const char *field_name, int start, int end); void tdesc_add_flag (struct tdesc_type *type, int start, const char *flag_name); +void tdesc_add_enum_value (struct tdesc_type *type, int value, + const char *name); void tdesc_create_reg (struct tdesc_feature *feature, const char *name, int regnum, int save_restore, const char *group, int bitsize, const char *type); |