Add per-unit obstack

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.
This commit is contained in:
Tom Tromey 2020-02-12 15:45:08 -07:00
parent a7a3ae5c02
commit 0d404d447a
2 changed files with 10 additions and 2 deletions

View 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

View 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)
{