[binutils-gdb] gdb: convert address_class_type_flags_to_name to address_class_id_to_name

Tankut Baris Aktemur via Gdb-cvs <[email protected]> Thu, 23 Jul 2026 10:12:34 +0000 (GMT)
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3Dea1bd1c8e62e=
fba45684778dade1284f1fe1a87c

commit ea1bd1c8e62efba45684778dade1284f1fe1a87c
Author: Tankut Baris Aktemur <[email protected]>
Date:   Thu Jul 23 05:04:42 2026 -0500

    gdb: convert address_class_type_flags_to_name to address_class_id_to_na=
me
   =20
    In type instance flags, two bits are allocated for encoding the
    address class.  Although defined like a bitmask, those two bits in
    fact represent an architecture-specific enum value.  As a step towards
    making this conceptual separation clear, refactor the gdbarch method
    'address_class_type_flags_to_name'.  This method is used for returning
    the name for the address class id encoded in type instance flags.
    Make this clear by passing it the address class id, instead of the
    whole flags.
   =20
    Approved-By: Tom Tromey <[email protected]>

Diff:
---
 gdb/avr-tdep.c            | 27 ++++++++++++---------------
 gdb/ft32-tdep.c           | 14 +++++++-------
 gdb/gdbarch-gen.c         | 30 +++++++++++++++---------------
 gdb/gdbarch-gen.h         | 11 +++++++----
 gdb/gdbarch_components.py |  8 ++++++--
 gdb/gdbtypes.c            |  8 +++++---
 gdb/gdbtypes.h            |  4 ++++
 gdb/s390-tdep.c           | 12 ++++++------
 8 files changed, 62 insertions(+), 52 deletions(-)

diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index ddb917fda5f..d29e47b3a71 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -72,13 +72,10 @@
=20
 /* Constants: prefixed with AVR_ to avoid name space clashes */
=20
-/* Address space flags */
+/* We are assigning the id 1 to the flash address space.  */
=20
-/* We are assigning the TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 to the flash ad=
dress
-   space.  */
-
-#define AVR_TYPE_ADDRESS_CLASS_FLASH TYPE_ADDRESS_CLASS_1
-#define AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH  \
+#define AVR_ADDRESS_CLASS_FLASH 1
+#define AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH	\
   TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1
=20
=20
@@ -310,7 +307,7 @@ avr_address_to_pointer (struct gdbarch *gdbarch,
   enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch);
=20
   /* Is it a data address in flash?  */
