[06/19] Convert dwarf2/macro.c to new hash table

Message ID 20230407-t-robin-hood-hash-v1-6-900d93ef1510@tromey.com
State New
Headers
Series Add hash table to gdbsupport |

Commit Message

Tom Tromey April 7, 2023, 3:25 p.m. UTC
  This converts dwarf2/macro.c to use the new hash table.
---
 gdb/dwarf2/macro.c | 21 +++++++--------------
 1 file changed, 7 insertions(+), 14 deletions(-)
  

Patch

diff --git a/gdb/dwarf2/macro.c b/gdb/dwarf2/macro.c
index 78cce2d69eb..7a3aa5ffee3 100644
--- a/gdb/dwarf2/macro.c
+++ b/gdb/dwarf2/macro.c
@@ -445,7 +445,8 @@  dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
 			  struct dwarf2_section_info *str_section,
 			  struct dwarf2_section_info *str_offsets_section,
 			  gdb::optional<ULONGEST> str_offsets_base,
-			  htab_t include_hash, struct dwarf2_cu *cu)
+			  gdb::hash_set<const gdb_byte *> &include_hash,
+			  struct dwarf2_cu *cu)
 {
   struct objfile *objfile = per_objfile->objfile;
   enum dwarf_macro_record_type macinfo_type;
@@ -720,7 +721,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;
@@ -744,9 +744,8 @@  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)
+	    if (!include_hash.insert (new_mac_ptr).second)
 	      {
 		/* This has actually happened; see
 		   http://sourceware.org/bugzilla/show_bug.cgi?id=13568.  */
@@ -755,8 +754,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,
@@ -764,7 +761,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;
@@ -813,7 +810,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 ();
 
@@ -958,14 +954,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::hash_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);
 }