[16/38] Change dwarf2_per_objfile::line_header_hash to htab_up

Message ID 20200123005710.7978-17-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Jan. 23, 2020, 12:56 a.m. UTC
  This changes dwarf2_per_objfile::line_header_hash to be an htab_up,
and changes it to use heap allocation.

gdb/ChangeLog
2020-01-22  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (~dwarf2_per_objfile): Don't delete
	line_header_hash.
	(handle_DW_AT_stmt_list): Update.  Don't allocate on obstack.
	* dwarf2/read.h (struct dwarf2_per_objfile) <line_header_hash>:
	Change type to htab_up.

Change-Id: Icb148a270838c0f96f38fc4a28b5b77d067927b6
---
 gdb/ChangeLog     |  8 ++++++++
 gdb/dwarf2/read.c | 18 ++++++------------
 gdb/dwarf2/read.h |  2 +-
 3 files changed, 15 insertions(+), 13 deletions(-)
  

Patch

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 17f2640d0d4..844ff8dc54b 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -2019,9 +2019,6 @@  dwarf2_per_objfile::~dwarf2_per_objfile ()
   if (quick_file_names_table)
     htab_delete (quick_file_names_table);
 
-  if (line_header_hash)
-    htab_delete (line_header_hash);
-
   for (dwarf2_per_cu_data *per_cu : all_comp_units)
     per_cu->imported_symtabs_free ();
 
@@ -11104,7 +11101,6 @@  handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
 {
   struct dwarf2_per_objfile *dwarf2_per_objfile
     = cu->per_cu->dwarf2_per_objfile;
-  struct objfile *objfile = dwarf2_per_objfile->objfile;
   struct attribute *attr;
   struct line_header line_header_local;
   hashval_t line_header_local_hash;
@@ -11129,12 +11125,10 @@  handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
       && die->tag == DW_TAG_partial_unit)
     {
       dwarf2_per_objfile->line_header_hash
-	= htab_create_alloc_ex (127, line_header_hash_voidp,
-				line_header_eq_voidp,
-				free_line_header_voidp,
-				&objfile->objfile_obstack,
-				hashtab_obstack_allocate,
-				dummy_obstack_deallocate);
+	.reset (htab_create_alloc (127, line_header_hash_voidp,
+				   line_header_eq_voidp,
+				   free_line_header_voidp,
+				   xcalloc, xfree));
     }
 
   line_header_local.sect_off = line_offset;
@@ -11142,7 +11136,7 @@  handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
   line_header_local_hash = line_header_hash (&line_header_local);
   if (dwarf2_per_objfile->line_header_hash != NULL)
     {
-      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash,
+      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash.get (),
 				       &line_header_local,
 				       line_header_local_hash, NO_INSERT);
 
@@ -11170,7 +11164,7 @@  handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
     slot = NULL;
   else
     {
-      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash,
+      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash.get (),
 				       &line_header_local,
 				       line_header_local_hash, INSERT);
       gdb_assert (slot != NULL);
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 9787127f99e..91d5c58faa0 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -219,7 +219,7 @@  public:
   std::vector<dwarf2_per_cu_data *> just_read_cus;
 
   /* Table containing line_header indexed by offset and offset_in_dwz.  */
-  htab_t line_header_hash {};
+  htab_up line_header_hash;
 
   /* Table containing all filenames.  This is an optional because the
      table is lazily constructed on first access.  */