Change dwarf2_per_objfile::line_header_hash to htab_up
authorTom Tromey <tom@tromey.com>
Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)
committerTom Tromey <tom@tromey.com>
Sat, 8 Feb 2020 20:43:24 +0000 (13:43 -0700)
This changes dwarf2_per_objfile::line_header_hash to be an htab_up,
and changes it to use heap allocation.

2020-02-08  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
gdb/dwarf2/read.c
gdb/dwarf2/read.h

index 7e603f0c9f134e5283f624a3d8afaf37ad7e1832..b5c2954a885e7a8728a35051790bb8fac98c3b32 100644 (file)
@@ -1,3 +1,11 @@
+2020-02-08  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.
+
 2020-02-08  Tom Tromey  <tom@tromey.com>
 
        * dwarf2/read.c (allocate_type_unit_groups_table): Return
index f6501c6b605998b21b50320a0112c5111e18453d..6c698bd0fe47eae9d1202208ca1559597c38349a 100644 (file)
@@ -2014,9 +2014,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 ();
 
@@ -11059,7 +11056,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;
@@ -11084,12 +11080,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;
@@ -11097,7 +11091,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);
 
@@ -11125,7 +11119,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);
index 9e08cc1acde1db77133d8a5c93f33bfe3713a18a..0f30837d3e2b96216621ab5c0bc00f809752712b 100644 (file)
@@ -220,7 +220,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.  */