[binutils-gdb] gdb: convert address_class_name_to_type_flags to address_class_name_to_id
Tankut Baris Aktemur via Gdb-cvs <[email protected]> Thu, 23 Jul 2026 10:12:39 +0000 (GMT)
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3De7b33a295fcc= b64de6b1a5173eb844fcb6bf02ee commit e7b33a295fccb64de6b1a5173eb844fcb6bf02ee Author: Tankut Baris Aktemur <[email protected]> Date: Thu Jul 23 05:04:42 2026 -0500 gdb: convert address_class_name_to_type_flags to address_class_name_to_= id =20 This is the dual of the previous patch, where we refactor the gdbarch method 'address_class_name_to_type_flags'. We make it take a name and return an address class id, instead of a whole type instance flags. =20 In one case, there is hardcoded `aclass << 4` to convert an id to type instance flags. This will go away in a future patch. =20 Approved-By: Tom Tromey <[email protected]> Diff: --- gdb/avr-tdep.c | 16 ++++++++-------- gdb/ft32-tdep.c | 16 ++++++++-------- gdb/gdbarch-gen.c | 30 +++++++++++++++--------------- gdb/gdbarch-gen.h | 12 ++++++------ gdb/gdbarch_components.py | 8 ++++---- gdb/gdbtypes.c | 16 +++++++++------- gdb/s390-tdep.c | 14 +++++++------- 7 files changed, 57 insertions(+), 55 deletions(-) diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c index d29e47b3a71..58330eececd 100644 --- a/gdb/avr-tdep.c +++ b/gdb/avr-tdep.c @@ -1401,18 +1401,18 @@ avr_address_class_id_to_name (struct gdbarch *gdbar= ch, return NULL; } =20 -/* Implementation of `address_class_name_to_type_flags' gdbarch method. +/* Implementation of `address_class_name_to_id' gdbarch method. =20 - Convert an address space qualifier to a type_instance_flag_value. */ + Convert an address class name to an address class id. */ =20 static bool -avr_address_class_name_to_type_flags (struct gdbarch *gdbarch, - const char* name, - type_instance_flags *type_flags_ptr) +avr_address_class_name_to_id (struct gdbarch *gdbarch, + const char* name, + unsigned int &address_class) { if (streq (name, "flash")) { - *type_flags_ptr =3D AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH; + address_class =3D AVR_ADDRESS_CLASS_FLASH; return true; } else @@ -1535,8 +1535,8 @@ avr_gdbarch_init (struct gdbarch_info info, struct gd= barch_list *arches) set_gdbarch_unwind_sp (gdbarch, avr_unwind_sp); =20 set_gdbarch_address_class_type_flags (gdbarch, avr_address_class_type_fl= ags); - set_gdbarch_address_class_name_to_type_flags - (gdbarch, avr_address_class_name_to_type_flags); + set_gdbarch_address_class_name_to_id + (gdbarch, avr_address_class_name_to_id); set_gdbarch_address_class_id_to_name (gdbarch, avr_address_class_id_to_name); =20 diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c index b0da5bf815b..8906a09b0b6 100644 --- a/gdb/ft32-tdep.c +++ b/gdb/ft32-tdep.c @@ -368,18 +368,18 @@ ft32_address_class_id_to_name (struct gdbarch *gdbarc= h, return NULL; } =20 -/* Implementation of `address_class_name_to_type_flags' gdbarch method. +/* Implementation of `address_class_name_to_id' gdbarch method. =20 - Convert an address space qualifier to a type_instance_flag_value. */ + Convert an address class name to an address class id. */ =20 static bool -ft32_address_class_name_to_type_flags (struct gdbarch *gdbarch, - const char* name, - type_instance_flags *type_flags_ptr) +ft32_address_class_name_to_id (struct gdbarch *gdbarch, + const char* name, + unsigned int &address_class) { if (streq (name, "flash")) { - *type_flags_ptr =3D TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1; + address_class =3D 1; return true; } else @@ -610,8 +610,8 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdb= arch_list *arches) set_gdbarch_overlay_update (gdbarch, simple_overlay_update); =20 set_gdbarch_address_class_type_flags (gdbarch, ft32_address_class_type_f= lags); - set_gdbarch_address_class_name_to_type_flags - (gdbarch, ft32_address_class_name_to_type_flags); + set_gdbarch_address_class_name_to_id + (gdbarch, ft32_address_class_name_to_id); set_gdbarch_address_class_id_to_name (gdbarch, ft32_address_class_id_to_name); =20 diff --git a/gdb/gdbarch-gen.c b/gdb/gdbarch-gen.c index e1c5a902b00..980682e1bfb 100644 --- a/gdb/gdbarch-gen.c +++ b/gdb/gdbarch-gen.c @@ -166,7 +166,7 @@ struct gdbarch gdbarch_address_class_type_flags_ftype *address_class_type_flags =3D nul= lptr; gdbarch_address_class_id_to_name_ftype *address_class_id_to_name =3D nul= lptr; gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = =3D default_execute_dwarf_cfa_vendor_op; - gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_ty= pe_flags =3D nullptr; + gdbarch_address_class_name_to_id_ftype *address_class_name_to_id =3D nul= lptr; gdbarch_register_reggroup_p_ftype *register_reggroup_p =3D default_regis= ter_reggroup_p; gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument =3D nullptr; gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections= =3D nullptr; @@ -421,7 +421,7 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of address_class_type_flags, has predicate. */ /* Skip verify of address_class_id_to_name, has predicate. */ /* Skip verify of execute_dwarf_cfa_vendor_op, invalid_p =3D=3D 0. */ - /* Skip verify of address_class_name_to_type_flags, has predicate. */ + /* Skip verify of address_class_name_to_id, has predicate. */ /* Skip verify of register_reggroup_p, invalid_p =3D=3D 0. */ /* Skip verify of fetch_pointer_argument, invalid_p =3D=3D 0. */ /* Skip verify of iterate_over_regset_sections, has predicate. */ @@ -974,11 +974,11 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file= *file) "gdbarch_dump: execute_dwarf_cfa_vendor_op =3D <%s>\n", host_address_to_string (gdbarch->execute_dwarf_cfa_vendor_op)); gdb_printf (file, - "gdbarch_dump: gdbarch_address_class_name_to_type_flags_p() =3D %d\= n", - gdbarch_address_class_name_to_type_flags_p (gdbarch)); + "gdbarch_dump: gdbarch_address_class_name_to_id_p() =3D %d\n", + gdbarch_address_class_name_to_id_p (gdbarch)); gdb_printf (file, - "gdbarch_dump: address_class_name_to_type_flags =3D <%s>\n", - host_address_to_string (gdbarch->address_class_name_to_type_flags)); + "gdbarch_dump: address_class_name_to_id =3D <%s>\n", + host_address_to_string (gdbarch->address_class_name_to_id)); gdb_printf (file, "gdbarch_dump: register_reggroup_p =3D <%s>\n", host_address_to_string (gdbarch->register_reggroup_p)); @@ -3561,27 +3561,27 @@ set_gdbarch_execute_dwarf_cfa_vendor_op (struct gdb= arch *gdbarch, } =20 bool -gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch) +gdbarch_address_class_name_to_id_p (struct gdbarch *gdbarch) { gdb_assert (gdbarch !=3D nullptr); - return gdbarch->address_class_name_to_type_flags !=3D nullptr; + return gdbarch->address_class_name_to_id !=3D nullptr; } =20 bool -gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const c= har *name, type_instance_flags *type_flags_ptr) +gdbarch_address_class_name_to_id (struct gdbarch *gdbarch, const char *nam= e, unsigned int &address_class) { gdb_assert (gdbarch !=3D nullptr); - gdb_assert (gdbarch->address_class_name_to_type_flags !=3D nullptr); + gdb_assert (gdbarch->address_class_name_to_id !=3D nullptr); if (gdbarch_debug >=3D 2) - gdb_printf (gdb_stdlog, "gdbarch_address_class_name_to_type_flags call= ed\n"); - return gdbarch->address_class_name_to_type_flags (gdbarch, name, type_fl= ags_ptr); + gdb_printf (gdb_stdlog, "gdbarch_address_class_name_to_id called\n"); + return gdbarch->address_class_name_to_id (gdbarch, name, address_class); } =20 void -set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, - gdbarch_address_class_name_to_type_flags_ftype address_class_na= me_to_type_flags) +set_gdbarch_address_class_name_to_id (struct gdbarch *gdbarch, + gdbarch_address_class_name_to_id_ftype address_class_name_to_id) { - gdbarch->address_class_name_to_type_flags =3D address_class_name_to_type= _flags; + gdbarch->address_class_name_to_id =3D address_class_name_to_id; } =20 bool diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h index 9fea082a690..05b1656a511 100644 --- a/gdb/gdbarch-gen.h +++ b/gdb/gdbarch-gen.h @@ -918,15 +918,15 @@ using gdbarch_execute_dwarf_cfa_vendor_op_ftype =3D b= ool (struct gdbarch *gdbarch, bool gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byt= e op, struct dwarf2_frame_state *fs); void set_gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb= arch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op); =20 -/* Return the appropriate type_flags for the supplied address class. +/* Return the appropriate address class id for the supplied address class = name. This function should return true if the address class was recognized and - type_flags was set, false otherwise. */ + address_class was set, false otherwise. */ =20 -bool gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch); +bool gdbarch_address_class_name_to_id_p (struct gdbarch *gdbarch); =20 -using gdbarch_address_class_name_to_type_flags_ftype =3D bool (struct gdba= rch *gdbarch, const char *name, type_instance_flags *type_flags_ptr); -bool gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, co= nst char *name, type_instance_flags *type_flags_ptr); -void set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch= , gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_typ= e_flags); +using gdbarch_address_class_name_to_id_ftype =3D bool (struct gdbarch *gdb= arch, const char *name, unsigned int &address_class); +bool gdbarch_address_class_name_to_id (struct gdbarch *gdbarch, const char= *name, unsigned int &address_class); +void set_gdbarch_address_class_name_to_id (struct gdbarch *gdbarch, gdbarc= h_address_class_name_to_id_ftype *address_class_name_to_id); =20 /* Is a register in a group */ =20 diff --git a/gdb/gdbarch_components.py b/gdb/gdbarch_components.py index 5ec4bdee819..d5d5a6d4fe3 100644 --- a/gdb/gdbarch_components.py +++ b/gdb/gdbarch_components.py @@ -1570,13 +1570,13 @@ FS are passed from the generic execute_cfa_program = function. =20 Method( comment=3D""" -Return the appropriate type_flags for the supplied address class. +Return the appropriate address class id for the supplied address class nam= e. This function should return true if the address class was recognized and -type_flags was set, false otherwise. +address_class was set, false otherwise. """, type=3D"bool", - name=3D"address_class_name_to_type_flags", - params=3D[("const char *", "name"), ("type_instance_flags *", "type_fl= ags_ptr")], + name=3D"address_class_name_to_id", + params=3D[("const char *", "name"), ("unsigned int &", "address_class"= )], predicate=3DTrue, ) =20 diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index f3c77073f70..87cc7d15d0d 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -543,18 +543,20 @@ type_instance_flags address_space_name_to_type_instance_flags (struct gdbarch *gdbarch, const char *space_identifier) { - type_instance_flags type_flags; - /* Check for known address space delimiters. */ if (streq (space_identifier, "code")) return TYPE_INSTANCE_FLAG_CODE_SPACE; else if (streq (space_identifier, "data")) return TYPE_INSTANCE_FLAG_DATA_SPACE; - else if (gdbarch_address_class_name_to_type_flags_p (gdbarch) - && gdbarch_address_class_name_to_type_flags (gdbarch, - space_identifier, - &type_flags)) - return type_flags; + + unsigned int aclass; + if (gdbarch_address_class_name_to_id_p (gdbarch) + && gdbarch_address_class_name_to_id (gdbarch, + space_identifier, + aclass)) + { + return (enum type_instance_flag_value) (aclass << 4); + } else error (_("Unknown address space specifier: \"%s\""), space_identifier); } diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c index 57ddce44644..1aebdfa46d3 100644 --- a/gdb/s390-tdep.c +++ b/gdb/s390-tdep.c @@ -1632,17 +1632,17 @@ s390_address_class_id_to_name (struct gdbarch *gdba= rch, return NULL; } =20 -/* Implement addr_class_name_to_type_flags gdbarch method. +/* Implement addr_class_name_to_id gdbarch method. Only used for ABI_LINUX_ZSERIES. */ =20 static bool -s390_address_class_name_to_type_flags (struct gdbarch *gdbarch, - const char *name, - type_instance_flags *type_flags_ptr) +s390_address_class_name_to_id (struct gdbarch *gdbarch, + const char *name, + unsigned int &address_class) { if (streq (name, "mode32")) { - *type_flags_ptr =3D TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1; + address_class =3D 1; return true; } else @@ -7359,8 +7359,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct g= dbarch_list *arches) s390_address_class_type_flags); set_gdbarch_address_class_id_to_name (gdbarch, s390_address_class_id_to_name); - set_gdbarch_address_class_name_to_type_flags (gdbarch, - s390_address_class_name_to_type_flags); + set_gdbarch_address_class_name_to_id (gdbarch, + s390_address_class_name_to_id); break; }