1 /* Program and address space management, for GDB, the GNU debugger.
3 Copyright (C) 2009-2023 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "arch-utils.h"
27 #include "gdbthread.h"
30 #include "cli/cli-style.h"
31 #include "observable.h"
33 /* The last program space number assigned. */
34 static int last_program_space_num
= 0;
36 /* The head of the program spaces list. */
37 std::vector
<struct program_space
*> program_spaces
;
39 /* Pointer to the current program space. */
40 struct program_space
*current_program_space
;
42 /* The last address space number assigned. */
43 static int highest_address_space_num
;
47 /* Create a new address space object, and add it to the list. */
49 address_space::address_space ()
50 : m_num (++highest_address_space_num
)
54 /* Maybe create a new address space object, and add it to the list, or
55 return a pointer to an existing address space, in case inferiors
56 share an address space on this target system. */
59 maybe_new_address_space ()
62 = gdbarch_has_shared_address_space (current_inferior ()->arch ());
66 /* Just return the first in the list. */
67 return program_spaces
[0]->aspace
;
70 return new_address_space ();
73 /* Start counting over from scratch. */
76 init_address_spaces (void)
78 highest_address_space_num
= 0;
83 /* Remove a program space from the program spaces list. */
86 remove_program_space (program_space
*pspace
)
88 gdb_assert (pspace
!= NULL
);
90 auto iter
= std::find (program_spaces
.begin (), program_spaces
.end (),
92 gdb_assert (iter
!= program_spaces
.end ());
93 program_spaces
.erase (iter
);
96 /* See progspace.h. */
98 program_space::program_space (address_space_ref_ptr aspace_
)
99 : num (++last_program_space_num
),
100 aspace (std::move (aspace_
))
102 program_spaces
.push_back (this);
103 gdb::observers::new_program_space
.notify (this);
106 /* See progspace.h. */
108 program_space::~program_space ()
110 gdb_assert (this != current_program_space
);
112 gdb::observers::free_program_space
.notify (this);
113 remove_program_space (this);
115 scoped_restore_current_program_space restore_pspace
;
117 set_current_program_space (this);
119 breakpoint_program_space_exit (this);
120 no_shared_libraries (NULL
, 0);
121 free_all_objfiles ();
122 /* Defer breakpoint re-set because we don't want to create new
123 locations for this pspace which we're tearing down. */
124 clear_symtab_users (SYMFILE_DEFER_BP_RESET
);
127 /* See progspace.h. */
130 program_space::free_all_objfiles ()
132 /* Any objfile reference would become stale. */
133 for (const shobj
&so
: current_program_space
->solibs ())
134 gdb_assert (so
.objfile
== NULL
);
136 while (!objfiles_list
.empty ())
137 objfiles_list
.front ()->unlink ();
140 /* See progspace.h. */
143 program_space::add_objfile (std::unique_ptr
<objfile
> &&objfile
,
144 struct objfile
*before
)
146 if (before
== nullptr)
147 objfiles_list
.push_back (std::move (objfile
));
150 auto iter
= std::find_if (objfiles_list
.begin (), objfiles_list
.end (),
151 [=] (const std::unique_ptr
<::objfile
> &objf
)
153 return objf
.get () == before
;
155 gdb_assert (iter
!= objfiles_list
.end ());
156 objfiles_list
.insert (iter
, std::move (objfile
));
160 /* See progspace.h. */
163 program_space::remove_objfile (struct objfile
*objfile
)
165 /* Removing an objfile from the objfile list invalidates any frame
166 that was built using frame info found in the objfile. Reinit the
167 frame cache to get rid of any frame that might otherwise
168 reference stale info. */
169 reinit_frame_cache ();
171 auto iter
= std::find_if (objfiles_list
.begin (), objfiles_list
.end (),
172 [=] (const std::unique_ptr
<::objfile
> &objf
)
174 return objf
.get () == objfile
;
176 gdb_assert (iter
!= objfiles_list
.end ());
177 objfiles_list
.erase (iter
);
179 if (objfile
== symfile_object_file
)
180 symfile_object_file
= NULL
;
183 /* See progspace.h. */
186 program_space::objfile_for_address (CORE_ADDR address
)
188 for (auto iter
: objfiles ())
190 /* Don't check separate debug objfiles. */
191 if (iter
->separate_debug_objfile_backlink
!= nullptr)
193 if (is_addr_in_objfile (address
, iter
))
199 /* See progspace.h. */
202 program_space::exec_close ()
206 /* Removing target sections may close the exec_ops target.
207 Clear ebfd before doing so to prevent recursion. */
208 bfd
*saved_ebfd
= ebfd
.get ();
209 ebfd
.reset (nullptr);
212 remove_target_sections (saved_ebfd
);
214 exec_filename
.reset (nullptr);
218 /* Copies program space SRC to DEST. Copies the main executable file,
219 and the main symbol file. Returns DEST. */
221 struct program_space
*
222 clone_program_space (struct program_space
*dest
, struct program_space
*src
)
224 scoped_restore_current_program_space restore_pspace
;
226 set_current_program_space (dest
);
228 if (src
->exec_filename
!= NULL
)
229 exec_file_attach (src
->exec_filename
.get (), 0);
231 if (src
->symfile_object_file
!= NULL
)
232 symbol_file_add_main (objfile_name (src
->symfile_object_file
),
233 SYMFILE_DEFER_BP_RESET
);
238 /* Sets PSPACE as the current program space. It is the caller's
239 responsibility to make sure that the currently selected
240 inferior/thread matches the selected program space. */
243 set_current_program_space (struct program_space
*pspace
)
245 if (current_program_space
== pspace
)
248 gdb_assert (pspace
!= NULL
);
250 current_program_space
= pspace
;
252 /* Different symbols change our view of the frame chain. */
253 reinit_frame_cache ();
256 /* Returns true iff there's no inferior bound to PSPACE. */
259 program_space::empty ()
261 return find_inferior_for_program_space (this) == nullptr;
264 /* Prints the list of program spaces and their details on UIOUT. If
265 REQUESTED is not -1, it's the ID of the pspace that should be
266 printed. Otherwise, all spaces are printed. */
269 print_program_space (struct ui_out
*uiout
, int requested
)
273 /* Start with a minimum width of 17 for the executable name column. */
274 size_t longest_exec_name
= 17;
276 /* Compute number of pspaces we will print. */
277 for (struct program_space
*pspace
: program_spaces
)
279 if (requested
!= -1 && pspace
->num
!= requested
)
282 if (pspace
->exec_filename
!= nullptr)
283 longest_exec_name
= std::max (strlen (pspace
->exec_filename
.get ()),
289 /* There should always be at least one. */
290 gdb_assert (count
> 0);
292 ui_out_emit_table
table_emitter (uiout
, 4, count
, "pspaces");
293 uiout
->table_header (1, ui_left
, "current", "");
294 uiout
->table_header (4, ui_left
, "id", "Id");
295 uiout
->table_header (longest_exec_name
, ui_left
, "exec", "Executable");
296 uiout
->table_header (17, ui_left
, "core", "Core File");
297 uiout
->table_body ();
299 for (struct program_space
*pspace
: program_spaces
)
303 if (requested
!= -1 && requested
!= pspace
->num
)
306 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
308 if (pspace
== current_program_space
)
309 uiout
->field_string ("current", "*");
311 uiout
->field_skip ("current");
313 uiout
->field_signed ("id", pspace
->num
);
315 if (pspace
->exec_filename
!= nullptr)
316 uiout
->field_string ("exec", pspace
->exec_filename
.get (),
317 file_name_style
.style ());
319 uiout
->field_skip ("exec");
321 if (pspace
->cbfd
!= nullptr)
322 uiout
->field_string ("core", bfd_get_filename (pspace
->cbfd
.get ()),
323 file_name_style
.style ());
325 uiout
->field_skip ("core");
327 /* Print extra info that doesn't really fit in tabular form.
328 Currently, we print the list of inferiors bound to a pspace.
329 There can be more than one inferior bound to the same pspace,
330 e.g., both parent/child inferiors in a vfork, or, on targets
331 that share pspaces between inferiors. */
334 /* We're going to switch inferiors. */
335 scoped_restore_current_thread restore_thread
;
337 for (inferior
*inf
: all_inferiors ())
338 if (inf
->pspace
== pspace
)
340 /* Switch to inferior in order to call target methods. */
341 switch_to_inferior_no_thread (inf
);
346 gdb_printf ("\n\tBound inferiors: ID %d (%s)",
348 target_pid_to_str (ptid_t (inf
->pid
)).c_str ());
351 gdb_printf (", ID %d (%s)",
353 target_pid_to_str (ptid_t (inf
->pid
)).c_str ());
360 /* Boolean test for an already-known program space id. */
363 valid_program_space_id (int num
)
365 for (struct program_space
*pspace
: program_spaces
)
366 if (pspace
->num
== num
)
372 /* If ARGS is NULL or empty, print information about all program
373 spaces. Otherwise, ARGS is a text representation of a LONG
374 indicating which the program space to print information about. */
377 maintenance_info_program_spaces_command (const char *args
, int from_tty
)
383 requested
= parse_and_eval_long (args
);
384 if (!valid_program_space_id (requested
))
385 error (_("program space ID %d not known."), requested
);
388 print_program_space (current_uiout
, requested
);
391 /* Update all program spaces matching to address spaces. The user may
392 have created several program spaces, and loaded executables into
393 them before connecting to the target interface that will create the
394 inferiors. All that happens before GDB has a chance to know if the
395 inferiors will share an address space or not. Call this after
396 having connected to the target interface and having fetched the
397 target description, to fixup the program/address spaces mappings.
399 It is assumed that there are no bound inferiors yet, otherwise,
400 they'd be left with stale referenced to released aspaces. */
403 update_address_spaces (void)
406 = gdbarch_has_shared_address_space (current_inferior ()->arch ());
408 init_address_spaces ();
412 address_space_ref_ptr aspace
= new_address_space ();
414 for (struct program_space
*pspace
: program_spaces
)
415 pspace
->aspace
= aspace
;
418 for (struct program_space
*pspace
: program_spaces
)
419 pspace
->aspace
= new_address_space ();
421 for (inferior
*inf
: all_inferiors ())
422 if (gdbarch_has_global_solist (current_inferior ()->arch ()))
423 inf
->aspace
= maybe_new_address_space ();
425 inf
->aspace
= inf
->pspace
->aspace
;
430 /* See progspace.h. */
433 program_space::clear_solib_cache ()
435 added_solibs
.clear ();
436 deleted_solibs
.clear ();
442 initialize_progspace (void)
444 add_cmd ("program-spaces", class_maintenance
,
445 maintenance_info_program_spaces_command
,
446 _("Info about currently known program spaces."),
447 &maintenanceinfolist
);
449 /* There's always one program space. Note that this function isn't
450 an automatic _initialize_foo function, since other
451 _initialize_foo routines may need to install their per-pspace
452 data keys. We can only allocate a progspace when all those
453 modules have done that. Do this before
454 initialize_current_architecture, because that accesses the ebfd
455 of current_program_space. */
456 current_program_space
= new program_space (new_address_space ());