aboutsummaryrefslogtreecommitdiff
path: root/gdb/psymtab.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-05-10 16:23:57 -0600
committerTom Tromey <tom@tromey.com>2019-01-10 07:08:15 -0700
commit8d7bcccb82d9a7efccd75d9552d007c62031e855 (patch)
tree3092374c65dc9b2cbc2e30d561c0579b3aa2d61a /gdb/psymtab.c
parentb596a3c77da2387d7e5a3855717d65ce33bdfb58 (diff)
downloadgdb-8d7bcccb82d9a7efccd75d9552d007c62031e855.zip
gdb-8d7bcccb82d9a7efccd75d9552d007c62031e855.tar.gz
gdb-8d7bcccb82d9a7efccd75d9552d007c62031e855.tar.bz2
Move psymtabs to their own obstack
Previously, the psymtab obstack was just a pointer to the objfile obstack. This patch changes psymtabs to use their own obstack, instead. A gdb::optional is used to avoid unnecessary allocation when the obstack is not needed. After this patch, the psymtab code lifetime model is that, in the core psymtab code, objects allocated on the psymtab obstack may point to other such objects, or to objects on the per-BFD obstack -- but never to the objfile obstack. Note however that this invariant is only obeyed the core psymtab code, and even there not quite fully: there is still a link from the psymtab to the full symtab. Symbol readers are free to work however they like; and in particular, even after this patch, in practice all symbol readers violate this invariant via the read_symtab_private field. gdb/ChangeLog 2019-01-10 Tom Tromey <tom@tromey.com> * objfiles.h (objfile::reset_psymtabs): Update. * objfiles.c (objfile::objfile): Update. * psymtab.h (psymtab_storage::obstack): Update. (psymtab_storage::m_obstack): Use gdb::optional. (class psymtab_storage): Update comment. Remove objfile parameter. * psymtab.c (psymtab_storage::psymtab_storage): Update.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r--gdb/psymtab.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 7ead0eb..e034fda 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -67,9 +67,8 @@ static struct compunit_symtab *psymtab_to_symtab (struct objfile *objfile,
-psymtab_storage::psymtab_storage (struct objfile *objfile)
- : psymbol_cache (psymbol_bcache_init ()),
- m_obstack (&objfile->objfile_obstack)
+psymtab_storage::psymtab_storage ()
+ : psymbol_cache (psymbol_bcache_init ())
{
}