#include "progspace.h"
#include "registry.h"
#include "gdb_bfd.h"
+#include "psymtab.h"
#include <vector>
#include "common/next-iterator.h"
#include "common/safe-iterator.h"
DISABLE_COPY_AND_ASSIGN (objfile);
+ /* Reset the storage for the partial symbol tables. */
+
+ void reset_psymtabs ()
+ {
+ psymbol_map.clear ();
+ partial_symtabs.reset (new psymtab_storage ());
+ }
+
+ typedef next_adapter<struct compunit_symtab> compunits_range;
+
+ /* A range adapter that makes it possible to iterate over all
+ compunits in one objfile. */
+
+ compunits_range compunits ()
+ {
+ return compunits_range (compunit_symtabs);
+ }
+
/* All struct objfile's are chained together by their next pointers.
The program space field "objfiles" (frequently referenced via
the macro "object_files") points to the first link in this chain. */
struct compunit_symtab *compunit_symtabs = nullptr;
- /* Each objfile points to a linked list of partial symtabs derived from
- this file, one partial symtab structure for each compilation unit
- (source file). */
-
- struct partial_symtab *psymtabs = nullptr;
-
- /* Map addresses to the entries of PSYMTABS. It would be more efficient to
- have a map per the whole process but ADDRMAP cannot selectively remove
- its items during FREE_OBJFILE. This mapping is already present even for
- PARTIAL_SYMTABs which still have no corresponding full SYMTABs read. */
+ /* The partial symbol tables. */
- struct addrmap *psymtabs_addrmap = nullptr;
-
- /* List of freed partial symtabs, available for re-use. */
-
- struct partial_symtab *free_psymtabs = nullptr;
+ std::shared_ptr<psymtab_storage> partial_symtabs;
/* The object file's BFD. Can be null if the objfile contains only
minimal symbols, e.g. the run time common symbols for SunOS4. */
struct obstack objfile_obstack {};
- /* A byte cache where we can stash arbitrary "chunks" of bytes that
- will not change. */
-
- struct psymbol_bcache *psymbol_cache;
-
/* Map symbol addresses to the partial symtab that defines the
object at that address. */
std::vector<std::pair<CORE_ADDR, partial_symtab *>> psymbol_map;
- /* 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;
-
/* Structure which keeps track of functions that manipulate objfile's
of the same type as this objfile. I.e. the function to read partial
symbols for example. Note that this structure is in statically
Although this is a tree structure, GDB only support one level
(ie a separate debug for a separate debug is not supported). Note that
separate debug object are in the main chain and therefore will be
- visited by all_objfiles & co iterators. Separate debug objfile always
+ visited by objfiles & co iterators. Separate debug objfile always
has a non-nul separate_debug_objfile_backlink. */
/* Link to the first separate debug object, if any. */
void *cb_data, struct objfile *current_objfile);
\f
-/* An iterarable object that can be used to iterate over all
- objfiles. The basic use is in a foreach, like:
-
- for (objfile *objf : all_objfiles (pspace)) { ... } */
-
-class all_objfiles : public next_adapter<struct objfile>
-{
-public:
-
- explicit all_objfiles (struct program_space *pspace)
- : next_adapter<struct objfile> (pspace->objfiles)
- {
- }
-};
-
-/* An iterarable object that can be used to iterate over all
- objfiles. The basic use is in a foreach, like:
-
- for (objfile *objf : all_objfiles_safe (pspace)) { ... }
-
- This variant uses a basic_safe_iterator so that objfiles can be
- deleted during iteration. */
-
-class all_objfiles_safe
- : public next_adapter<struct objfile,
- basic_safe_iterator<next_iterator<objfile>>>
-{
-public:
-
- explicit all_objfiles_safe (struct program_space *pspace)
- : next_adapter<struct objfile,
- basic_safe_iterator<next_iterator<objfile>>>
- (pspace->objfiles)
- {
- }
-};
-
-/* A range adapter that makes it possible to iterate over all
- compunits in one objfile. */
-
-class objfile_compunits : public next_adapter<struct compunit_symtab>
-{
-public:
-
- explicit objfile_compunits (struct objfile *objfile)
- : next_adapter<struct compunit_symtab> (objfile->compunit_symtabs)
- {
- }
-};
-
/* A range adapter that makes it possible to iterate over all
minimal symbols of an objfile. */
struct objfile *m_objfile;
};
+/* A range adapter that makes it possible to iterate over all
+ psymtabs in one objfile. */
+
+class objfile_psymtabs : public next_adapter<struct partial_symtab>
+{
+public:
+
+ explicit objfile_psymtabs (struct objfile *objfile)
+ : next_adapter<struct partial_symtab> (objfile->partial_symtabs->psymtabs)
+ {
+ }
+};
+
#define ALL_OBJFILE_OSECTIONS(objfile, osect) \
for (osect = objfile->sections; osect < objfile->sections_end; osect++) \
if (osect->the_bfd_section == NULL) \