Automatic Copyright Year update after running gdb/copyright.py
[deliverable/binutils-gdb.git] / gdb / progspace.c
1 /* Program and address space management, for GDB, the GNU debugger.
2
3 Copyright (C) 2009-2022 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
20 #include "defs.h"
21 #include "gdbcmd.h"
22 #include "objfiles.h"
23 #include "arch-utils.h"
24 #include "gdbcore.h"
25 #include "solib.h"
26 #include "solist.h"
27 #include "gdbthread.h"
28 #include "inferior.h"
29 #include <algorithm>
30
31 /* The last program space number assigned. */
32 static int last_program_space_num = 0;
33
34 /* The head of the program spaces list. */
35 std::vector<struct program_space *> program_spaces;
36
37 /* Pointer to the current program space. */
38 struct program_space *current_program_space;
39
40 /* The last address space number assigned. */
41 static int highest_address_space_num;
42
43 \f
44
45 /* Keep a registry of per-program_space data-pointers required by other GDB
46 modules. */
47
48 DEFINE_REGISTRY (program_space, REGISTRY_ACCESS_FIELD)
49
50 /* Keep a registry of per-address_space data-pointers required by other GDB
51 modules. */
52
53 DEFINE_REGISTRY (address_space, REGISTRY_ACCESS_FIELD)
54
55 \f
56
57 /* Create a new address space object, and add it to the list. */
58
59 struct address_space *
60 new_address_space (void)
61 {
62 struct address_space *aspace;
63
64 aspace = XCNEW (struct address_space);
65 aspace->num = ++highest_address_space_num;
66 address_space_alloc_data (aspace);
67
68 return aspace;
69 }
70
71 /* Maybe create a new address space object, and add it to the list, or
72 return a pointer to an existing address space, in case inferiors
73 share an address space on this target system. */
74
75 struct address_space *
76 maybe_new_address_space (void)
77 {
78 int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch ());
79
80 if (shared_aspace)
81 {
82 /* Just return the first in the list. */
83 return program_spaces[0]->aspace;
84 }
85
86 return new_address_space ();
87 }
88
89 static void
90 free_address_space (struct address_space *aspace)
91 {
92 address_space_free_data (aspace);
93 xfree (aspace);
94 }
95
96 int
97 address_space_num (struct address_space *aspace)
98 {
99 return aspace->num;
100 }
101
102 /* Start counting over from scratch. */
103
104 static void
105 init_address_spaces (void)
106 {
107 highest_address_space_num = 0;
108 }
109
110 \f
111
112 /* Remove a program space from the program spaces list. */
113
114 static void
115 remove_program_space (program_space *pspace)
116 {
117 gdb_assert (pspace != NULL);
118
119 auto iter = std::find (program_spaces.begin (), program_spaces.end (),
120 pspace);
121 gdb_assert (iter != program_spaces.end ());
122 program_spaces.erase (iter);
123 }
124
125 /* See progspace.h. */
126
127 program_space::program_space (address_space *aspace_)
128 : num (++last_program_space_num),
129 aspace (aspace_)
130 {
131 program_space_alloc_data (this);
132
133 program_spaces.push_back (this);
134 }
135
136 /* See progspace.h. */
137
138 program_space::~program_space ()
139 {
140 gdb_assert (this != current_program_space);
141
142 remove_program_space (this);
143
144 scoped_restore_current_program_space restore_pspace;
145
146 set_current_program_space (this);
147
148 breakpoint_program_space_exit (this);
149 no_shared_libraries (NULL, 0);
150 free_all_objfiles ();
151 /* Defer breakpoint re-set because we don't want to create new
152 locations for this pspace which we're tearing down. */
153 clear_symtab_users (SYMFILE_DEFER_BP_RESET);
154 if (!gdbarch_has_shared_address_space (target_gdbarch ()))
155 free_address_space (this->aspace);
156 /* Discard any data modules have associated with the PSPACE. */
157 program_space_free_data (this);
158 }
159
160 /* See progspace.h. */
161
162 void
163 program_space::free_all_objfiles ()
164 {
165 /* Any objfile reference would become stale. */
166 for (struct so_list *so : current_program_space->solibs ())
167 gdb_assert (so->objfile == NULL);
168
169 while (!objfiles_list.empty ())
170 objfiles_list.front ()->unlink ();
171 }
172
173 /* See progspace.h. */
174
175 void
176 program_space::add_objfile (std::shared_ptr<objfile> &&objfile,
177 struct objfile *before)
178 {
179 if (before == nullptr)
180 objfiles_list.push_back (std::move (objfile));
181 else
182 {
183 auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (),
184 [=] (const std::shared_ptr<::objfile> &objf)
185 {
186 return objf.get () == before;
187 });
188 gdb_assert (iter != objfiles_list.end ());
189 objfiles_list.insert (iter, std::move (objfile));
190 }
191 }
192
193 /* See progspace.h. */
194
195 void
196 program_space::remove_objfile (struct objfile *objfile)
197 {
198 /* Removing an objfile from the objfile list invalidates any frame
199 that was built using frame info found in the objfile. Reinit the
200 frame cache to get rid of any frame that might otherwise
201 reference stale info. */
202 reinit_frame_cache ();
203
204 auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (),
205 [=] (const std::shared_ptr<::objfile> &objf)
206 {
207 return objf.get () == objfile;
208 });
209 gdb_assert (iter != objfiles_list.end ());
210 objfiles_list.erase (iter);
211
212 if (objfile == symfile_object_file)
213 symfile_object_file = NULL;
214 }
215
216 /* See progspace.h. */
217
218 next_adapter<struct so_list>
219 program_space::solibs () const
220 {
221 return next_adapter<struct so_list> (this->so_list);
222 }
223
224 /* See progspace.h. */
225
226 void
227 program_space::exec_close ()
228 {
229 if (ebfd != nullptr)
230 {
231 /* Removing target sections may close the exec_ops target.
232 Clear ebfd before doing so to prevent recursion. */
233 ebfd.reset (nullptr);
234 ebfd_mtime = 0;
235
236 remove_target_sections (&ebfd);
237
238 exec_filename.reset (nullptr);
239 }
240 }
241
242 /* Copies program space SRC to DEST. Copies the main executable file,
243 and the main symbol file. Returns DEST. */
244
245 struct program_space *
246 clone_program_space (struct program_space *dest, struct program_space *src)
247 {
248 scoped_restore_current_program_space restore_pspace;
249
250 set_current_program_space (dest);
251
252 if (src->exec_filename != NULL)
253 exec_file_attach (src->exec_filename.get (), 0);
254
255 if (src->symfile_object_file != NULL)
256 symbol_file_add_main (objfile_name (src->symfile_object_file),
257 SYMFILE_DEFER_BP_RESET);
258
259 return dest;
260 }
261
262 /* Sets PSPACE as the current program space. It is the caller's
263 responsibility to make sure that the currently selected
264 inferior/thread matches the selected program space. */
265
266 void
267 set_current_program_space (struct program_space *pspace)
268 {
269 if (current_program_space == pspace)
270 return;
271
272 gdb_assert (pspace != NULL);
273
274 current_program_space = pspace;
275
276 /* Different symbols change our view of the frame chain. */
277 reinit_frame_cache ();
278 }
279
280 /* Returns true iff there's no inferior bound to PSPACE. */
281
282 bool
283 program_space::empty ()
284 {
285 return find_inferior_for_program_space (this) == nullptr;
286 }
287
288 /* Prints the list of program spaces and their details on UIOUT. If
289 REQUESTED is not -1, it's the ID of the pspace that should be
290 printed. Otherwise, all spaces are printed. */
291
292 static void
293 print_program_space (struct ui_out *uiout, int requested)
294 {
295 int count = 0;
296
297 /* Compute number of pspaces we will print. */
298 for (struct program_space *pspace : program_spaces)
299 {
300 if (requested != -1 && pspace->num != requested)
301 continue;
302
303 ++count;
304 }
305
306 /* There should always be at least one. */
307 gdb_assert (count > 0);
308
309 ui_out_emit_table table_emitter (uiout, 3, count, "pspaces");
310 uiout->table_header (1, ui_left, "current", "");
311 uiout->table_header (4, ui_left, "id", "Id");
312 uiout->table_header (17, ui_left, "exec", "Executable");
313 uiout->table_body ();
314
315 for (struct program_space *pspace : program_spaces)
316 {
317 int printed_header;
318
319 if (requested != -1 && requested != pspace->num)
320 continue;
321
322 ui_out_emit_tuple tuple_emitter (uiout, NULL);
323
324 if (pspace == current_program_space)
325 uiout->field_string ("current", "*");
326 else
327 uiout->field_skip ("current");
328
329 uiout->field_signed ("id", pspace->num);
330
331 if (pspace->exec_filename != nullptr)
332 uiout->field_string ("exec", pspace->exec_filename.get ());
333 else
334 uiout->field_skip ("exec");
335
336 /* Print extra info that doesn't really fit in tabular form.
337 Currently, we print the list of inferiors bound to a pspace.
338 There can be more than one inferior bound to the same pspace,
339 e.g., both parent/child inferiors in a vfork, or, on targets
340 that share pspaces between inferiors. */
341 printed_header = 0;
342
343 /* We're going to switch inferiors. */
344 scoped_restore_current_thread restore_thread;
345
346 for (inferior *inf : all_inferiors ())
347 if (inf->pspace == pspace)
348 {
349 /* Switch to inferior in order to call target methods. */
350 switch_to_inferior_no_thread (inf);
351
352 if (!printed_header)
353 {
354 printed_header = 1;
355 printf_filtered ("\n\tBound inferiors: ID %d (%s)",
356 inf->num,
357 target_pid_to_str (ptid_t (inf->pid)).c_str ());
358 }
359 else
360 printf_filtered (", ID %d (%s)",
361 inf->num,
362 target_pid_to_str (ptid_t (inf->pid)).c_str ());
363 }
364
365 uiout->text ("\n");
366 }
367 }
368
369 /* Boolean test for an already-known program space id. */
370
371 static int
372 valid_program_space_id (int num)
373 {
374 for (struct program_space *pspace : program_spaces)
375 if (pspace->num == num)
376 return 1;
377
378 return 0;
379 }
380
381 /* If ARGS is NULL or empty, print information about all program
382 spaces. Otherwise, ARGS is a text representation of a LONG
383 indicating which the program space to print information about. */
384
385 static void
386 maintenance_info_program_spaces_command (const char *args, int from_tty)
387 {
388 int requested = -1;
389
390 if (args && *args)
391 {
392 requested = parse_and_eval_long (args);
393 if (!valid_program_space_id (requested))
394 error (_("program space ID %d not known."), requested);
395 }
396
397 print_program_space (current_uiout, requested);
398 }
399
400 /* Update all program spaces matching to address spaces. The user may
401 have created several program spaces, and loaded executables into
402 them before connecting to the target interface that will create the
403 inferiors. All that happens before GDB has a chance to know if the
404 inferiors will share an address space or not. Call this after
405 having connected to the target interface and having fetched the
406 target description, to fixup the program/address spaces mappings.
407
408 It is assumed that there are no bound inferiors yet, otherwise,
409 they'd be left with stale referenced to released aspaces. */
410
411 void
412 update_address_spaces (void)
413 {
414 int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch ());
415 struct inferior *inf;
416
417 init_address_spaces ();
418
419 if (shared_aspace)
420 {
421 struct address_space *aspace = new_address_space ();
422
423 free_address_space (current_program_space->aspace);
424 for (struct program_space *pspace : program_spaces)
425 pspace->aspace = aspace;
426 }
427 else
428 for (struct program_space *pspace : program_spaces)
429 {
430 free_address_space (pspace->aspace);
431 pspace->aspace = new_address_space ();
432 }
433
434 for (inf = inferior_list; inf; inf = inf->next)
435 if (gdbarch_has_global_solist (target_gdbarch ()))
436 inf->aspace = maybe_new_address_space ();
437 else
438 inf->aspace = inf->pspace->aspace;
439 }
440
441 \f
442
443 /* See progspace.h. */
444
445 void
446 program_space::clear_solib_cache ()
447 {
448 added_solibs.clear ();
449 deleted_solibs.clear ();
450 }
451
452 \f
453
454 void
455 initialize_progspace (void)
456 {
457 add_cmd ("program-spaces", class_maintenance,
458 maintenance_info_program_spaces_command,
459 _("Info about currently known program spaces."),
460 &maintenanceinfolist);
461
462 /* There's always one program space. Note that this function isn't
463 an automatic _initialize_foo function, since other
464 _initialize_foo routines may need to install their per-pspace
465 data keys. We can only allocate a progspace when all those
466 modules have done that. Do this before
467 initialize_current_architecture, because that accesses the ebfd
468 of current_program_space. */
469 current_program_space = new program_space (new_address_space ());
470 }
This page took 0.039352 seconds and 4 git commands to generate.