X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fprogspace.h;h=a731eb6e24de73461d14eeddfd9cc4078c0308fa;hb=d0801dd8f22a3e739c6a7d126d45829df981794d;hp=c64209c5dffbfeb1be27a52b81118a913321cd62;hpb=564b1e3f2906bbbf53d003d6fdbcfc83661385e2;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/progspace.h b/gdb/progspace.h index c64209c5df..a731eb6e24 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -1,6 +1,6 @@ /* Program and address space management, for GDB, the GNU debugger. - Copyright (C) 2009-2018 Free Software Foundation, Inc. + Copyright (C) 2009-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -22,9 +22,12 @@ #define PROGSPACE_H #include "target.h" -#include "vec.h" -#include "gdb_vecs.h" +#include "gdb_bfd.h" +#include "gdbsupport/gdb_vecs.h" #include "registry.h" +#include "gdbsupport/next-iterator.h" +#include "gdbsupport/safe-iterator.h" +#include struct target_ops; struct bfd; @@ -35,9 +38,6 @@ struct address_space; struct program_space_data; struct address_space_data; -typedef struct so_list *so_list_ptr; -DEF_VEC_P (so_list_ptr); - /* A program space represents a symbolic view of an address space. Roughly speaking, it holds all the data associated with a non-running-yet program (main executable, main symbols), and when @@ -139,6 +139,47 @@ struct program_space program_space (address_space *aspace_); ~program_space (); + typedef std::list objfiles_range; + + /* 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 () + { + return objfiles_list; + } + + 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: + + for (objfile *objf : pspace->objfiles_safe ()) { ... } + + This variant uses a basic_safe_iterator so that objfiles can be + deleted during iteration. */ + objfiles_safe_range objfiles_safe () + { + 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; + } + + /* Pointer to next in linked list. */ struct program_space *next = NULL; @@ -157,6 +198,9 @@ struct program_space It needs to be freed by xfree. It is not NULL iff EBFD is not NULL. */ char *pspace_exec_filename = NULL; + /* Binary file diddling handle for the core file. */ + gdb_bfd_ref_ptr cbfd; + /* The address space attached to this program space. More than one program space may be bound to the same address space. In the traditional unix-like debugging scenario, this will usually @@ -186,9 +230,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 = 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. */ @@ -203,11 +246,11 @@ struct program_space /* When an solib is added, it is also added to this vector. This is so we can properly report solib changes to the user. */ - VEC (so_list_ptr) *added_solibs = NULL; + std::vector added_solibs; /* When an solib is removed, its name is added to this vector. This is so we can properly report solib changes to the user. */ - VEC (char_ptr) *deleted_solibs = NULL; + std::vector deleted_solibs; /* Per pspace data-pointers required by other GDB modules. */ REGISTRY_FIELDS {}; @@ -229,10 +272,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 - /* The set of target sections matching the sections mapped into the current program space. */ #define current_target_sections (¤t_program_space->target_sections)