* linux-nat.c (linux_nat_thread_address_space): New.
[deliverable/binutils-gdb.git] / gdb / progspace.c
CommitLineData
6c95b8df
PA
1/* Program and address space management, for GDB, the GNU debugger.
2
3 Copyright (C) 2009 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 "gdbthread.h"
27
28/* The last program space number assigned. */
29int last_program_space_num = 0;
30
31/* The head of the program spaces list. */
32struct program_space *program_spaces;
33
34/* Pointer to the current program space. */
35struct program_space *current_program_space;
36
37/* The last address space number assigned. */
38static int highest_address_space_num;
39
40/* Prototypes for local functions */
41
42static void program_space_alloc_data (struct program_space *);
43static void program_space_free_data (struct program_space *);
44\f
45
46/* An address space. Currently this is not used for much other than
47 for comparing if pspaces/inferior/threads see the same address
48 space. */
49
50struct address_space
51{
52 int num;
53};
54
55/* Create a new address space object, and add it to the list. */
56
57struct address_space *
58new_address_space (void)
59{
60 struct address_space *aspace;
61
62 aspace = XZALLOC (struct address_space);
63 aspace->num = ++highest_address_space_num;
64
65 return aspace;
66}
67
68/* Maybe create a new address space object, and add it to the list, or
69 return a pointer to an existing address space, in case inferiors
70 share an address space on this target system. */
71
72struct address_space *
73maybe_new_address_space (void)
74{
75 int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch);
76
77 if (shared_aspace)
78 {
79 /* Just return the first in the list. */
80 return program_spaces->aspace;
81 }
82
83 return new_address_space ();
84}
85
86static void
87free_address_space (struct address_space *aspace)
88{
89 xfree (aspace);
90}
91
c0694254
PA
92int
93address_space_num (struct address_space *aspace)
94{
95 return aspace->num;
96}
97
6c95b8df
PA
98/* Start counting over from scratch. */
99
100static void
101init_address_spaces (void)
102{
103 highest_address_space_num = 0;
104}
105
106\f
107
108/* Adds a new empty program space to the program space list, and binds
109 it to ASPACE. Returns the pointer to the new object. */
110
111struct program_space *
112add_program_space (struct address_space *aspace)
113{
114 struct program_space *pspace;
115
116 pspace = XZALLOC (struct program_space);
117
118 pspace->num = ++last_program_space_num;
119 pspace->aspace = aspace;
120
121 program_space_alloc_data (pspace);
122
123 pspace->next = program_spaces;
124 program_spaces = pspace;
125
126 return pspace;
127}
128
129/* Releases program space PSPACE, and all its contents (shared
130 libraries, objfiles, and any other references to the PSPACE in
131 other modules). It is an internal error to call this when PSPACE
132 is the current program space, since there should always be a
133 program space. */
134
135static void
136release_program_space (struct program_space *pspace)
137{
138 struct cleanup *old_chain = save_current_program_space ();
139
140 gdb_assert (pspace != current_program_space);
141
142 set_current_program_space (pspace);
143
144 breakpoint_program_space_exit (pspace);
145 no_shared_libraries (NULL, 0);
146 exec_close ();
147 free_all_objfiles ();
148 if (!gdbarch_has_shared_address_space (target_gdbarch))
149 free_address_space (pspace->aspace);
150 resize_section_table (&pspace->target_sections,
151 -resize_section_table (&pspace->target_sections, 0));
152 /* Discard any data modules have associated with the PSPACE. */
153 program_space_free_data (pspace);
154 xfree (pspace);
155
156 do_cleanups (old_chain);
157}
158
159/* Unlinks PSPACE from the pspace list, and releases it. */
160
161void
162remove_program_space (struct program_space *pspace)
163{
164 struct program_space *ss, **ss_link;
165
166 ss = program_spaces;
167 ss_link = &program_spaces;
168 while (ss)
169 {
170 if (ss != pspace)
171 {
172 ss_link = &ss->next;
173 ss = *ss_link;
174 continue;
175 }
176
177 *ss_link = ss->next;
178 release_program_space (ss);
179 ss = *ss_link;
180 }
181}
182
183/* Copies program space SRC to DEST. Copies the main executable file,
184 and the main symbol file. Returns DEST. */
185
186struct program_space *
187clone_program_space (struct program_space *dest, struct program_space *src)
188{
189 struct program_space *new_pspace;
190 struct cleanup *old_chain;
191
192 old_chain = save_current_program_space ();
193
194 set_current_program_space (dest);
195
196 if (src->ebfd != NULL)
197 exec_file_attach (bfd_get_filename (src->ebfd), 0);
198
199 if (src->symfile_object_file != NULL)
200 symbol_file_add_main (src->symfile_object_file->name, 0);
201
202 do_cleanups (old_chain);
203 return dest;
204}
205
206/* Sets PSPACE as the current program space. It is the caller's
207 responsibility to make sure that the currently selected
208 inferior/thread matches the selected program space. */
209
210void
211set_current_program_space (struct program_space *pspace)
212{
213 if (current_program_space == pspace)
214 return;
215
216 gdb_assert (pspace != NULL);
217
218 current_program_space = pspace;
219
220 /* Different symbols change our view of the frame chain. */
221 reinit_frame_cache ();
222}
223
224/* A cleanups callback, helper for save_current_program_space
225 below. */
226
227static void
228restore_program_space (void *arg)
229{
230 struct program_space *saved_pspace = arg;
231 set_current_program_space (saved_pspace);
232}
233
234/* Save the current program space so that it may be restored by a later
235 call to do_cleanups. Returns the struct cleanup pointer needed for
236 later doing the cleanup. */
237
238struct cleanup *
239save_current_program_space (void)
240{
241 struct cleanup *old_chain = make_cleanup (restore_program_space,
242 current_program_space);
243 return old_chain;
244}
245
246/* Find program space number NUM; returns NULL if not found. */
247
248static struct program_space *
249find_program_space_by_num (int num)
250{
251 struct program_space *pspace;
252
253 ALL_PSPACES (pspace)
254 if (pspace->num == num)
255 return pspace;
256
257 return NULL;
258}
259
260/* Returns true iff there's no inferior bound to PSPACE. */
261
262static int
263pspace_empty_p (struct program_space *pspace)
264{
265 struct inferior *inf;
266
267 if (find_inferior_for_program_space (pspace) != NULL)
268 return 0;
269
270 return 1;
271}
272
273/* Prune away automatically added program spaces that aren't required
274 anymore. */
275
276void
277prune_program_spaces (void)
278{
279 struct program_space *ss, **ss_link;
280 struct program_space *current = current_program_space;
281
282 ss = program_spaces;
283 ss_link = &program_spaces;
284 while (ss)
285 {
286 if (ss == current || !pspace_empty_p (ss))
287 {
288 ss_link = &ss->next;
289 ss = *ss_link;
290 continue;
291 }
292
293 *ss_link = ss->next;
294 release_program_space (ss);
295 ss = *ss_link;
296 }
297}
298
299/* Prints the list of program spaces and their details on UIOUT. If
300 REQUESTED is not -1, it's the ID of the pspace that should be
301 printed. Otherwise, all spaces are printed. */
302
303static void
304print_program_space (struct ui_out *uiout, int requested)
305{
306 struct program_space *pspace;
307 int count = 0;
308 struct cleanup *old_chain;
309
310 /* Might as well prune away unneeded ones, so the user doesn't even
311 seem them. */
312 prune_program_spaces ();
313
314 /* Compute number of pspaces we will print. */
315 ALL_PSPACES (pspace)
316 {
317 if (requested != -1 && pspace->num != requested)
318 continue;
319
320 ++count;
321 }
322
323 /* There should always be at least one. */
324 gdb_assert (count > 0);
325
326 old_chain = make_cleanup_ui_out_table_begin_end (uiout, 3, count, "pspaces");
327 ui_out_table_header (uiout, 1, ui_left, "current", "");
328 ui_out_table_header (uiout, 4, ui_left, "id", "Id");
329 ui_out_table_header (uiout, 17, ui_left, "exec", "Executable");
330 ui_out_table_body (uiout);
331
332 ALL_PSPACES (pspace)
333 {
334 struct cleanup *chain2;
335 struct inferior *inf;
336 int printed_header;
337
338 if (requested != -1 && requested != pspace->num)
339 continue;
340
341 chain2 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
342
343 if (pspace == current_program_space)
344 ui_out_field_string (uiout, "current", "*");
345 else
346 ui_out_field_skip (uiout, "current");
347
348 ui_out_field_int (uiout, "id", pspace->num);
349
350 if (pspace->ebfd)
351 ui_out_field_string (uiout, "exec",
352 bfd_get_filename (pspace->ebfd));
353 else
354 ui_out_field_skip (uiout, "exec");
355
356 /* Print extra info that doesn't really fit in tabular form.
357 Currently, we print the list of inferiors bound to a pspace.
358 There can be more than one inferior bound to the same pspace,
359 e.g., both parent/child inferiors in a vfork, or, on targets
360 that share pspaces between inferiors. */
361 printed_header = 0;
362 for (inf = inferior_list; inf; inf = inf->next)
363 if (inf->pspace == pspace)
364 {
365 if (!printed_header)
366 {
367 printed_header = 1;
368 printf_filtered ("\n\tBound inferiors: ID %d (%s)",
369 inf->num,
370 target_pid_to_str (pid_to_ptid (inf->pid)));
371 }
372 else
373 printf_filtered (", ID %d (%s)",
374 inf->num,
375 target_pid_to_str (pid_to_ptid (inf->pid)));
376 }
377
378 ui_out_text (uiout, "\n");
379 do_cleanups (chain2);
380 }
381
382 do_cleanups (old_chain);
383}
384
385/* Boolean test for an already-known program space id. */
386
387static int
388valid_program_space_id (int num)
389{
390 struct program_space *pspace;
391
392 ALL_PSPACES (pspace)
393 if (pspace->num == num)
394 return 1;
395
396 return 0;
397}
398
399/* If ARGS is NULL or empty, print information about all program
400 spaces. Otherwise, ARGS is a text representation of a LONG
401 indicating which the program space to print information about. */
402
403static void
404maintenance_info_program_spaces_command (char *args, int from_tty)
405{
406 int requested = -1;
407
408 if (args && *args)
409 {
410 requested = parse_and_eval_long (args);
411 if (!valid_program_space_id (requested))
412 error (_("program space ID %d not known."), requested);
413 }
414
415 print_program_space (uiout, requested);
416}
417
418/* Simply returns the count of program spaces. */
419
420int
421number_of_program_spaces (void)
422{
423 struct program_space *pspace;
424 int count = 0;
425
426 ALL_PSPACES (pspace)
427 count++;
428
429 return count;
430}
431
432/* Update all program spaces matching to address spaces. The user may
433 have created several program spaces, and loaded executables into
434 them before connecting to the target interface that will create the
435 inferiors. All that happens before GDB has a chance to know if the
436 inferiors will share an address space or not. Call this after
437 having connected to the target interface and having fetched the
438 target description, to fixup the program/address spaces mappings.
439
440 It is assumed that there are no bound inferiors yet, otherwise,
441 they'd be left with stale referenced to released aspaces. */
442
443void
444update_address_spaces (void)
445{
446 int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch);
447 struct address_space *aspace = NULL;
448 struct program_space *pspace;
449
450 init_address_spaces ();
451
452 ALL_PSPACES (pspace)
453 {
454 free_address_space (pspace->aspace);
455
456 if (shared_aspace)
457 {
458 if (aspace == NULL)
459 aspace = new_address_space ();
460 pspace->aspace = aspace;
461 }
462 else
463 pspace->aspace = new_address_space ();
464 }
465}
466
467/* Save the current program space so that it may be restored by a later
468 call to do_cleanups. Returns the struct cleanup pointer needed for
469 later doing the cleanup. */
470
471struct cleanup *
472save_current_space_and_thread (void)
473{
474 struct cleanup *old_chain;
475
476 /* If restoring to null thread, we need to restore the pspace as
477 well, hence, we need to save the current program space first. */
478 old_chain = save_current_program_space ();
479 save_current_inferior ();
480 make_cleanup_restore_current_thread ();
481
482 return old_chain;
483}
484
485/* Switches full context to program space PSPACE. Switches to the
486 first thread found bound to PSPACE. */
487
488void
489switch_to_program_space_and_thread (struct program_space *pspace)
490{
491 struct inferior *inf;
492
493 inf = find_inferior_for_program_space (pspace);
494 if (inf != NULL)
495 {
496 struct thread_info *tp;
497
498 tp = any_live_thread_of_process (inf->pid);
499 if (tp != NULL)
500 {
501 switch_to_thread (tp->ptid);
502 /* Switching thread switches pspace implicitly. We're
503 done. */
504 return;
505 }
506 }
507
508 switch_to_thread (null_ptid);
509 set_current_program_space (pspace);
510}
511
512\f
513
514/* Keep a registry of per-program_space data-pointers required by other GDB
515 modules. */
516
517struct program_space_data
518{
519 unsigned index;
520 void (*cleanup) (struct program_space *, void *);
521};
522
523struct program_space_data_registration
524{
525 struct program_space_data *data;
526 struct program_space_data_registration *next;
527};
528
529struct program_space_data_registry
530{
531 struct program_space_data_registration *registrations;
532 unsigned num_registrations;
533};
534
535static struct program_space_data_registry program_space_data_registry
536 = { NULL, 0 };
537
538const struct program_space_data *
539register_program_space_data_with_cleanup
540 (void (*cleanup) (struct program_space *, void *))
541{
542 struct program_space_data_registration **curr;
543
544 /* Append new registration. */
545 for (curr = &program_space_data_registry.registrations;
546 *curr != NULL; curr = &(*curr)->next);
547
548 *curr = XMALLOC (struct program_space_data_registration);
549 (*curr)->next = NULL;
550 (*curr)->data = XMALLOC (struct program_space_data);
551 (*curr)->data->index = program_space_data_registry.num_registrations++;
552 (*curr)->data->cleanup = cleanup;
553
554 return (*curr)->data;
555}
556
557const struct program_space_data *
558register_program_space_data (void)
559{
560 return register_program_space_data_with_cleanup (NULL);
561}
562
563static void
564program_space_alloc_data (struct program_space *pspace)
565{
566 gdb_assert (pspace->data == NULL);
567 pspace->num_data = program_space_data_registry.num_registrations;
568 pspace->data = XCALLOC (pspace->num_data, void *);
569}
570
571static void
572program_space_free_data (struct program_space *pspace)
573{
574 gdb_assert (pspace->data != NULL);
575 clear_program_space_data (pspace);
576 xfree (pspace->data);
577 pspace->data = NULL;
578}
579
580void
581clear_program_space_data (struct program_space *pspace)
582{
583 struct program_space_data_registration *registration;
584 int i;
585
586 gdb_assert (pspace->data != NULL);
587
588 for (registration = program_space_data_registry.registrations, i = 0;
589 i < pspace->num_data;
590 registration = registration->next, i++)
591 if (pspace->data[i] != NULL && registration->data->cleanup)
592 registration->data->cleanup (pspace, pspace->data[i]);
593
594 memset (pspace->data, 0, pspace->num_data * sizeof (void *));
595}
596
597void
598set_program_space_data (struct program_space *pspace,
599 const struct program_space_data *data,
600 void *value)
601{
602 gdb_assert (data->index < pspace->num_data);
603 pspace->data[data->index] = value;
604}
605
606void *
607program_space_data (struct program_space *pspace, const struct program_space_data *data)
608{
609 gdb_assert (data->index < pspace->num_data);
610 return pspace->data[data->index];
611}
612
613\f
614
615void
616initialize_progspace (void)
617{
618 add_cmd ("program-spaces", class_maintenance,
619 maintenance_info_program_spaces_command, _("\
620Info about currently known program spaces."),
621 &maintenanceinfolist);
622
623 /* There's always one program space. Note that this function isn't
624 an automatic _initialize_foo function, since other
625 _initialize_foo routines may need to install their per-pspace
626 data keys. We can only allocate a progspace when all those
627 modules have done that. Do this before
628 initialize_current_architecture, because that accesses exec_bfd,
629 which in turn dereferences current_program_space. */
630 current_program_space = add_program_space (new_address_space ());
631}
This page took 0.046081 seconds and 4 git commands to generate.