aboutsummaryrefslogtreecommitdiff
path: root/gdb/progspace.h
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2018-03-02 23:22:08 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2018-03-02 23:22:08 -0500
commit564b1e3f2906bbbf53d003d6fdbcfc83661385e2 (patch)
treef39a545af2f86a076051c4b32e9bd93b4e3214a9 /gdb/progspace.h
parente80aaf6183c6692ecc167bf26cbdc53f8f1a55f0 (diff)
downloadgdb-564b1e3f2906bbbf53d003d6fdbcfc83661385e2.zip
gdb-564b1e3f2906bbbf53d003d6fdbcfc83661385e2.tar.gz
gdb-564b1e3f2906bbbf53d003d6fdbcfc83661385e2.tar.bz2
C++ify program_space
This patch makes program_space a C++ object by adding a constructor/destructor, giving default values to fields, and using new/delete. gdb/ChangeLog: * progspace.h (struct program_space): Add constructor and destructor, initialize fields. (add_program_space): Remove. * progspace.c (add_program_space): Rename to... (program_space::program_space): ... this. (release_program_space): Rename to... (program_space::~program_space): ... this. (delete_program_space): Use delete to delete program_space. (initialize_progspace): Use new to allocate program_space. * inferior.c (add_inferior_with_spaces): Likewise. (clone_inferior_command): Likewise. * infrun.c (follow_fork_inferior): Likewise. (handle_vfork_child_exec_or_exit): Likewise.
Diffstat (limited to 'gdb/progspace.h')
-rw-r--r--gdb/progspace.h155
1 files changed, 77 insertions, 78 deletions
diff --git a/gdb/progspace.h b/gdb/progspace.h
index 73929c9..c64209c 100644
--- a/gdb/progspace.h
+++ b/gdb/progspace.h
@@ -135,80 +135,83 @@ DEF_VEC_P (so_list_ptr);
/* The program space structure. */
struct program_space
- {
- /* Pointer to next in linked list. */
- struct program_space *next;
-
- /* Unique ID number. */
- int num;
-
- /* The main executable loaded into this program space. This is
- managed by the exec target. */
-
- /* The BFD handle for the main executable. */
- bfd *ebfd;
- /* The last-modified time, from when the exec was brought in. */
- long ebfd_mtime;
- /* Similar to bfd_get_filename (exec_bfd) but in original form given
- by user, without symbolic links and pathname resolved.
- It needs to be freed by xfree. It is not NULL iff EBFD is not NULL. */
- char *pspace_exec_filename;
-
- /* 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
- match the address space bound to the inferior, and is mostly
- used by the breakpoints module for address matches. If the
- target shares a program space for all inferiors and breakpoints
- are global, then this field is ignored (we don't currently
- support inferiors sharing a program space if the target doesn't
- make breakpoints global). */
- struct address_space *aspace;
-
- /* True if this program space's section offsets don't yet represent
- the final offsets of the "live" address space (that is, the
- section addresses still require the relocation offsets to be
- applied, and hence we can't trust the section addresses for
- anything that pokes at live memory). E.g., for qOffsets
- targets, or for PIE executables, until we connect and ask the
- target for the final relocation offsets, the symbols we've used
- to set breakpoints point at the wrong addresses. */
- int executing_startup;
-
- /* True if no breakpoints should be inserted in this program
- space. */
- int breakpoints_not_allowed;
-
- /* The object file that the main symbol table was loaded from
- (e.g. the argument to the "symbol-file" or "file" command). */
- struct objfile *symfile_object_file;
-
- /* All known objfiles are kept in a linked list. This points to
- the head of this list. */
- struct objfile *objfiles;
-
- /* The set of target sections matching the sections mapped into
- this program space. Managed by both exec_ops and solib.c. */
- struct target_section_table target_sections;
-
- /* List of shared objects mapped into this space. Managed by
- solib.c. */
- struct so_list *so_list;
-
- /* Number of calls to solib_add. */
- unsigned solib_add_generation;
-
- /* 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;
-
- /* 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;
-
- /* Per pspace data-pointers required by other GDB modules. */
- REGISTRY_FIELDS;
- };
+{
+ program_space (address_space *aspace_);
+ ~program_space ();
+
+ /* Pointer to next in linked list. */
+ struct program_space *next = NULL;
+
+ /* Unique ID number. */
+ int num = 0;
+
+ /* The main executable loaded into this program space. This is
+ managed by the exec target. */
+
+ /* The BFD handle for the main executable. */
+ bfd *ebfd = NULL;
+ /* The last-modified time, from when the exec was brought in. */
+ long ebfd_mtime = 0;
+ /* Similar to bfd_get_filename (exec_bfd) but in original form given
+ by user, without symbolic links and pathname resolved.
+ It needs to be freed by xfree. It is not NULL iff EBFD is not NULL. */
+ char *pspace_exec_filename = NULL;
+
+ /* 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
+ match the address space bound to the inferior, and is mostly
+ used by the breakpoints module for address matches. If the
+ target shares a program space for all inferiors and breakpoints
+ are global, then this field is ignored (we don't currently
+ support inferiors sharing a program space if the target doesn't
+ make breakpoints global). */
+ struct address_space *aspace = NULL;
+
+ /* True if this program space's section offsets don't yet represent
+ the final offsets of the "live" address space (that is, the
+ section addresses still require the relocation offsets to be
+ applied, and hence we can't trust the section addresses for
+ anything that pokes at live memory). E.g., for qOffsets
+ targets, or for PIE executables, until we connect and ask the
+ target for the final relocation offsets, the symbols we've used
+ to set breakpoints point at the wrong addresses. */
+ int executing_startup = 0;
+
+ /* True if no breakpoints should be inserted in this program
+ space. */
+ int breakpoints_not_allowed = 0;
+
+ /* The object file that the main symbol table was loaded from
+ (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;
+
+ /* The set of target sections matching the sections mapped into
+ this program space. Managed by both exec_ops and solib.c. */
+ struct target_section_table target_sections {};
+
+ /* List of shared objects mapped into this space. Managed by
+ solib.c. */
+ struct so_list *so_list = NULL;
+
+ /* Number of calls to solib_add. */
+ unsigned int solib_add_generation = 0;
+
+ /* 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;
+
+ /* 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;
+
+ /* Per pspace data-pointers required by other GDB modules. */
+ REGISTRY_FIELDS {};
+};
/* An address space. It is used for comparing if
pspaces/inferior/threads see the same address space and for
@@ -243,10 +246,6 @@ extern struct program_space *current_program_space;
#define ALL_PSPACES(pspace) \
for ((pspace) = program_spaces; (pspace) != NULL; (pspace) = (pspace)->next)
-/* Add a new empty program space, and assign ASPACE to it. Returns the
- pointer to the new object. */
-extern struct program_space *add_program_space (struct address_space *aspace);
-
/* Remove a program space from the program spaces list and release it. It is
an error to call this function while PSPACE is the current program space. */
extern void delete_program_space (struct program_space *pspace);