]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb: convert address_class_name_to_type_flags to address_class_name_to_id
authorTankut Baris Aktemur <tankutbaris.aktemur@amd.com>
Thu, 23 Jul 2026 10:04:42 +0000 (05:04 -0500)
committerTankut Baris Aktemur <tankutbaris.aktemur@amd.com>
Thu, 23 Jul 2026 10:10:06 +0000 (05:10 -0500)
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.

In one case, there is hardcoded `aclass << 4` to convert an id to type
instance flags.  This will go away in a future patch.

Approved-By: Tom Tromey <tom@tromey.com>
gdb/avr-tdep.c
gdb/ft32-tdep.c
gdb/gdbarch-gen.c
gdb/gdbarch-gen.h
gdb/gdbarch_components.py
gdb/gdbtypes.c
gdb/s390-tdep.c

index d29e47b3a71f27dce4670dc252a5a4a3c14ff867..58330eececdbe5da0b4190baad2aa56cd561bae5 100644 (file)
@@ -1401,18 +1401,18 @@ avr_address_class_id_to_name (struct gdbarch *gdbarch,
     return NULL;
 }
 
-/* Implementation of `address_class_name_to_type_flags' gdbarch method.
+/* Implementation of `address_class_name_to_id' gdbarch method.
 
-   Convert an address space qualifier to a type_instance_flag_value.  */
+   Convert an address class name to an address class id.  */
 
 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 = AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH;
+      address_class = AVR_ADDRESS_CLASS_FLASH;
       return true;
     }
   else
@@ -1535,8 +1535,8 @@ avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_unwind_sp (gdbarch, avr_unwind_sp);
 
   set_gdbarch_address_class_type_flags (gdbarch, avr_address_class_type_flags);
-  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);
 
index b0da5bf815b1f7221118a4fbdea2f6ffde7635a5..8906a09b0b6c4d84c4ba1b42f75c114702bf32eb 100644 (file)
@@ -368,18 +368,18 @@ ft32_address_class_id_to_name (struct gdbarch *gdbarch,
     return NULL;
 }
 
-/* Implementation of `address_class_name_to_type_flags' gdbarch method.
+/* Implementation of `address_class_name_to_id' gdbarch method.
 
-   Convert an address space qualifier to a type_instance_flag_value.  */
+   Convert an address class name to an address class id.  */
 
 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 = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
+      address_class = 1;
       return true;
     }
   else
@@ -610,8 +610,8 @@ ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
 
   set_gdbarch_address_class_type_flags (gdbarch, ft32_address_class_type_flags);
-  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);
 
index e1c5a902b00f404371812b21038711b6a0598b13..980682e1bfb5fe4df76ba37323d06a17279846b7 100644 (file)
@@ -166,7 +166,7 @@ struct gdbarch
   gdbarch_address_class_type_flags_ftype *address_class_type_flags = nullptr;
   gdbarch_address_class_id_to_name_ftype *address_class_id_to_name = nullptr;
   gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = default_execute_dwarf_cfa_vendor_op;
