]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Convert dwarf2/macro.c to new hash table
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 19 Aug 2024 15:03:50 +0000 (15:03 +0000)
committerSimon Marchi <simon.marchi@efficios.com>
Fri, 23 Aug 2024 18:37:54 +0000 (14:37 -0400)
This converts dwarf2/macro.c to use the new hash table.

Change-Id: I6af0d1178e2db330fe3a89d57763974145ed17c4
Co-Authored-By: Tom Tromey <tom@tromey.com>
gdb/dwarf2/macro.c

index 5371acf3d59c58688950d7119cc157d1b2d28a39..34aac0b141655c0ca1a3f031358cccb5e9e6aa02 100644 (file)
@@ -422,7 +422,8 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
                          struct dwarf2_section_info *str_section,
                          struct dwarf2_section_info *str_offsets_section,
                          std::optional<ULONGEST> str_offsets_base,
-                         htab_t include_hash, struct dwarf2_cu *cu)
+                         gdb::unordered_set<const gdb_byte *> &include_hash,
+                         struct dwarf2_cu *cu)
 {
   struct objfile *objfile = per_objfile->objfile;
   enum dwarf_macro_record_type macinfo_type;
@@ -697,7 +698,6 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
        case DW_MACRO_import_sup:
          {
            LONGEST offset;
-           void **slot;
            bfd *include_bfd = abfd;
            const struct dwarf2_section_info *include_section = section;
            const gdb_byte *include_mac_end = mac_end;
@@ -719,9 +719,10 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
              }
 
            new_mac_ptr = include_section->buffer + offset;
-           slot = htab_find_slot (include_hash, new_mac_ptr, INSERT);
 
-           if (*slot != NULL)
+           bool inserted = include_hash.insert (new_mac_ptr).second;
+
+           if (!inserted)
              {
                /* This has actually happened; see
                   http://sourceware.org/bugzilla/show_bug.cgi?id=13568.  */
@@ -730,8 +731,6 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
              }
            else
              {
-               *slot = (void *) new_mac_ptr;
-
                dwarf_decode_macro_bytes (per_objfile, builder, include_bfd,
                                          new_mac_ptr, include_mac_end,
                                          current_file, lh, section,
@@ -739,7 +738,7 @@ dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
                                          str_section, str_offsets_section,
                                          str_offsets_base, include_hash, cu);
 
-               htab_remove_elt (include_hash, (void *) new_mac_ptr);
+               include_hash.erase (new_mac_ptr);
              }
          }
          break;
@@ -788,7 +787,6 @@ dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
   struct macro_source_file *current_file = 0;
   enum dwarf_macro_record_type macinfo_type;
   const gdb_byte *opcode_definitions[256];
-  void **slot;
 
   abfd = section->get_bfd_owner ();
 
@@ -933,14 +931,11 @@ dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
      command-line macro definitions/undefinitions.  This flag is unset when we
      reach the first DW_MACINFO_start_file entry.  */
 
-  htab_up include_hash (htab_create_alloc (1, htab_hash_pointer,
-                                          htab_eq_pointer,
-                                          NULL, xcalloc, xfree));
+  gdb::unordered_set<const gdb_byte *> include_hash;
   mac_ptr = section->buffer + offset;
-  slot = htab_find_slot (include_hash.get (), mac_ptr, INSERT);
-  *slot = (void *) mac_ptr;
+  include_hash.insert (mac_ptr);
   dwarf_decode_macro_bytes (per_objfile, builder, abfd, mac_ptr, mac_end,
                            current_file, lh, section, section_is_gnu, 0,
                            offset_size, str_section, str_offsets_section,
-                           str_offsets_base, include_hash.get (), cu);
+                           str_offsets_base, include_hash, cu);
 }