diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2018-03-02 23:22:08 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2018-03-02 23:22:08 -0500 |
commit | 564b1e3f2906bbbf53d003d6fdbcfc83661385e2 (patch) | |
tree | f39a545af2f86a076051c4b32e9bd93b4e3214a9 /gdb/progspace.h | |
parent | e80aaf6183c6692ecc167bf26cbdc53f8f1a55f0 (diff) | |
download | gdb-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.h | 155 |
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); |