diff options
-rw-r--r-- | gdb/ChangeLog | 18 | ||||
-rw-r--r-- | gdb/inferior.c | 2 | ||||
-rw-r--r-- | gdb/progspace.c | 84 | ||||
-rw-r--r-- | gdb/progspace.h | 14 |
4 files changed, 71 insertions, 47 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7ba862e..6c280e3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2020-04-16 Pedro Alves <palves@redhat.com> + + * inferior.c (delete_inferior): Use delete operator directly + instead of delete_program_space. + * progspace.c (add_program_space): New, factored out from + program_space::program_space. + (remove_program_space): New, factored out from + delete_program_space. + (program_space::program_space): Remove intro comment. Rewrite. + (program_space::~program_space): Remove intro comment. Call + remove_program_space. + (delete_program_space): Delete. + * progspace.h (program_space::program_space): Make explicit. Move + intro comment here, adjusted. + (program_space::~program_space): Move intro comment here, + adjusted. + (delete_program_space): Remove. + 2020-04-16 Tom Tromey <tromey@adacore.com> * windows-nat.c (windows_nat::handle_access_violation): New diff --git a/gdb/inferior.c b/gdb/inferior.c index c2e9da3..ceee00e 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -162,7 +162,7 @@ delete_inferior (struct inferior *todel) /* If this program space is rendered useless, remove it. */ if (program_space_empty_p (inf->pspace)) - delete_program_space (inf->pspace); + delete inf->pspace; delete inf; } diff --git a/gdb/progspace.c b/gdb/progspace.c index 1361040..6419f01 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -109,36 +109,65 @@ init_address_spaces (void) -/* Adds a new empty program space to the program space list, and binds - it to ASPACE. Returns the pointer to the new object. */ +/* Add a program space from the program spaces list. */ -program_space::program_space (address_space *aspace_) -: num (++last_program_space_num), aspace (aspace_) +static void +add_program_space (program_space *pspace) { - program_space_alloc_data (this); - if (program_spaces == NULL) - program_spaces = this; + program_spaces = pspace; else { - struct program_space *last; + program_space *last; for (last = program_spaces; last->next != NULL; last = last->next) ; - last->next = this; + last->next = pspace; } } -/* Releases program space PSPACE, and all its contents (shared - libraries, objfiles, and any other references to the PSPACE in - other modules). It is an internal error to call this when PSPACE - is the current program space, since there should always be a - program space. */ +/* Remove a program space from the program spaces list. */ + +static void +remove_program_space (program_space *pspace) +{ + program_space *ss, **ss_link; + gdb_assert (pspace != NULL); + + ss = program_spaces; + ss_link = &program_spaces; + while (ss != NULL) + { + if (ss == pspace) + { + *ss_link = ss->next; + return; + } + + ss_link = &ss->next; + ss = *ss_link; + } +} + +/* See progspace.h. */ + +program_space::program_space (address_space *aspace_) + : num (++last_program_space_num), + aspace (aspace_) +{ + program_space_alloc_data (this); + + add_program_space (this); +} + +/* See progspace.h. */ program_space::~program_space () { gdb_assert (this != current_program_space); + remove_program_space (this); + scoped_restore_current_program_space restore_pspace; set_current_program_space (this); @@ -259,33 +288,6 @@ program_space_empty_p (struct program_space *pspace) return 1; } -/* 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. */ - -void -delete_program_space (struct program_space *pspace) -{ - struct program_space *ss, **ss_link; - gdb_assert (pspace != NULL); - gdb_assert (pspace != current_program_space); - - ss = program_spaces; - ss_link = &program_spaces; - while (ss != NULL) - { - if (ss == pspace) - { - *ss_link = ss->next; - break; - } - - ss_link = &ss->next; - ss = *ss_link; - } - - delete pspace; -} - /* Prints the list of program spaces and their details on UIOUT. If REQUESTED is not -1, it's the ID of the pspace that should be printed. Otherwise, all spaces are printed. */ diff --git a/gdb/progspace.h b/gdb/progspace.h index 71a6f28..2b88784 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -209,7 +209,15 @@ private: struct program_space { - program_space (address_space *aspace_); + /* Constructs a new empty program space, binds it to ASPACE, and + adds it to the program space list. */ + explicit program_space (address_space *aspace); + + /* Releases a program space, and all its contents (shared libraries, + objfiles, and any other references to the program space in other + modules). It is an internal error to call this when the program + space is the current program space, since there should always be + a program space. */ ~program_space (); typedef unwrapping_objfile_range objfiles_range; @@ -362,10 +370,6 @@ extern struct program_space *current_program_space; #define ALL_PSPACES(pspace) \ for ((pspace) = program_spaces; (pspace) != NULL; (pspace) = (pspace)->next) -/* 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); - /* Returns the number of program spaces listed. */ extern int number_of_program_spaces (void); |