]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Convert target-descriptions.c to new hash table
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 4 Nov 2024 18:27:39 +0000 (13:27 -0500)
committerSimon Marchi <simon.marchi@polymtl.ca>
Tue, 26 Nov 2024 03:07:04 +0000 (22:07 -0500)
This converts target-descriptions.c to use the new hash table.

Change-Id: I03dfc6053c9856c5578548afcfdf58abf8b7ec2c
Co-Authored-By: Tom Tromey <tom@tromey.com>
Approved-By: Tom Tromey <tom@tromey.com>
gdb/target-descriptions.c

index 1bd22c273a2999bcbd72bbb818b7dac3fb4d1da3..3ee8a751f3b303b7d02df40b3b3836c8a8c83066 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "arch-utils.h"
 #include "cli/cli-cmds.h"
+#include "gdbsupport/unordered_set.h"
 #include "gdbtypes.h"
 #include "reggroups.h"
 #include "target.h"
@@ -30,7 +31,6 @@
 #include "osabi.h"
 
 #include "gdbsupport/gdb_obstack.h"
-#include "hashtab.h"
 #include "inferior.h"
 #include <algorithm>
 #include "completer.h"
@@ -1042,16 +1042,14 @@ tdesc_use_registers (struct gdbarch *gdbarch,
   data->arch_regs = std::move (early_data->arch_regs);
 
   /* Build up a set of all registers, so that we can assign register
-     numbers where needed.  The hash table expands as necessary, so
-     the initial size is arbitrary.  */
-  htab_up reg_hash (htab_create (37, htab_hash_pointer, htab_eq_pointer,
-                                NULL));
+     numbers where needed.  */
+  gdb::unordered_set<tdesc_reg *> reg_hash;
+
   for (const tdesc_feature_up &feature : target_desc->features)
     for (const tdesc_reg_up &reg : feature->registers)
       {
-       void **slot = htab_find_slot (reg_hash.get (), reg.get (), INSERT);
+       reg_hash.insert (reg.get ());
 
-       *slot = reg.get ();
        /* Add reggroup if its new.  */
        if (!reg->group.empty ())
          if (reggroup_find (gdbarch, reg->group.c_str ()) == NULL)
@@ -1064,7 +1062,7 @@ tdesc_use_registers (struct gdbarch *gdbarch,
      architecture.  */
   for (const tdesc_arch_reg &arch_reg : data->arch_regs)
     if (arch_reg.reg != NULL)
-      htab_remove_elt (reg_hash.get (), arch_reg.reg);
+      reg_hash.erase (arch_reg.reg);
 
   /* Assign numbers to the remaining registers and add them to the
      list of registers.  The new numbers are always above gdbarch_num_regs.
@@ -1082,7 +1080,7 @@ tdesc_use_registers (struct gdbarch *gdbarch,
     {
       for (const tdesc_feature_up &feature : target_desc->features)
        for (const tdesc_reg_up &reg : feature->registers)
-         if (htab_find (reg_hash.get (), reg.get ()) != NULL)
+         if (reg_hash.contains (reg.get ()))
            {
              int regno = unk_reg_cb (gdbarch, feature.get (),
                                      reg->name.c_str (), num_regs);
@@ -1093,7 +1091,7 @@ tdesc_use_registers (struct gdbarch *gdbarch,
                    data->arch_regs.emplace_back (nullptr, nullptr);
                  data->arch_regs[regno] = tdesc_arch_reg (reg.get (), NULL);
                  num_regs = regno + 1;
-                 htab_remove_elt (reg_hash.get (), reg.get ());
+                 reg_hash.erase (reg.get ());
                }
            }
     }
@@ -1105,7 +1103,7 @@ tdesc_use_registers (struct gdbarch *gdbarch,
      unnumbered registers.  */
   for (const tdesc_feature_up &feature : target_desc->features)
     for (const tdesc_reg_up &reg : feature->registers)
-      if (htab_find (reg_hash.get (), reg.get ()) != NULL)
+      if (reg_hash.contains (reg.get ()))
        {
          data->arch_regs.emplace_back (reg.get (), nullptr);
          num_regs++;