]> Git Repo - binutils.git/blob - gdb/progspace.c
Remove ALL_SO_LIBS and so_list_head
[binutils.git] / gdb / progspace.c
1 /* Program and address space management, for GDB, the GNU debugger.
2
3    Copyright (C) 2009-2020 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 int last_program_space_num = 0;
33
34 /* The head of the program spaces list.  */
35 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->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 /* Add a program space from the program spaces list.  */
113
114 static void
115 add_program_space (program_space *pspace)
116 {
117   if (program_spaces == NULL)
118     program_spaces = pspace;
119   else
120     {
121       program_space *last;
122
123       for (last = program_spaces; last->next != NULL; last = last->next)
124         ;
125       last->next = pspace;
126     }
127 }
128
129 /* Remove a program space from the program spaces list.  */
130
131 static void
132 remove_program_space (program_space *pspace)
133 {
134   program_space *ss, **ss_link;
135   gdb_assert (pspace != NULL);
136
137   ss = program_spaces;
138   ss_link = &program_spaces;
139   while (ss != NULL)
140     {
141       if (ss == pspace)
142         {
143           *ss_link = ss->next;
144           return;
145         }
146
147       ss_link = &ss->next;
148       ss = *ss_link;
149     }
150 }
151
152 /* See progspace.h.  */
153
154 program_space::program_space (address_space *aspace_)
155   : num (++last_program_space_num),
156     aspace (aspace_)
157 {
158   program_space_alloc_data (this);
159
160   add_program_space (this);
161 }
162
163 /* See progspace.h.  */
164
165 program_space::~program_space ()
166 {
167   gdb_assert (this != current_program_space);
168
169   remove_program_space (this);
170
171   scoped_restore_current_program_space restore_pspace;
172
173   set_current_program_space (this);
174
175   breakpoint_program_space_exit (this);
176   no_shared_libraries (NULL, 0);
177   exec_close ();
178   free_all_objfiles ();
179   /* Defer breakpoint re-set because we don't want to create new
180      locations for this pspace which we're tearing down.  */
181   clear_symtab_users (SYMFILE_DEFER_BP_RESET);
182   if (!gdbarch_has_shared_address_space (target_gdbarch ()))
183     free_address_space (this->aspace);
184   clear_section_table (&this->target_sections);
185   clear_program_space_solib_cache (this);
186     /* Discard any data modules have associated with the PSPACE.  */
187   program_space_free_data (this);
188 }
189
190 /* See progspace.h.  */
191
192 void
193 program_space::free_all_objfiles ()
194 {
195   /* Any objfile reference would become stale.  */
196   for (struct so_list *so : current_program_space->solibs ())
197     gdb_assert (so->objfile == NULL);
198
199   while (!objfiles_list.empty ())
200     objfiles_list.front ()->unlink ();
201 }
202
203 /* See progspace.h.  */
204
205 void
206 program_space::add_objfile (std::shared_ptr<objfile> &&objfile,
207                             struct objfile *before)
208 {
209   if (before == nullptr)
210     objfiles_list.push_back (std::move (objfile));
211   else
212     {
213       auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (),
214                                 [=] (const std::shared_ptr<::objfile> &objf)
215                                 {
216                                   return objf.get () == before;
217                                 });
218       gdb_assert (iter != objfiles_list.end ());
219       objfiles_list.insert (iter, std::move (objfile));
220     }
221 }
222
223 /* See progspace.h.  */
224
225 void
226 program_space::remove_objfile (struct objfile *objfile)
227 {
228   auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (),
229                             [=] (const std::shared_ptr<::objfile> &objf)
230                             {
231                               return objf.get () == objfile;
232                             });
233   gdb_assert (iter != objfiles_list.end ());
234   objfiles_list.erase (iter);
235
236   if (objfile == symfile_object_file)
237     symfile_object_file = NULL;
238 }
239
240 /* See progspace.h.  */
241
242 next_adapter<struct so_list>
243 program_space::solibs () const
244 {
245   return next_adapter<struct so_list> (this->so_list);
246 }
247
248 /* Copies program space SRC to DEST.  Copies the main executable file,
249    and the main symbol file.  Returns DEST.  */
250
251 struct program_space *
252 clone_program_space (struct program_space *dest, struct program_space *src)
253 {
254   scoped_restore_current_program_space restore_pspace;
255
256   set_current_program_space (dest);
257
258   if (src->pspace_exec_filename != NULL)
259     exec_file_attach (src->pspace_exec_filename, 0);
260
261   if (src->symfile_object_file != NULL)
262     symbol_file_add_main (objfile_name (src->symfile_object_file),
263                           SYMFILE_DEFER_BP_RESET);
264
265   return dest;
266 }
267
268 /* Sets PSPACE as the current program space.  It is the caller's
269    responsibility to make sure that the currently selected
270    inferior/thread matches the selected program space.  */
271
272 void
273 set_current_program_space (struct program_space *pspace)
274 {
275   if (current_program_space == pspace)
276     return;
277
278   gdb_assert (pspace != NULL);
279
280   current_program_space = pspace;
281
282   /* Different symbols change our view of the frame chain.  */
283   reinit_frame_cache ();
284 }
285
286 /* Returns true iff there's no inferior bound to PSPACE.  */
287
288 int
289 program_space_empty_p (struct program_space *pspace)
290 {
291   if (find_inferior_for_program_space (pspace) != NULL)
292       return 0;
293
294   return 1;
295 }
296
297 /* Prints the list of program spaces and their details on UIOUT.  If
298    REQUESTED is not -1, it's the ID of the pspace that should be
299    printed.  Otherwise, all spaces are printed.  */
300
301 static void
302 print_program_space (struct ui_out *uiout, int requested)
303 {
304   struct program_space *pspace;
305   int count = 0;
306
307   /* Compute number of pspaces we will print.  */
308   ALL_PSPACES (pspace)
309     {
310       if (requested != -1 && pspace->num != requested)
311         continue;
312
313       ++count;
314     }
315
316   /* There should always be at least one.  */
317   gdb_assert (count > 0);
318
319   ui_out_emit_table table_emitter (uiout, 3, count, "pspaces");
320   uiout->table_header (1, ui_left, "current", "");
321   uiout->table_header (4, ui_left, "id", "Id");
322   uiout->table_header (17, ui_left, "exec", "Executable");
323   uiout->table_body ();
324
325   ALL_PSPACES (pspace)
326     {
327       struct inferior *inf;
328       int printed_header;
329
330       if (requested != -1 && requested != pspace->num)
331         continue;
332
333       ui_out_emit_tuple tuple_emitter (uiout, NULL);
334
335       if (pspace == current_program_space)
336         uiout->field_string ("current", "*");
337       else
338         uiout->field_skip ("current");
339
340       uiout->field_signed ("id", pspace->num);
341
342       if (pspace->pspace_exec_filename)
343         uiout->field_string ("exec", pspace->pspace_exec_filename);
344       else
345         uiout->field_skip ("exec");
346
347       /* Print extra info that doesn't really fit in tabular form.
348          Currently, we print the list of inferiors bound to a pspace.
349          There can be more than one inferior bound to the same pspace,
350          e.g., both parent/child inferiors in a vfork, or, on targets
351          that share pspaces between inferiors.  */
352       printed_header = 0;
353       for (inf = inferior_list; inf; inf = inf->next)
354         if (inf->pspace == pspace)
355           {
356             if (!printed_header)
357               {
358                 printed_header = 1;
359                 printf_filtered ("\n\tBound inferiors: ID %d (%s)",
360                                  inf->num,
361                                  target_pid_to_str (ptid_t (inf->pid)).c_str ());
362               }
363             else
364               printf_filtered (", ID %d (%s)",
365                                inf->num,
366                                target_pid_to_str (ptid_t (inf->pid)).c_str ());
367           }
368
369       uiout->text ("\n");
370     }
371 }
372
373 /* Boolean test for an already-known program space id.  */
374
375 static int
376 valid_program_space_id (int num)
377 {
378   struct program_space *pspace;
379
380   ALL_PSPACES (pspace)
381     if (pspace->num == num)
382       return 1;
383
384   return 0;
385 }
386
387 /* If ARGS is NULL or empty, print information about all program
388    spaces.  Otherwise, ARGS is a text representation of a LONG
389    indicating which the program space to print information about.  */
390
391 static void
392 maintenance_info_program_spaces_command (const char *args, int from_tty)
393 {
394   int requested = -1;
395
396   if (args && *args)
397     {
398       requested = parse_and_eval_long (args);
399       if (!valid_program_space_id (requested))
400         error (_("program space ID %d not known."), requested);
401     }
402
403   print_program_space (current_uiout, requested);
404 }
405
406 /* Simply returns the count of program spaces.  */
407
408 int
409 number_of_program_spaces (void)
410 {
411   struct program_space *pspace;
412   int count = 0;
413
414   ALL_PSPACES (pspace)
415     count++;
416
417   return count;
418 }
419
420 /* Update all program spaces matching to address spaces.  The user may
421    have created several program spaces, and loaded executables into
422    them before connecting to the target interface that will create the
423    inferiors.  All that happens before GDB has a chance to know if the
424    inferiors will share an address space or not.  Call this after
425    having connected to the target interface and having fetched the
426    target description, to fixup the program/address spaces mappings.
427
428    It is assumed that there are no bound inferiors yet, otherwise,
429    they'd be left with stale referenced to released aspaces.  */
430
431 void
432 update_address_spaces (void)
433 {
434   int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch ());
435   struct program_space *pspace;
436   struct inferior *inf;
437
438   init_address_spaces ();
439
440   if (shared_aspace)
441     {
442       struct address_space *aspace = new_address_space ();
443
444       free_address_space (current_program_space->aspace);
445       ALL_PSPACES (pspace)
446         pspace->aspace = aspace;
447     }
448   else
449     ALL_PSPACES (pspace)
450       {
451         free_address_space (pspace->aspace);
452         pspace->aspace = new_address_space ();
453       }
454
455   for (inf = inferior_list; inf; inf = inf->next)
456     if (gdbarch_has_global_solist (target_gdbarch ()))
457       inf->aspace = maybe_new_address_space ();
458     else
459       inf->aspace = inf->pspace->aspace;
460 }
461
462 \f
463
464 /* See progspace.h.  */
465
466 void
467 clear_program_space_solib_cache (struct program_space *pspace)
468 {
469   pspace->added_solibs.clear ();
470   pspace->deleted_solibs.clear ();
471 }
472
473 \f
474
475 void
476 initialize_progspace (void)
477 {
478   add_cmd ("program-spaces", class_maintenance,
479            maintenance_info_program_spaces_command,
480            _("Info about currently known program spaces."),
481            &maintenanceinfolist);
482
483   /* There's always one program space.  Note that this function isn't
484      an automatic _initialize_foo function, since other
485      _initialize_foo routines may need to install their per-pspace
486      data keys.  We can only allocate a progspace when all those
487      modules have done that.  Do this before
488      initialize_current_architecture, because that accesses exec_bfd,
489      which in turn dereferences current_program_space.  */
490   current_program_space = new program_space (new_address_space ());
491 }
This page took 0.055608 seconds and 4 git commands to generate.