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-08 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (struct comp_unit) <obstack>: New member.
(decode_frame_entry_1): Use the comp_unit obstack.
Change-Id: I8a1af090bcc2811762a38afbbea1512be7d952fb
---
gdb/ChangeLog | 5 +++++
gdb/dwarf2/frame.c | 7 +++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index 0e74b8e7e68..7e1a744513b 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -158,6 +158,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,
@@ -1771,7 +1774,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;
@@ -1950,7 +1953,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)
{