Skip to content
  • Tom Tromey's avatar
    Move psymtabs to their own obstack · 8d7bcccb
    Tom Tromey authored
    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.
    8d7bcccb