[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;
     }