/* Public partial symbol table definitions.
- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ Copyright (C) 2009-2020 Free Software Foundation, Inc.
This file is part of GDB.
other memory managed by this class), or on the per-BFD object. The
only link from the psymtab storage object back to the objfile (or
objfile_obstack) that is made by the core psymtab code is the
- compunit_symtab member in the psymtab.
+ compunit_symtab member in the standard_psymtab -- and a given
+ symbol reader can avoid this by implementing its own subclasses of
+ partial_symtab.
However, it is up to each symbol reader to maintain this invariant
in other ways, if it wants to reuse psymtabs across multiple
return OBSTACK_CALLOC (obstack (), number, struct partial_symtab *);
}
- /* Allocate a new psymtab on the psymtab obstack. The new psymtab
- will be linked in to the "psymtabs" list, but otherwise all other
- fields will be zero. */
+ /* Install a psymtab on the psymtab list. This transfers ownership
+ of PST to this object. */
- struct partial_symtab *allocate_psymtab ();
+ void install_psymtab (partial_symtab *pst);
typedef next_adapter<struct partial_symtab> partial_symtab_range;
/* A byte cache where we can stash arbitrary "chunks" of bytes that
will not change. */
- struct bcache psymbol_cache;
+ gdb::bcache psymbol_cache;
/* Vectors of all partial symbols read in from file. The actual data
is stored in the objfile_obstack. */
std::vector<partial_symbol *> global_psymbols;
std::vector<partial_symbol *> static_psymbols;
-private:
+ /* Stack of vectors of partial symbols, using during psymtab
+ initialization. */
- /* List of freed partial symtabs, available for re-use. */
+ std::vector<std::vector<partial_symbol *>*> current_global_psymbols;
+ std::vector<std::vector<partial_symbol *>*> current_static_psymbols;
- struct partial_symtab *free_psymtabs = nullptr;
+private:
/* The obstack where allocations are made. This is lazily allocated
so that we don't waste memory when there are no psymtabs. */
extern const struct quick_symbol_functions dwarf2_debug_names_functions;
/* Ensure that the partial symbols for OBJFILE have been loaded. If
- VERBOSE is non-zero, then this will print a message when symbols
+ VERBOSE is true, then this will print a message when symbols
are loaded. This function returns a range adapter suitable for
iterating over the psymtabs of OBJFILE. */
extern psymtab_storage::partial_symtab_range require_partial_symbols
- (struct objfile *objfile, int verbose);
+ (struct objfile *objfile, bool verbose);
#endif /* PSYMTAB_H */