X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fprogspace.c;h=9027087d734bf70107a50b4a7d885e41a0267e4a;hb=041be52673949e5b6cc2b507e55a379a54ab8ee0;hp=0f3ac81bd016f1b1d8735f3422dc0f48a8ed5c23;hpb=4a2b031d5452226cf7894f313b3aac603f7ec5fb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/progspace.c b/gdb/progspace.c index 0f3ac81bd0..9027087d73 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -1,6 +1,6 @@ /* Program and address space management, for GDB, the GNU debugger. - Copyright (C) 2009-2017 Free Software Foundation, Inc. + Copyright (C) 2009-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -24,6 +24,7 @@ #include "gdbcore.h" #include "solib.h" #include "gdbthread.h" +#include "inferior.h" /* The last program space number assigned. */ int last_program_space_num = 0; @@ -44,18 +45,6 @@ static int highest_address_space_num; DEFINE_REGISTRY (program_space, REGISTRY_ACCESS_FIELD) -/* An address space. It is used for comparing if pspaces/inferior/threads - see the same address space and for associating caches to each address - space. */ - -struct address_space -{ - int num; - - /* Per aspace data-pointers required by other GDB modules. */ - REGISTRY_FIELDS; -}; - /* Keep a registry of per-address_space data-pointers required by other GDB modules. */ @@ -121,30 +110,21 @@ 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. */ -struct program_space * -add_program_space (struct address_space *aspace) +program_space::program_space (address_space *aspace_) +: num (++last_program_space_num), aspace (aspace_) { - struct program_space *pspace; - - pspace = XCNEW (struct program_space); - - pspace->num = ++last_program_space_num; - pspace->aspace = aspace; - - program_space_alloc_data (pspace); + program_space_alloc_data (this); if (program_spaces == NULL) - program_spaces = pspace; + program_spaces = this; else { struct program_space *last; for (last = program_spaces; last->next != NULL; last = last->next) ; - last->next = pspace; + last->next = this; } - - return pspace; } /* Releases program space PSPACE, and all its contents (shared @@ -153,26 +133,24 @@ add_program_space (struct address_space *aspace) is the current program space, since there should always be a program space. */ -static void -release_program_space (struct program_space *pspace) +program_space::~program_space () { - gdb_assert (pspace != current_program_space); + gdb_assert (this != current_program_space); scoped_restore_current_program_space restore_pspace; - set_current_program_space (pspace); + set_current_program_space (this); - breakpoint_program_space_exit (pspace); + breakpoint_program_space_exit (this); no_shared_libraries (NULL, 0); exec_close (); free_all_objfiles (); if (!gdbarch_has_shared_address_space (target_gdbarch ())) - free_address_space (pspace->aspace); - clear_section_table (&pspace->target_sections); - clear_program_space_solib_cache (pspace); + free_address_space (this->aspace); + clear_section_table (&this->target_sections); + clear_program_space_solib_cache (this); /* Discard any data modules have associated with the PSPACE. */ - program_space_free_data (pspace); - xfree (pspace); + program_space_free_data (this); } /* Copies program space SRC to DEST. Copies the main executable file, @@ -189,7 +167,8 @@ clone_program_space (struct program_space *dest, struct program_space *src) exec_file_attach (src->pspace_exec_filename, 0); if (src->symfile_object_file != NULL) - symbol_file_add_main (objfile_name (src->symfile_object_file), 0); + symbol_file_add_main (objfile_name (src->symfile_object_file), + SYMFILE_DEFER_BP_RESET); return dest; } @@ -247,7 +226,7 @@ delete_program_space (struct program_space *pspace) ss = *ss_link; } - release_program_space (pspace); + delete pspace; } /* Prints the list of program spaces and their details on UIOUT. If @@ -314,12 +293,12 @@ print_program_space (struct ui_out *uiout, int requested) printed_header = 1; printf_filtered ("\n\tBound inferiors: ID %d (%s)", inf->num, - target_pid_to_str (pid_to_ptid (inf->pid))); + target_pid_to_str (ptid_t (inf->pid))); } else printf_filtered (", ID %d (%s)", inf->num, - target_pid_to_str (pid_to_ptid (inf->pid))); + target_pid_to_str (ptid_t (inf->pid))); } uiout->text ("\n"); @@ -345,7 +324,7 @@ valid_program_space_id (int num) indicating which the program space to print information about. */ static void -maintenance_info_program_spaces_command (char *args, int from_tty) +maintenance_info_program_spaces_command (const char *args, int from_tty) { int requested = -1; @@ -422,10 +401,8 @@ update_address_spaces (void) void clear_program_space_solib_cache (struct program_space *pspace) { - VEC_free (so_list_ptr, pspace->added_solibs); - - free_char_ptr_vec (pspace->deleted_solibs); - pspace->deleted_solibs = NULL; + pspace->added_solibs.clear (); + pspace->deleted_solibs.clear (); } @@ -445,5 +422,5 @@ initialize_progspace (void) modules have done that. Do this before initialize_current_architecture, because that accesses exec_bfd, which in turn dereferences current_program_space. */ - current_program_space = add_program_space (new_address_space ()); + current_program_space = new program_space (new_address_space ()); }