1 /* Multi-process control for GDB, the GNU debugger.
3 Copyright (C) 2008-2020 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/>. */
25 #include "completer.h"
27 #include "gdbthread.h"
29 #include "observable.h"
32 #include "gdbsupport/environ.h"
33 #include "cli/cli-utils.h"
34 #include "continuations.h"
35 #include "arch-utils.h"
36 #include "target-descriptions.h"
37 #include "readline/tilde.h"
38 #include "progspace-and-thread.h"
40 /* Keep a registry of per-inferior data-pointers required by other GDB
43 DEFINE_REGISTRY (inferior
, REGISTRY_ACCESS_FIELD
)
45 struct inferior
*inferior_list
= NULL
;
46 static int highest_inferior_num
;
49 bool print_inferior_events
= true;
51 /* The Current Inferior. This is a strong reference. I.e., whenever
52 an inferior is the current inferior, its refcount is
54 static struct inferior
*current_inferior_
= NULL
;
57 current_inferior (void)
59 return current_inferior_
;
63 set_current_inferior (struct inferior
*inf
)
65 /* There's always an inferior. */
66 gdb_assert (inf
!= NULL
);
69 current_inferior_
->decref ();
70 current_inferior_
= inf
;
73 private_inferior::~private_inferior () = default;
75 inferior::~inferior ()
79 discard_all_inferior_continuations (inf
);
80 inferior_free_data (inf
);
82 xfree (inf
->terminal
);
83 target_desc_info_free (inf
->tdesc_info
);
86 inferior::inferior (int pid_
)
87 : num (++highest_inferior_num
),
89 environment (gdb_environ::from_host_environ ()),
92 inferior_alloc_data (this);
94 m_target_stack
.push (get_dummy_target ());
98 add_inferior_silent (int pid
)
100 inferior
*inf
= new inferior (pid
);
102 if (inferior_list
== NULL
)
108 for (last
= inferior_list
; last
->next
!= NULL
; last
= last
->next
)
113 gdb::observers::inferior_added
.notify (inf
);
116 inferior_appeared (inf
, pid
);
122 add_inferior (int pid
)
124 struct inferior
*inf
= add_inferior_silent (pid
);
126 if (print_inferior_events
)
129 printf_unfiltered (_("[New inferior %d (%s)]\n"),
131 target_pid_to_str (ptid_t (pid
)).c_str ());
133 printf_unfiltered (_("[New inferior %d]\n"), inf
->num
);
140 delete_inferior (struct inferior
*todel
)
142 struct inferior
*inf
, *infprev
;
146 for (inf
= inferior_list
; inf
; infprev
= inf
, inf
= inf
->next
)
153 for (thread_info
*tp
: inf
->threads ())
154 delete_thread_silent_noremove (tp
);
157 infprev
->next
= inf
->next
;
159 inferior_list
= inf
->next
;
161 gdb::observers::inferior_removed
.notify (inf
);
163 /* If this program space is rendered useless, remove it. */
164 if (program_space_empty_p (inf
->pspace
))
165 delete_program_space (inf
->pspace
);
170 /* If SILENT then be quiet -- don't announce a inferior exit, or the
171 exit of its threads. */
174 exit_inferior_1 (struct inferior
*inftoex
, int silent
)
176 struct inferior
*inf
;
178 for (inf
= inferior_list
; inf
; inf
= inf
->next
)
185 for (thread_info
*tp
: inf
->threads ())
188 delete_thread_silent_noremove (tp
);
190 delete_thread_noremove (tp
);
193 inf
->thread_map
.clear ();
195 gdb::observers::inferior_exit
.notify (inf
);
198 inf
->fake_pid_p
= false;
201 if (inf
->vfork_parent
!= NULL
)
203 inf
->vfork_parent
->vfork_child
= NULL
;
204 inf
->vfork_parent
= NULL
;
206 if (inf
->vfork_child
!= NULL
)
208 inf
->vfork_child
->vfork_parent
= NULL
;
209 inf
->vfork_child
= NULL
;
212 inf
->pending_detach
= 0;
214 inf
->control
= inferior_control_state (NO_STOP_QUIETLY
);
216 /* Clear the register cache and the frame cache. */
217 registers_changed ();
218 reinit_frame_cache ();
222 exit_inferior (inferior
*inf
)
224 exit_inferior_1 (inf
, 0);
228 exit_inferior_silent (inferior
*inf
)
230 exit_inferior_1 (inf
, 1);
233 /* See inferior.h. */
236 detach_inferior (inferior
*inf
)
238 /* Save the pid, since exit_inferior_1 will reset it. */
241 exit_inferior_1 (inf
, 0);
243 if (print_inferior_events
)
244 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
246 target_pid_to_str (ptid_t (pid
)).c_str ());
250 inferior_appeared (struct inferior
*inf
, int pid
)
252 /* If this is the first inferior with threads, reset the global
254 delete_exited_threads ();
255 if (!any_thread_p ())
259 inf
->has_exit_code
= 0;
262 gdb::observers::inferior_appeared
.notify (inf
);
266 find_inferior_id (int num
)
268 for (inferior
*inf
: all_inferiors ())
276 find_inferior_pid (process_stratum_target
*targ
, int pid
)
278 /* Looking for inferior pid == 0 is always wrong, and indicative of
279 a bug somewhere else. There may be more than one with pid == 0,
281 gdb_assert (pid
!= 0);
283 for (inferior
*inf
: all_inferiors (targ
))
293 find_inferior_ptid (process_stratum_target
*targ
, ptid_t ptid
)
295 return find_inferior_pid (targ
, ptid
.pid ());
298 /* See inferior.h. */
301 find_inferior_for_program_space (struct program_space
*pspace
)
303 struct inferior
*cur_inf
= current_inferior ();
305 if (cur_inf
->pspace
== pspace
)
308 for (inferior
*inf
: all_inferiors ())
309 if (inf
->pspace
== pspace
)
316 iterate_over_inferiors (int (*callback
) (struct inferior
*, void *),
319 for (inferior
*inf
: all_inferiors_safe ())
320 if ((*callback
) (inf
, data
))
327 have_inferiors (void)
329 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
335 /* Return the number of live inferiors. We account for the case
336 where an inferior might have a non-zero pid but no threads, as
337 in the middle of a 'mourn' operation. */
340 number_of_live_inferiors (process_stratum_target
*proc_target
)
344 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
345 if (inf
->has_execution ())
346 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
348 /* Found a live thread in this inferior, go to the next
357 /* Return true if there is at least one live inferior. */
360 have_live_inferiors (void)
362 return number_of_live_inferiors (NULL
) > 0;
365 /* Prune away any unused inferiors, and then prune away no longer used
369 prune_inferiors (void)
376 if (!ss
->deletable ()
384 inferior
*ss_next
= ss
->next
;
385 delete_inferior (ss
);
390 /* Simply returns the count of inferiors. */
393 number_of_inferiors (void)
395 auto rng
= all_inferiors ();
396 return std::distance (rng
.begin (), rng
.end ());
399 /* Converts an inferior process id to a string. Like
400 target_pid_to_str, but special cases the null process. */
403 inferior_pid_to_str (int pid
)
406 return target_pid_to_str (ptid_t (pid
));
411 /* See inferior.h. */
414 print_selected_inferior (struct ui_out
*uiout
)
416 struct inferior
*inf
= current_inferior ();
417 const char *filename
= inf
->pspace
->pspace_exec_filename
;
419 if (filename
== NULL
)
420 filename
= _("<noexec>");
422 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
423 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
426 /* Helper for print_inferior. Returns the 'connection-id' string for
430 uiout_field_connection (process_stratum_target
*proc_target
)
432 if (proc_target
== NULL
)
436 else if (proc_target
->connection_string () != NULL
)
438 return string_printf ("%d (%s %s)",
439 proc_target
->connection_number
,
440 proc_target
->shortname (),
441 proc_target
->connection_string ());
445 return string_printf ("%d (%s)",
446 proc_target
->connection_number
,
447 proc_target
->shortname ());
451 /* Prints the list of inferiors and their details on UIOUT. This is a
452 version of 'info_inferior_command' suitable for use from MI.
454 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
455 inferiors that should be printed. Otherwise, all inferiors are
459 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
462 size_t connection_id_len
= 20;
464 /* Compute number of inferiors we will print. */
465 for (inferior
*inf
: all_inferiors ())
467 if (!number_is_in_list (requested_inferiors
, inf
->num
))
470 std::string conn
= uiout_field_connection (inf
->process_target ());
471 if (connection_id_len
< conn
.size ())
472 connection_id_len
= conn
.size ();
479 uiout
->message ("No inferiors.\n");
483 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
484 uiout
->table_header (1, ui_left
, "current", "");
485 uiout
->table_header (4, ui_left
, "number", "Num");
486 uiout
->table_header (17, ui_left
, "target-id", "Description");
487 uiout
->table_header (connection_id_len
, ui_left
,
488 "connection-id", "Connection");
489 uiout
->table_header (17, ui_left
, "exec", "Executable");
491 uiout
->table_body ();
493 /* Restore the current thread after the loop because we switch the
494 inferior in the loop. */
495 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
496 inferior
*current_inf
= current_inferior ();
497 for (inferior
*inf
: all_inferiors ())
499 if (!number_is_in_list (requested_inferiors
, inf
->num
))
502 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
504 if (inf
== current_inf
)
505 uiout
->field_string ("current", "*");
507 uiout
->field_skip ("current");
509 uiout
->field_signed ("number", inf
->num
);
511 /* Because target_pid_to_str uses current_top_target,
512 switch the inferior. */
513 switch_to_inferior_no_thread (inf
);
515 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
517 std::string conn
= uiout_field_connection (inf
->process_target ());
518 uiout
->field_string ("connection-id", conn
.c_str ());
520 if (inf
->pspace
->pspace_exec_filename
!= NULL
)
521 uiout
->field_string ("exec", inf
->pspace
->pspace_exec_filename
);
523 uiout
->field_skip ("exec");
525 /* Print extra info that isn't really fit to always present in
526 tabular form. Currently we print the vfork parent/child
527 relationships, if any. */
528 if (inf
->vfork_parent
)
530 uiout
->text (_("\n\tis vfork child of inferior "));
531 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
533 if (inf
->vfork_child
)
535 uiout
->text (_("\n\tis vfork parent of inferior "));
536 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
544 detach_inferior_command (const char *args
, int from_tty
)
547 error (_("Requires argument (inferior id(s) to detach)"));
549 number_or_range_parser
parser (args
);
550 while (!parser
.finished ())
552 int num
= parser
.get_number ();
554 inferior
*inf
= find_inferior_id (num
);
557 warning (_("Inferior ID %d not known."), num
);
563 warning (_("Inferior ID %d is not running."), num
);
567 thread_info
*tp
= any_thread_of_inferior (inf
);
570 warning (_("Inferior ID %d has no threads."), num
);
574 switch_to_thread (tp
);
576 detach_command (NULL
, from_tty
);
581 kill_inferior_command (const char *args
, int from_tty
)
584 error (_("Requires argument (inferior id(s) to kill)"));
586 number_or_range_parser
parser (args
);
587 while (!parser
.finished ())
589 int num
= parser
.get_number ();
591 inferior
*inf
= find_inferior_id (num
);
594 warning (_("Inferior ID %d not known."), num
);
600 warning (_("Inferior ID %d is not running."), num
);
604 thread_info
*tp
= any_thread_of_inferior (inf
);
607 warning (_("Inferior ID %d has no threads."), num
);
611 switch_to_thread (tp
);
616 bfd_cache_close_all ();
619 /* See inferior.h. */
622 switch_to_inferior_no_thread (inferior
*inf
)
624 set_current_inferior (inf
);
625 switch_to_no_thread ();
626 set_current_program_space (inf
->pspace
);
630 inferior_command (const char *args
, int from_tty
)
632 struct inferior
*inf
;
635 num
= parse_and_eval_long (args
);
637 inf
= find_inferior_id (num
);
639 error (_("Inferior ID %d not known."), num
);
643 if (inf
!= current_inferior ())
645 thread_info
*tp
= first_thread_of_inferior (inf
);
647 error (_("Inferior has no threads."));
649 switch_to_thread (tp
);
652 gdb::observers::user_selected_context_changed
.notify
653 (USER_SELECTED_INFERIOR
654 | USER_SELECTED_THREAD
655 | USER_SELECTED_FRAME
);
659 switch_to_inferior_no_thread (inf
);
661 gdb::observers::user_selected_context_changed
.notify
662 (USER_SELECTED_INFERIOR
);
666 /* Print information about currently known inferiors. */
669 info_inferiors_command (const char *args
, int from_tty
)
671 print_inferior (current_uiout
, args
);
674 /* remove-inferior ID */
677 remove_inferior_command (const char *args
, int from_tty
)
679 if (args
== NULL
|| *args
== '\0')
680 error (_("Requires an argument (inferior id(s) to remove)"));
682 number_or_range_parser
parser (args
);
683 while (!parser
.finished ())
685 int num
= parser
.get_number ();
686 struct inferior
*inf
= find_inferior_id (num
);
690 warning (_("Inferior ID %d not known."), num
);
694 if (!inf
->deletable ())
696 warning (_("Can not remove current inferior %d."), num
);
702 warning (_("Can not remove active inferior %d."), num
);
706 delete_inferior (inf
);
711 add_inferior_with_spaces (void)
713 struct address_space
*aspace
;
714 struct program_space
*pspace
;
715 struct inferior
*inf
;
716 struct gdbarch_info info
;
718 /* If all inferiors share an address space on this system, this
719 doesn't really return a new address space; otherwise, it
721 aspace
= maybe_new_address_space ();
722 pspace
= new program_space (aspace
);
723 inf
= add_inferior (0);
724 inf
->pspace
= pspace
;
725 inf
->aspace
= pspace
->aspace
;
727 /* Setup the inferior's initial arch, based on information obtained
728 from the global "set ..." options. */
729 gdbarch_info_init (&info
);
730 inf
->gdbarch
= gdbarch_find_by_info (info
);
731 /* The "set ..." options reject invalid settings, so we should
732 always have a valid arch by now. */
733 gdb_assert (inf
->gdbarch
!= NULL
);
738 /* Switch to inferior NEW_INF, a new inferior, and unless
739 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
743 switch_to_inferior_and_push_target (inferior
*new_inf
,
744 bool no_connection
, inferior
*org_inf
)
746 process_stratum_target
*proc_target
= org_inf
->process_target ();
748 /* Switch over temporarily, while reading executable and
750 switch_to_inferior_no_thread (new_inf
);
752 /* Reuse the target for new inferior. */
753 if (!no_connection
&& proc_target
!= NULL
)
755 push_target (proc_target
);
756 if (proc_target
->connection_string () != NULL
)
757 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
759 proc_target
->connection_number
,
760 proc_target
->shortname (),
761 proc_target
->connection_string ());
763 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
765 proc_target
->connection_number
,
766 proc_target
->shortname ());
769 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
772 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
775 add_inferior_command (const char *args
, int from_tty
)
778 gdb::unique_xmalloc_ptr
<char> exec
;
779 symfile_add_flags add_flags
= 0;
780 bool no_connection
= false;
783 add_flags
|= SYMFILE_VERBOSE
;
787 gdb_argv
built_argv (args
);
789 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
793 if (strcmp (*argv
, "-copies") == 0)
797 error (_("No argument to -copies"));
798 copies
= parse_and_eval_long (*argv
);
800 else if (strcmp (*argv
, "-no-connection") == 0)
801 no_connection
= true;
802 else if (strcmp (*argv
, "-exec") == 0)
806 error (_("No argument to -exec"));
807 exec
.reset (tilde_expand (*argv
));
811 error (_("Invalid argument"));
815 inferior
*orginf
= current_inferior ();
817 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
819 for (i
= 0; i
< copies
; ++i
)
821 inferior
*inf
= add_inferior_with_spaces ();
823 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
827 exec_file_attach (exec
.get (), from_tty
);
828 symbol_file_add_main (exec
.get (), add_flags
);
833 /* clone-inferior [-copies N] [ID] [-no-connection] */
836 clone_inferior_command (const char *args
, int from_tty
)
839 struct inferior
*orginf
= NULL
;
840 bool no_connection
= false;
844 gdb_argv
built_argv (args
);
846 char **argv
= built_argv
.get ();
847 for (; *argv
!= NULL
; argv
++)
851 if (strcmp (*argv
, "-copies") == 0)
855 error (_("No argument to -copies"));
856 copies
= parse_and_eval_long (*argv
);
859 error (_("Invalid copies number"));
861 else if (strcmp (*argv
, "-no-connection") == 0)
862 no_connection
= true;
870 /* The first non-option (-) argument specified the
872 num
= parse_and_eval_long (*argv
);
873 orginf
= find_inferior_id (num
);
876 error (_("Inferior ID %d not known."), num
);
880 error (_("Invalid argument"));
885 /* If no inferior id was specified, then the user wants to clone the
888 orginf
= current_inferior ();
890 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
892 for (i
= 0; i
< copies
; ++i
)
894 struct address_space
*aspace
;
895 struct program_space
*pspace
;
896 struct inferior
*inf
;
898 /* If all inferiors share an address space on this system, this
899 doesn't really return a new address space; otherwise, it
901 aspace
= maybe_new_address_space ();
902 pspace
= new program_space (aspace
);
903 inf
= add_inferior (0);
904 inf
->pspace
= pspace
;
905 inf
->aspace
= pspace
->aspace
;
906 inf
->gdbarch
= orginf
->gdbarch
;
908 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
910 /* If the original inferior had a user specified target
911 description, make the clone use it too. */
912 if (target_desc_info_from_user_p (inf
->tdesc_info
))
913 copy_inferior_target_desc_info (inf
, orginf
);
915 clone_program_space (pspace
, orginf
->pspace
);
919 /* Print notices when new inferiors are created and die. */
921 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
922 struct cmd_list_element
*c
, const char *value
)
924 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
927 /* Return a new value for the selected inferior's id. */
929 static struct value
*
930 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
933 struct inferior
*inf
= current_inferior ();
935 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
938 /* Implementation of `$_inferior' variable. */
940 static const struct internalvar_funcs inferior_funcs
=
942 inferior_id_make_value
,
950 initialize_inferiors (void)
952 struct cmd_list_element
*c
= NULL
;
954 /* There's always one inferior. Note that this function isn't an
955 automatic _initialize_foo function, since other _initialize_foo
956 routines may need to install their per-inferior data keys. We
957 can only allocate an inferior when all those modules have done
958 that. Do this after initialize_progspace, due to the
959 current_program_space reference. */
960 current_inferior_
= add_inferior_silent (0);
961 current_inferior_
->incref ();
962 current_inferior_
->pspace
= current_program_space
;
963 current_inferior_
->aspace
= current_program_space
->aspace
;
964 /* The architecture will be initialized shortly, by
965 initialize_current_architecture. */
967 add_info ("inferiors", info_inferiors_command
,
968 _("Print a list of inferiors being managed.\n\
969 Usage: info inferiors [ID]...\n\
970 If IDs are specified, the list is limited to just those inferiors.\n\
971 By default all inferiors are displayed."));
973 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
974 Add a new inferior.\n\
975 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
976 N is the optional number of inferiors to add, default is 1.\n\
977 FILENAME is the file name of the executable to use\n\
979 By default, the new inferior inherits the current inferior's connection.\n\
980 If -no-connection is specified, the new inferior begins with\n\
981 no target connection yet."));
982 set_cmd_completer (c
, filename_completer
);
984 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
985 Remove inferior ID (or list of IDs).\n\
986 Usage: remove-inferiors ID..."));
988 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
989 Clone inferior ID.\n\
990 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
991 Add N copies of inferior ID. The new inferiors have the same\n\
992 executable loaded as the copied inferior. If -copies is not specified,\n\
993 adds 1 copy. If ID is not specified, it is the current inferior\n\
995 By default, the new inferiors inherit the copied inferior's connection.\n\
996 If -no-connection is specified, the new inferiors begin with\n\
997 no target connection yet."));
999 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
1000 Detach from inferior ID (or list of IDS).\n\
1001 Usage; detach inferiors ID..."),
1004 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
1005 Kill inferior ID (or list of IDs).\n\
1006 Usage: kill inferiors ID..."),
1009 add_cmd ("inferior", class_run
, inferior_command
, _("\
1010 Use this command to switch between inferiors.\n\
1011 Usage: inferior ID\n\
1012 The new inferior ID must be currently known."),
1015 add_setshow_boolean_cmd ("inferior-events", no_class
,
1016 &print_inferior_events
, _("\
1017 Set printing of inferior events (such as inferior start and exit)."), _("\
1018 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1020 show_print_inferior_events
,
1021 &setprintlist
, &showprintlist
);
1023 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);