Add per-unit obstack
authorTom Tromey <tom@tromey.com>
Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)
committerTom Tromey <tom@tromey.com>
Wed, 12 Feb 2020 22:51:58 +0000 (15:51 -0700)
This adds an auto_obstack to the DWARF frame comp_unit object, and
then changes the remaining code here to use the comp_unit obstack
rather than the objfile obstack.

At this point, all the storage for frame data is self-contained --
that is, it is independent of the objfile.

gdb/ChangeLog
2020-02-12  Tom Tromey  <tom@tromey.com>

* dwarf2/frame.c (struct comp_unit) <obstack>: New member.
(decode_frame_entry_1): Use the comp_unit obstack.

gdb/ChangeLog
gdb/dwarf2/frame.c

index 1ac98840b0ccd4add6d0bbea3b8c954ad61e5f72..5b705632af3d45f993f98725d1e5345a435d2310 100644 (file)
@@ -1,3 +1,8 @@
+2020-02-12  Tom Tromey  <tom@tromey.com>
+
+       * dwarf2/frame.c (struct comp_unit) <obstack>: New member.
+       (decode_frame_entry_1): Use the comp_unit obstack.
+
 2020-02-12  Tom Tromey  <tom@tromey.com>
 
        * dwarf2/frame.c (struct comp_unit): Add initializers and
index b08e792a8a146eaf154ed77a09a147a6f2e36fd5..53f90799819a11afa61a51cf9b132e1b099d5b90 100644 (file)
@@ -164,6 +164,9 @@ struct comp_unit
 
   /* The FDE table.  */
   dwarf2_fde_table fde_table;
+
+  /* Hold data used by this module.  */
+  auto_obstack obstack;
 };
 
 static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc,
@@ -1777,7 +1780,7 @@ decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
       if (find_cie (cie_table, cie_pointer))
        return end;
 
-      cie = XOBNEW (&unit->objfile->objfile_obstack, struct dwarf2_cie);
+      cie = XOBNEW (&unit->obstack, struct dwarf2_cie);
       cie->initial_instructions = NULL;
       cie->cie_pointer = cie_pointer;
 
@@ -1956,7 +1959,7 @@ decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
       if (cie_pointer >= unit->dwarf_frame_size)
        return NULL;
 
-      fde = XOBNEW (&unit->objfile->objfile_obstack, struct dwarf2_fde);
+      fde = XOBNEW (&unit->obstack, struct dwarf2_fde);
       fde->cie = find_cie (cie_table, cie_pointer);
       if (fde->cie == NULL)
        {