-  if (AVR_TYPE_ADDRESS_CLASS_FLASH (type))
+  if (TYPE_ADDRESS_CLASS (type) =3D=3D AVR_ADDRESS_CLASS_FLASH)
     {
       /* A data pointer in flash is byte addressed.  */
       store_unsigned_integer (buf, type->length (), byte_order,
@@ -342,7 +339,7 @@ avr_pointer_to_address (struct gdbarch *gdbarch,
     =3D extract_unsigned_integer (buf, type->length (), byte_order);
=20
   /* Is it a data address in flash?  */
-  if (AVR_TYPE_ADDRESS_CLASS_FLASH (type))
+  if (TYPE_ADDRESS_CLASS (type) =3D=3D AVR_ADDRESS_CLASS_FLASH)
     {
       /* A data pointer in flash is already byte addressed.  */
       return avr_make_iaddr (addr);
@@ -1390,15 +1387,15 @@ avr_address_class_type_flags (int byte_size, int dw=
arf2_addr_class)
   return 0;
 }
=20
-/* Implementation of `address_class_type_flags_to_name' gdbarch method.
+/* Implementation of `address_class_id_to_name' gdbarch method.
=20
-   Convert a type_instance_flag_value to an address space qualifier.  */
+   Convert an address class id to an address class qualifier.  */
=20
 static const char*
-avr_address_class_type_flags_to_name (struct gdbarch *gdbarch,
-				      type_instance_flags type_flags)
+avr_address_class_id_to_name (struct gdbarch *gdbarch,
+			      unsigned int address_class)
 {
-  if (type_flags & AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH)
+  if (address_class =3D=3D AVR_ADDRESS_CLASS_FLASH)
     return "flash";
   else
     return NULL;
@@ -1540,8 +1537,8 @@ avr_gdbarch_init (struct gdbarch_info info, struct gd=
barch_list *arches)
   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_type_flags_to_name
-    (gdbarch, avr_address_class_type_flags_to_name);
+  set_gdbarch_address_class_id_to_name
+    (gdbarch, avr_address_class_id_to_name);
=20
   return gdbarch;
 }
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 45afebb18e9..b0da5bf815b 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -354,15 +354,15 @@ ft32_address_class_type_flags (int byte_size, int dwa=
rf2_addr_class)
   return 0;
 }
=20
-/* Implementation of `address_class_type_flags_to_name' gdbarch method.
+/* Implementation of `address_class_id_to_name' gdbarch method.
=20
-   Convert a type_instance_flag_value to an address space qualifier.  */
+   Convert an address class id to an address space qualifier.  */
=20
 static const char*
-ft32_address_class_type_flags_to_name (struct gdbarch *gdbarch,
-				       type_instance_flags type_flags)
+ft32_address_class_id_to_name (struct gdbarch *gdbarch,
+			       unsigned int address_class)
 {
-  if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
+  if (address_class =3D=3D 1)
     return "flash";
   else
     return NULL;
@@ -612,8 +612,8 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdb=
arch_list *arches)
   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_type_flags_to_name
-    (gdbarch, ft32_address_class_type_flags_to_name);
+  set_gdbarch_address_class_id_to_name
+    (gdbarch, ft32_address_class_id_to_name);
=20
   return gdbarch;
 }
diff --git a/gdb/gdbarch-gen.c b/gdb/gdbarch-gen.c
index f424fa2a86e..e1c5a902b00 100644
--- a/gdb/gdbarch-gen.c
+++ b/gdb/gdbarch-gen.c
@@ -164,7 +164,7 @@ struct gdbarch
   bool cannot_step_breakpoint =3D false;
   bool have_nonsteppable_watchpoint =3D false;
   gdbarch_address_class_type_flags_ftype *address_class_type_flags =3D nul=
lptr;
-  gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags=
_to_name =3D nullptr;
+  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_register_reggroup_p_ftype *register_reggroup_p =3D default_regis=
ter_reggroup_p;
@@ -419,7 +419,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of cannot_step_breakpoint, invalid_p =3D=3D 0.  */
   /* Skip verify of have_nonsteppable_watchpoint, invalid_p =3D=3D 0.  */
   /* Skip verify of address_class_type_flags, has predicate.  */
-  /* Skip verify of address_class_type_flags_to_name, 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 register_reggroup_p, invalid_p =3D=3D 0.  */
@@ -965,11 +965,11 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file=
 *file)
 	      "gdbarch_dump: address_class_type_flags =3D <%s>\n",
 	      host_address_to_string (gdbarch->address_class_type_flags));
   gdb_printf (file,
-	      "gdbarch_dump: gdbarch_address_class_type_flags_to_name_p() =3D %d\=
n",
-	      gdbarch_address_class_type_flags_to_name_p (gdbarch));
+	      "gdbarch_dump: gdbarch_address_class_id_to_name_p() =3D %d\n",
+	      gdbarch_address_class_id_to_name_p (gdbarch));
   gdb_printf (file,
-	      "gdbarch_dump: address_class_type_flags_to_name =3D <%s>\n",
-	      host_address_to_string (gdbarch->address_class_type_flags_to_name));
+	      "gdbarch_dump: address_class_id_to_name =3D <%s>\n",
+	      host_address_to_string (gdbarch->address_class_id_to_name));
   gdb_printf (file,
 	      "gdbarch_dump: execute_dwarf_cfa_vendor_op =3D <%s>\n",
 	      host_address_to_string (gdbarch->execute_dwarf_cfa_vendor_op));
@@ -3520,27 +3520,27 @@ set_gdbarch_address_class_type_flags (struct gdbarc=
h *gdbarch,
 }
=20
 bool
-gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch)
+gdbarch_address_class_id_to_name_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch !=3D nullptr);
-  return gdbarch->address_class_type_flags_to_name !=3D nullptr;
+  return gdbarch->address_class_id_to_name !=3D nullptr;
 }
=20
 const char *
-gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_in=
stance_flags type_flags)
+gdbarch_address_class_id_to_name (struct gdbarch *gdbarch, unsigned int ad=
dress_class)
 {
   gdb_assert (gdbarch !=3D nullptr);
-  gdb_assert (gdbarch->address_class_type_flags_to_name !=3D nullptr);
+  gdb_assert (gdbarch->address_class_id_to_name !=3D nullptr);
   if (gdbarch_debug >=3D 2)
-    gdb_printf (gdb_stdlog, "gdbarch_address_class_type_flags_to_name call=
ed\n");
-  return gdbarch->address_class_type_flags_to_name (gdbarch, type_flags);
+    gdb_printf (gdb_stdlog, "gdbarch_address_class_id_to_name called\n");
+  return gdbarch->address_class_id_to_name (gdbarch, address_class);
 }
=20
 void
-set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch,
-					      gdbarch_address_class_type_flags_to_name_ftype address_class_ty=
pe_flags_to_name)
+set_gdbarch_address_class_id_to_name (struct gdbarch *gdbarch,
+				      gdbarch_address_class_id_to_name_ftype address_class_id_to_name)
 {
-  gdbarch->address_class_type_flags_to_name =3D address_class_type_flags_t=
o_name;
+  gdbarch->address_class_id_to_name =3D address_class_id_to_name;
 }
=20
 bool
diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h
index 678b308fba5..9fea082a690 100644
--- a/gdb/gdbarch-gen.h
+++ b/gdb/gdbarch-gen.h
@@ -902,11 +902,14 @@ using gdbarch_address_class_type_flags_ftype =3D type=
_instance_flags (int byte_siz
 type_instance_flags gdbarch_address_class_type_flags (struct gdbarch *gdba=
rch, int byte_size, int dwarf2_addr_class);
 void set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, gdbarc=
h_address_class_type_flags_ftype *address_class_type_flags);
=20
-bool gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
+/* Given an architecture-specific address class identifier, return the
+   name of that address class. */
=20
-using gdbarch_address_class_type_flags_to_name_ftype =3D const char *(stru=
ct gdbarch *gdbarch, type_instance_flags type_flags);
-const char *gdbarch_address_class_type_flags_to_name (struct gdbarch *gdba=
rch, type_instance_flags type_flags);
-void set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch=
, gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_=
to_name);
+bool gdbarch_address_class_id_to_name_p (struct gdbarch *gdbarch);
+
+using gdbarch_address_class_id_to_name_ftype =3D const char *(struct gdbar=
ch *gdbarch, unsigned int address_class);
+const char *gdbarch_address_class_id_to_name (struct gdbarch *gdbarch, uns=
igned int address_class);
+void set_gdbarch_address_class_id_to_name (struct gdbarch *gdbarch, gdbarc=
h_address_class_id_to_name_ftype *address_class_id_to_name);
=20
 /* Execute vendor-specific DWARF Call Frame Instruction.  OP is the instru=
ction.
    FS are passed from the generic execute_cfa_program function. */
diff --git a/gdb/gdbarch_components.py b/gdb/gdbarch_components.py
index b9304d3036d..5ec4bdee819 100644
--- a/gdb/gdbarch_components.py
+++ b/gdb/gdbarch_components.py
@@ -1546,9 +1546,13 @@ Function(
 )
=20
 Method(
+    comment=3D"""
+Given an architecture-specific address class identifier, return the
+name of that address class.
+""",
     type=3D"const char *",
-    name=3D"address_class_type_flags_to_name",
-    params=3D[("type_instance_flags", "type_flags")],
+    name=3D"address_class_id_to_name",
+    params=3D[("unsigned int", "address_class")],
     predicate=3DTrue,
 )
=20
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index d1a2914e1e6..f3c77073f70 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -570,9 +570,11 @@ address_space_type_instance_flags_to_name (struct gdba=
rch *gdbarch,
     return "code";
   else if (space_flag & TYPE_INSTANCE_FLAG_DATA_SPACE)
     return "data";
-  else if ((space_flag & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
-	   && gdbarch_address_class_type_flags_to_name_p (gdbarch))
-    return gdbarch_address_class_type_flags_to_name (gdbarch, space_flag);
+
+  unsigned int aclass =3D TYPE_ADDRESS_CLASS_FROM_INSTANCE_FLAGS (space_fl=
ag);
+
+  if (gdbarch_address_class_id_to_name_p (gdbarch))
+    return gdbarch_address_class_id_to_name (gdbarch, aclass);
   else
     return NULL;
 }
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 572bf6d3d6f..3c21d4ad214 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -175,6 +175,10 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, ty=
pe_instance_flags);
   (TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2)
 #define TYPE_ADDRESS_CLASS_ALL(t) (((t)->instance_flags ()) \
 				   & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
+#define TYPE_ADDRESS_CLASS_FROM_INSTANCE_FLAGS(t) \
+  ((unsigned int) ((t) & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL) >> 4)
+#define TYPE_ADDRESS_CLASS(t) \
+  (TYPE_ADDRESS_CLASS_FROM_INSTANCE_FLAGS ((t)->instance_flags ()))
=20
 /* Information about a single discriminant.  */
=20
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index f74e55284c0..57ddce44644 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -1619,14 +1619,14 @@ s390_address_class_type_flags (int byte_size, int d=
warf2_addr_class)
     return 0;
 }
=20
-/* Implement addr_class_type_flags_to_name gdbarch method.
+/* Implement addr_class_id_to_name gdbarch method.
    Only used for ABI_LINUX_ZSERIES.  */
=20
 static const char *
-s390_address_class_type_flags_to_name (struct gdbarch *gdbarch,
-				       type_instance_flags type_flags)
+s390_address_class_id_to_name (struct gdbarch *gdbarch,
+			       unsigned int address_class)
 {
-  if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
+  if (address_class =3D=3D 1)
     return "mode32";
   else
     return NULL;
@@ -7357,8 +7357,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct g=
dbarch_list *arches)
       set_gdbarch_ptr_bit (gdbarch, 64);
       set_gdbarch_address_class_type_flags (gdbarch,
 					    s390_address_class_type_flags);
-      set_gdbarch_address_class_type_flags_to_name (gdbarch,
-						    s390_address_class_type_flags_to_name);
+      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);
       break;