-  gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags = nullptr;
+  gdbarch_address_class_name_to_id_ftype *address_class_name_to_id = nullptr;
   gdbarch_register_reggroup_p_ftype *register_reggroup_p = default_register_reggroup_p;
   gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument = nullptr;
   gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections = 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 == 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 == 0.  */
   /* Skip verify of fetch_pointer_argument, invalid_p == 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 = <%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() = %d\n",
-             gdbarch_address_class_name_to_type_flags_p (gdbarch));
+             "gdbarch_dump: gdbarch_address_class_name_to_id_p() = %d\n",
+             gdbarch_address_class_name_to_id_p (gdbarch));
   gdb_printf (file,
-             "gdbarch_dump: address_class_name_to_type_flags = <%s>\n",
-             host_address_to_string (gdbarch->address_class_name_to_type_flags));
+             "gdbarch_dump: address_class_name_to_id = <%s>\n",
+             host_address_to_string (gdbarch->address_class_name_to_id));
   gdb_printf (file,
              "gdbarch_dump: register_reggroup_p = <%s>\n",
              host_address_to_string (gdbarch->register_reggroup_p));
@@ -3561,27 +3561,27 @@ set_gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch,
 }
 
 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 != nullptr);
-  return gdbarch->address_class_name_to_type_flags != nullptr;
+  return gdbarch->address_class_name_to_id != nullptr;
 }
 
 bool
-gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr)
+gdbarch_address_class_name_to_id (struct gdbarch *gdbarch, const char *name, unsigned int &address_class)
 {
   gdb_assert (gdbarch != nullptr);
-  gdb_assert (gdbarch->address_class_name_to_type_flags != nullptr);
+  gdb_assert (gdbarch->address_class_name_to_id != nullptr);
   if (gdbarch_debug >= 2)
-    gdb_printf (gdb_stdlog, "gdbarch_address_class_name_to_type_flags called\n");
-  return gdbarch->address_class_name_to_type_flags (gdbarch, name, type_flags_ptr);
+    gdb_printf (gdb_stdlog, "gdbarch_address_class_name_to_id called\n");
+  return gdbarch->address_class_name_to_id (gdbarch, name, address_class);
 }
 
 void
-set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch,
-                                             gdbarch_address_class_name_to_type_flags_ftype address_class_name_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 = address_class_name_to_type_flags;
+  gdbarch->address_class_name_to_id = address_class_name_to_id;
 }
 
 bool
index 9fea082a690cc2c907441470a52271237fe5e90c..05b1656a511c4704bc981ff6146a783b53d7c922 100644 (file)
@@ -918,15 +918,15 @@ using gdbarch_execute_dwarf_cfa_vendor_op_ftype = bool (struct gdbarch *gdbarch,
 bool gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op, struct dwarf2_frame_state *fs);
 void set_gdbarch_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op);
 
-/* 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. */
 
-bool gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch);
+bool gdbarch_address_class_name_to_id_p (struct gdbarch *gdbarch);
 
-using gdbarch_address_class_name_to_type_flags_ftype = bool (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr);
-bool gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const 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_type_flags);
+using gdbarch_address_class_name_to_id_ftype = bool (struct gdbarch *gdbarch, 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, gdbarch_address_class_name_to_id_ftype *address_class_name_to_id);
 
 /* Is a register in a group */
 
index 5ec4bdee8191336a537fad76bc2e90eb3b331340..d5d5a6d4fe356dce7bbf65d664248dda6f06b429 100644 (file)
@@ -1570,13 +1570,13 @@ FS are passed from the generic execute_cfa_program function.
 
 Method(
     comment="""
-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.
 """,
     type="bool",
-    name="address_class_name_to_type_flags",
-    params=[("const char *", "name"), ("type_instance_flags *", "type_flags_ptr")],
+    name="address_class_name_to_id",
+    params=[("const char *", "name"), ("unsigned int &", "address_class")],
     predicate=True,
 )
 
index f3c77073f7069a80751575d4b9bc05cb13f71329..87cc7d15d0df92ab39dc03f23b4efa3696ad66aa 100644 (file)
@@ -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);
 }
index 57ddce4464483ef662276a5a4ad27d4ffc0c8e2b..1aebdfa46d3f6c99a586a58a959487e7ccdc8f29 100644 (file)
@@ -1632,17 +1632,17 @@ s390_address_class_id_to_name (struct gdbarch *gdbarch,
     return NULL;
 }
 
-/* Implement addr_class_name_to_type_flags gdbarch method.
+/* Implement addr_class_name_to_id gdbarch method.
    Only used for ABI_LINUX_ZSERIES.  */
 
 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 = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
+      address_class = 1;
       return true;
     }
   else
@@ -7359,8 +7359,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_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;
     }