aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorYao Qi <yao.qi@linaro.org>2018-02-16 16:20:58 +0000
committerYao Qi <yao.qi@linaro.org>2018-02-16 16:20:58 +0000
commitfd90ace4c1e77c94e90d2942cebe84e9a2019c0f (patch)
tree238171dee65bdaa736aadcc8413208f70f084a54 /gdb/dwarf2read.c
parent75cdede09952b5aa8c6d4ceb0de10c5e93002a6d (diff)
downloadgdb-fd90ace4c1e77c94e90d2942cebe84e9a2019c0f.zip
gdb-fd90ace4c1e77c94e90d2942cebe84e9a2019c0f.tar.gz
gdb-fd90ace4c1e77c94e90d2942cebe84e9a2019c0f.tar.bz2
New class allocate_on_obstack
This patch adds a new class allocate_on_obstack, and let dwarf2_per_objfile inherit it, so that dwarf2_per_objfile is automatically allocated on obstack, and "delete dwarf2_per_objfile" doesn't de-allocate any space. gdb: 2018-02-16 Yao Qi <yao.qi@linaro.org> * block.c (block_namespace_info): Inherit allocate_on_obstack. (block_initialize_namespace): Use new. * dwarf2read.c (dwarf2_per_objfile): Inherit allocate_on_obstack. (dwarf2_free_objfile): Use delete. * gdbtypes.c (type_pair): Inherit allocate_on_obstack. (copy_type_recursive): Use new. * gdb_obstack.h (allocate_on_obstack): New.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r--gdb/dwarf2read.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index d6d3d4a..6cdb963 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -380,7 +380,7 @@ struct tu_stats
/* Collection of data recorded per objfile.
This hangs off of dwarf2_objfile_data_key. */
-struct dwarf2_per_objfile
+struct dwarf2_per_objfile : public allocate_on_obstack
{
/* Construct a dwarf2_per_objfile for OBJFILE. NAMES points to the
dwarf2 section names, or is NULL if the standard ELF names are
@@ -2525,10 +2525,9 @@ dwarf2_has_info (struct objfile *objfile,
if (dwarf2_per_objfile == NULL)
{
/* Initialize per-objfile state. */
- struct dwarf2_per_objfile *data
- = XOBNEW (&objfile->objfile_obstack, struct dwarf2_per_objfile);
-
- dwarf2_per_objfile = new (data) struct dwarf2_per_objfile (objfile, names);
+ dwarf2_per_objfile
+ = new (&objfile->objfile_obstack) struct dwarf2_per_objfile (objfile,
+ names);
set_dwarf2_per_objfile (objfile, dwarf2_per_objfile);
}
return (!dwarf2_per_objfile->info.is_virtual
@@ -25202,10 +25201,7 @@ dwarf2_free_objfile (struct objfile *objfile)
struct dwarf2_per_objfile *dwarf2_per_objfile
= get_dwarf2_per_objfile (objfile);
- if (dwarf2_per_objfile == NULL)
- return;
-
- dwarf2_per_objfile->~dwarf2_per_objfile ();
+ delete dwarf2_per_objfile;
}
/* A set of CU "per_cu" pointer, DIE offset, and GDB type pointer.