X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fprogspace.h;h=6945e38eb921f41353a7699b386d2aaddb317a95;hb=343cc95202fce70383551053f2efab09c5e02366;hp=5a053b99d098249656be35677727d79b05686990;hpb=0dc327459b19e6765c8fe80957f5c8620611628e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/progspace.h b/gdb/progspace.h index 5a053b99d0..6945e38eb9 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -27,6 +27,7 @@ #include "registry.h" #include "gdbsupport/next-iterator.h" #include "gdbsupport/safe-iterator.h" +#include struct target_ops; struct bfd; @@ -138,20 +139,18 @@ struct program_space program_space (address_space *aspace_); ~program_space (); - typedef next_adapter objfiles_range; + typedef std::list objfiles_range; - /* Return an iterarable object that can be used to iterate over all + /* Return an iterable object that can be used to iterate over all objfiles. The basic use is in a foreach, like: for (objfile *objf : pspace->objfiles ()) { ... } */ - objfiles_range objfiles () + objfiles_range &objfiles () { - return objfiles_range (objfiles_head); + return objfiles_list; } - typedef next_adapter>> - objfiles_safe_range; + typedef basic_safe_range objfiles_safe_range; /* An iterable object that can be used to iterate over all objfiles. The basic use is in a foreach, like: @@ -162,9 +161,28 @@ struct program_space deleted during iteration. */ objfiles_safe_range objfiles_safe () { - return objfiles_safe_range (objfiles_head); + return objfiles_safe_range (objfiles_list); } + /* Add OBJFILE to the list of objfiles, putting it just before + BEFORE. If BEFORE is nullptr, it will go at the end of the + list. */ + void add_objfile (struct objfile *objfile, struct objfile *before); + + /* Remove OBJFILE from the list of objfiles. */ + void remove_objfile (struct objfile *objfile); + + /* Return true if there is more than one object file loaded; false + otherwise. */ + bool multi_objfile_p () const + { + return objfiles_list.size () > 1; + } + + /* Free all the objfiles associated with this program space. */ + void free_all_objfiles (); + + /* Pointer to next in linked list. */ struct program_space *next = NULL; @@ -215,9 +233,8 @@ struct program_space (e.g. the argument to the "symbol-file" or "file" command). */ struct objfile *symfile_object_file = NULL; - /* All known objfiles are kept in a linked list. This points to - the head of this list. */ - struct objfile *objfiles_head = NULL; + /* All known objfiles are kept in a linked list. */ + std::list objfiles_list; /* The set of target sections matching the sections mapped into this program space. Managed by both exec_ops and solib.c. */ @@ -258,10 +275,6 @@ struct address_space #define symfile_objfile current_program_space->symfile_object_file -/* All known objfiles are kept in a linked list. This points to the - root of this list. */ -#define object_files current_program_space->objfiles_head - /* The set of target sections matching the sections mapped into the current program space. */ #define current_target_sections (¤t_program_space->target_sections)