Change arm_objfile_data_key to use type-safe registry
authorTom Tromey <tromey@adacore.com>
Wed, 26 Jun 2019 17:41:00 +0000 (11:41 -0600)
committerTom Tromey <tromey@adacore.com>
Thu, 27 Jun 2019 14:01:18 +0000 (08:01 -0600)
After seeing Simon's patch to change arm_per_objfile to use new and
delete, I realized it is now simple to change arm_objfile_data_key to
use the type-safe registry.

gdb/ChangeLog
2019-06-27  Tom Tromey  <tromey@adacore.com>

* arm-tdep.c (arm_objfile_data_key): Move lower.  Change type to
objfile_key.
(arm_find_mapping_symbol, arm_record_special_symbol)
(_initialize_arm_tdep): Update.
(arm_objfile_data_free): Remove.

gdb/ChangeLog
gdb/arm-tdep.c

index 28a0df36dba2b4ccb0d40d34924c84d2958caec7..add3da868fbfe3371356693b3ce2225d043d875f 100644 (file)
@@ -1,3 +1,11 @@
+2019-06-27  Tom Tromey  <tromey@adacore.com>
+
+       * arm-tdep.c (arm_objfile_data_key): Move lower.  Change type to
+       objfile_key.
+       (arm_find_mapping_symbol, arm_record_special_symbol)
+       (_initialize_arm_tdep): Update.
+       (arm_objfile_data_free): Remove.
+
 2019-06-27  Tom Tromey  <tromey@adacore.com>
 
        * cp-valprint.c (cp_print_value_fields): Pass opts, not options,
index 039b2f071b29acdf5bb1e3a661517803b91b67d0..d244707210628ab045f677c0cbad3d8b0c6d6269 100644 (file)
@@ -88,9 +88,6 @@ static int arm_debug;
 #define MSYMBOL_IS_SPECIAL(msym)                               \
        MSYMBOL_TARGET_FLAG_1 (msym)
 
-/* Per-objfile data used for mapping symbols.  */
-static const struct objfile_data *arm_objfile_data_key;
-
 struct arm_mapping_symbol
 {
   bfd_vma value;
@@ -126,6 +123,9 @@ struct arm_per_objfile
   std::unique_ptr<bool[]> section_maps_sorted;
 };
 
+/* Per-objfile data used for mapping symbols.  */
+static objfile_key<arm_per_objfile> arm_objfile_data_key;
+
 /* The list of available "set arm ..." and "show arm ..." commands.  */
 static struct cmd_list_element *setarmcmdlist = NULL;
 static struct cmd_list_element *showarmcmdlist = NULL;
@@ -356,9 +356,7 @@ arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
   sec = find_pc_section (memaddr);
   if (sec != NULL)
     {
-      arm_per_objfile *data
-       = (struct arm_per_objfile *) objfile_data (sec->objfile,
-                                                  arm_objfile_data_key);
+      arm_per_objfile *data = arm_objfile_data_key.get (sec->objfile);
       if (data != NULL)
        {
          unsigned int section_idx = sec->the_bfd_section->index;
@@ -8528,14 +8526,6 @@ arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
     MSYMBOL_SET_SPECIAL (msym);
 }
 
-static void
-arm_objfile_data_free (struct objfile *objfile, void *arg)
-{
-  struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
-
-  delete data;
-}
-
 static void
 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
                           asymbol *sym)
@@ -8548,13 +8538,10 @@ arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
     return;
 
-  data = (struct arm_per_objfile *) objfile_data (objfile,
-                                                 arm_objfile_data_key);
+  data = arm_objfile_data_key.get (objfile);
   if (data == NULL)
-    {
-      data = new arm_per_objfile (objfile->obfd->section_count);
-      set_objfile_data (objfile, arm_objfile_data_key, data);
-    }
+    data = arm_objfile_data_key.emplace (objfile,
+                                        objfile->obfd->section_count);
   arm_mapping_symbol_vec &map
     = data->section_maps[bfd_get_section (sym)->index];
 
@@ -9477,9 +9464,6 @@ _initialize_arm_tdep (void)
 
   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
 
-  arm_objfile_data_key
-    = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
-
   /* Add ourselves to objfile event chain.  */
   gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
   arm_exidx_data_key