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_safe ())
154 delete_thread_silent (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
))
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_safe ())
188 delete_thread_silent (tp
);
193 gdb::observers::inferior_exit
.notify (inf
);
196 inf
->fake_pid_p
= false;
199 if (inf
->vfork_parent
!= NULL
)
201 inf
->vfork_parent
->vfork_child
= NULL
;
202 inf
->vfork_parent
= NULL
;
204 if (inf
->vfork_child
!= NULL
)
206 inf
->vfork_child
->vfork_parent
= NULL
;
207 inf
->vfork_child
= NULL
;
210 inf
->pending_detach
= 0;
212 inf
->control
= inferior_control_state (NO_STOP_QUIETLY
);
214 /* Clear the register cache and the frame cache. */
215 registers_changed ();
216 reinit_frame_cache ();
220 exit_inferior (inferior
*inf
)
222 exit_inferior_1 (inf
, 0);
226 exit_inferior_silent (inferior
*inf
)
228 exit_inferior_1 (inf
, 1);
231 /* See inferior.h. */
234 detach_inferior (inferior
*inf
)
236 /* Save the pid, since exit_inferior_1 will reset it. */
239 exit_inferior_1 (inf
, 0);
241 if (print_inferior_events
)
242 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
244 target_pid_to_str (ptid_t (pid
)).c_str ());
248 inferior_appeared (struct inferior
*inf
, int pid
)
250 /* If this is the first inferior with threads, reset the global
252 delete_exited_threads ();
253 if (!any_thread_p ())
257 inf
->has_exit_code
= 0;
260 gdb::observers::inferior_appeared
.notify (inf
);
264 find_inferior_id (int num
)
266 for (inferior
*inf
: all_inferiors ())
274 find_inferior_pid (process_stratum_target
*targ
, int pid
)
276 /* Looking for inferior pid == 0 is always wrong, and indicative of
277 a bug somewhere else. There may be more than one with pid == 0,
279 gdb_assert (pid
!= 0);
281 for (inferior
*inf
: all_inferiors (targ
))
291 find_inferior_ptid (process_stratum_target
*targ
, ptid_t ptid
)
293 return find_inferior_pid (targ
, ptid
.pid ());
296 /* See inferior.h. */
299 find_inferior_for_program_space (struct program_space
*pspace
)
301 struct inferior
*cur_inf
= current_inferior ();
303 if (cur_inf
->pspace
== pspace
)
306 for (inferior
*inf
: all_inferiors ())
307 if (inf
->pspace
== pspace
)
314 have_inferiors (void)
316 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
322 /* Return the number of live inferiors. We account for the case
323 where an inferior might have a non-zero pid but no threads, as
324 in the middle of a 'mourn' operation. */
327 number_of_live_inferiors (process_stratum_target
*proc_target
)
331 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
332 if (inf
->has_execution ())
333 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
335 /* Found a live thread in this inferior, go to the next
344 /* Return true if there is at least one live inferior. */
347 have_live_inferiors (void)
349 return number_of_live_inferiors (NULL
) > 0;
352 /* Prune away any unused inferiors, and then prune away no longer used
356 prune_inferiors (void)
363 if (!ss
->deletable ()
371 inferior
*ss_next
= ss
->next
;
372 delete_inferior (ss
);
377 /* Simply returns the count of inferiors. */
380 number_of_inferiors (void)
382 auto rng
= all_inferiors ();
383 return std::distance (rng
.begin (), rng
.end ());
386 /* Converts an inferior process id to a string. Like
387 target_pid_to_str, but special cases the null process. */
390 inferior_pid_to_str (int pid
)
393 return target_pid_to_str (ptid_t (pid
));
398 /* See inferior.h. */
401 print_selected_inferior (struct ui_out
*uiout
)
403 struct inferior
*inf
= current_inferior ();
404 const char *filename
= inf
->pspace
->pspace_exec_filename
;
406 if (filename
== NULL
)
407 filename
= _("<noexec>");
409 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
410 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
413 /* Helper for print_inferior. Returns the 'connection-id' string for
417 uiout_field_connection (process_stratum_target
*proc_target
)
419 if (proc_target
== NULL
)
423 else if (proc_target
->connection_string () != NULL
)
425 return string_printf ("%d (%s %s)",
426 proc_target
->connection_number
,
427 proc_target
->shortname (),
428 proc_target
->connection_string ());
432 return string_printf ("%d (%s)",
433 proc_target
->connection_number
,
434 proc_target
->shortname ());
438 /* Prints the list of inferiors and their details on UIOUT. This is a
439 version of 'info_inferior_command' suitable for use from MI.
441 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
442 inferiors that should be printed. Otherwise, all inferiors are
446 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
449 size_t connection_id_len
= 20;
451 /* Compute number of inferiors we will print. */
452 for (inferior
*inf
: all_inferiors ())
454 if (!number_is_in_list (requested_inferiors
, inf
->num
))
457 std::string conn
= uiout_field_connection (inf
->process_target ());
458 if (connection_id_len
< conn
.size ())
459 connection_id_len
= conn
.size ();
466 uiout
->message ("No inferiors.\n");
470 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
471 uiout
->table_header (1, ui_left
, "current", "");
472 uiout
->table_header (4, ui_left
, "number", "Num");
473 uiout
->table_header (17, ui_left
, "target-id", "Description");
474 uiout
->table_header (connection_id_len
, ui_left
,
475 "connection-id", "Connection");
476 uiout
->table_header (17, ui_left
, "exec", "Executable");
478 uiout
->table_body ();
480 /* Restore the current thread after the loop because we switch the
481 inferior in the loop. */
482 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
483 inferior
*current_inf
= current_inferior ();
484 for (inferior
*inf
: all_inferiors ())
486 if (!number_is_in_list (requested_inferiors
, inf
->num
))
489 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
491 if (inf
== current_inf
)
492 uiout
->field_string ("current", "*");
494 uiout
->field_skip ("current");
496 uiout
->field_signed ("number", inf
->num
);
498 /* Because target_pid_to_str uses current_top_target,
499 switch the inferior. */
500 switch_to_inferior_no_thread (inf
);
502 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
504 std::string conn
= uiout_field_connection (inf
->process_target ());
505 uiout
->field_string ("connection-id", conn
.c_str ());
507 if (inf
->pspace
->pspace_exec_filename
!= NULL
)
508 uiout
->field_string ("exec", inf
->pspace
->pspace_exec_filename
);
510 uiout
->field_skip ("exec");
512 /* Print extra info that isn't really fit to always present in
513 tabular form. Currently we print the vfork parent/child
514 relationships, if any. */
515 if (inf
->vfork_parent
)
517 uiout
->text (_("\n\tis vfork child of inferior "));
518 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
520 if (inf
->vfork_child
)
522 uiout
->text (_("\n\tis vfork parent of inferior "));
523 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
531 detach_inferior_command (const char *args
, int from_tty
)
534 error (_("Requires argument (inferior id(s) to detach)"));
536 number_or_range_parser
parser (args
);
537 while (!parser
.finished ())
539 int num
= parser
.get_number ();
541 inferior
*inf
= find_inferior_id (num
);
544 warning (_("Inferior ID %d not known."), num
);
550 warning (_("Inferior ID %d is not running."), num
);
554 thread_info
*tp
= any_thread_of_inferior (inf
);
557 warning (_("Inferior ID %d has no threads."), num
);
561 switch_to_thread (tp
);
563 detach_command (NULL
, from_tty
);
568 kill_inferior_command (const char *args
, int from_tty
)
571 error (_("Requires argument (inferior id(s) to kill)"));
573 number_or_range_parser
parser (args
);
574 while (!parser
.finished ())
576 int num
= parser
.get_number ();
578 inferior
*inf
= find_inferior_id (num
);
581 warning (_("Inferior ID %d not known."), num
);
587 warning (_("Inferior ID %d is not running."), num
);
591 thread_info
*tp
= any_thread_of_inferior (inf
);
594 warning (_("Inferior ID %d has no threads."), num
);
598 switch_to_thread (tp
);
603 bfd_cache_close_all ();
606 /* See inferior.h. */
609 switch_to_inferior_no_thread (inferior
*inf
)
611 set_current_inferior (inf
);
612 switch_to_no_thread ();
613 set_current_program_space (inf
->pspace
);
617 inferior_command (const char *args
, int from_tty
)
619 struct inferior
*inf
;
622 num
= parse_and_eval_long (args
);
624 inf
= find_inferior_id (num
);
626 error (_("Inferior ID %d not known."), num
);
630 if (inf
!= current_inferior ())
632 thread_info
*tp
= any_thread_of_inferior (inf
);
634 error (_("Inferior has no threads."));
636 switch_to_thread (tp
);
639 gdb::observers::user_selected_context_changed
.notify
640 (USER_SELECTED_INFERIOR
641 | USER_SELECTED_THREAD
642 | USER_SELECTED_FRAME
);
646 switch_to_inferior_no_thread (inf
);
648 gdb::observers::user_selected_context_changed
.notify
649 (USER_SELECTED_INFERIOR
);
653 /* Print information about currently known inferiors. */
656 info_inferiors_command (const char *args
, int from_tty
)
658 print_inferior (current_uiout
, args
);
661 /* remove-inferior ID */
664 remove_inferior_command (const char *args
, int from_tty
)
666 if (args
== NULL
|| *args
== '\0')
667 error (_("Requires an argument (inferior id(s) to remove)"));
669 number_or_range_parser
parser (args
);
670 while (!parser
.finished ())
672 int num
= parser
.get_number ();
673 struct inferior
*inf
= find_inferior_id (num
);
677 warning (_("Inferior ID %d not known."), num
);
681 if (!inf
->deletable ())
683 warning (_("Can not remove current inferior %d."), num
);
689 warning (_("Can not remove active inferior %d."), num
);
693 delete_inferior (inf
);
698 add_inferior_with_spaces (void)
700 struct address_space
*aspace
;
701 struct program_space
*pspace
;
702 struct inferior
*inf
;
703 struct gdbarch_info info
;
705 /* If all inferiors share an address space on this system, this
706 doesn't really return a new address space; otherwise, it
708 aspace
= maybe_new_address_space ();
709 pspace
= new program_space (aspace
);
710 inf
= add_inferior (0);
711 inf
->pspace
= pspace
;
712 inf
->aspace
= pspace
->aspace
;
714 /* Setup the inferior's initial arch, based on information obtained
715 from the global "set ..." options. */
716 gdbarch_info_init (&info
);
717 inf
->gdbarch
= gdbarch_find_by_info (info
);
718 /* The "set ..." options reject invalid settings, so we should
719 always have a valid arch by now. */
720 gdb_assert (inf
->gdbarch
!= NULL
);
725 /* Switch to inferior NEW_INF, a new inferior, and unless
726 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
730 switch_to_inferior_and_push_target (inferior
*new_inf
,
731 bool no_connection
, inferior
*org_inf
)
733 process_stratum_target
*proc_target
= org_inf
->process_target ();
735 /* Switch over temporarily, while reading executable and
737 switch_to_inferior_no_thread (new_inf
);
739 /* Reuse the target for new inferior. */
740 if (!no_connection
&& proc_target
!= NULL
)
742 push_target (proc_target
);
743 if (proc_target
->connection_string () != NULL
)
744 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
746 proc_target
->connection_number
,
747 proc_target
->shortname (),
748 proc_target
->connection_string ());
750 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
752 proc_target
->connection_number
,
753 proc_target
->shortname ());
756 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
759 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
762 add_inferior_command (const char *args
, int from_tty
)
765 gdb::unique_xmalloc_ptr
<char> exec
;
766 symfile_add_flags add_flags
= 0;
767 bool no_connection
= false;
770 add_flags
|= SYMFILE_VERBOSE
;
774 gdb_argv
built_argv (args
);
776 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
780 if (strcmp (*argv
, "-copies") == 0)
784 error (_("No argument to -copies"));
785 copies
= parse_and_eval_long (*argv
);
787 else if (strcmp (*argv
, "-no-connection") == 0)
788 no_connection
= true;
789 else if (strcmp (*argv
, "-exec") == 0)
793 error (_("No argument to -exec"));
794 exec
.reset (tilde_expand (*argv
));
798 error (_("Invalid argument"));
802 inferior
*orginf
= current_inferior ();
804 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
806 for (i
= 0; i
< copies
; ++i
)
808 inferior
*inf
= add_inferior_with_spaces ();
810 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
814 exec_file_attach (exec
.get (), from_tty
);
815 symbol_file_add_main (exec
.get (), add_flags
);
820 /* clone-inferior [-copies N] [ID] [-no-connection] */
823 clone_inferior_command (const char *args
, int from_tty
)
826 struct inferior
*orginf
= NULL
;
827 bool no_connection
= false;
831 gdb_argv
built_argv (args
);
833 char **argv
= built_argv
.get ();
834 for (; *argv
!= NULL
; argv
++)
838 if (strcmp (*argv
, "-copies") == 0)
842 error (_("No argument to -copies"));
843 copies
= parse_and_eval_long (*argv
);
846 error (_("Invalid copies number"));
848 else if (strcmp (*argv
, "-no-connection") == 0)
849 no_connection
= true;
857 /* The first non-option (-) argument specified the
859 num
= parse_and_eval_long (*argv
);
860 orginf
= find_inferior_id (num
);
863 error (_("Inferior ID %d not known."), num
);
867 error (_("Invalid argument"));
872 /* If no inferior id was specified, then the user wants to clone the
875 orginf
= current_inferior ();
877 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
879 for (i
= 0; i
< copies
; ++i
)
881 struct address_space
*aspace
;
882 struct program_space
*pspace
;
883 struct inferior
*inf
;
885 /* If all inferiors share an address space on this system, this
886 doesn't really return a new address space; otherwise, it
888 aspace
= maybe_new_address_space ();
889 pspace
= new program_space (aspace
);
890 inf
= add_inferior (0);
891 inf
->pspace
= pspace
;
892 inf
->aspace
= pspace
->aspace
;
893 inf
->gdbarch
= orginf
->gdbarch
;
895 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
897 /* If the original inferior had a user specified target
898 description, make the clone use it too. */
899 if (target_desc_info_from_user_p (inf
->tdesc_info
))
900 copy_inferior_target_desc_info (inf
, orginf
);
902 clone_program_space (pspace
, orginf
->pspace
);
906 /* Print notices when new inferiors are created and die. */
908 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
909 struct cmd_list_element
*c
, const char *value
)
911 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
914 /* Return a new value for the selected inferior's id. */
916 static struct value
*
917 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
920 struct inferior
*inf
= current_inferior ();
922 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
925 /* Implementation of `$_inferior' variable. */
927 static const struct internalvar_funcs inferior_funcs
=
929 inferior_id_make_value
,
937 initialize_inferiors (void)
939 struct cmd_list_element
*c
= NULL
;
941 /* There's always one inferior. Note that this function isn't an
942 automatic _initialize_foo function, since other _initialize_foo
943 routines may need to install their per-inferior data keys. We
944 can only allocate an inferior when all those modules have done
945 that. Do this after initialize_progspace, due to the
946 current_program_space reference. */
947 current_inferior_
= add_inferior_silent (0);
948 current_inferior_
->incref ();
949 current_inferior_
->pspace
= current_program_space
;
950 current_inferior_
->aspace
= current_program_space
->aspace
;
951 /* The architecture will be initialized shortly, by
952 initialize_current_architecture. */
954 add_info ("inferiors", info_inferiors_command
,
955 _("Print a list of inferiors being managed.\n\
956 Usage: info inferiors [ID]...\n\
957 If IDs are specified, the list is limited to just those inferiors.\n\
958 By default all inferiors are displayed."));
960 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
961 Add a new inferior.\n\
962 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
963 N is the optional number of inferiors to add, default is 1.\n\
964 FILENAME is the file name of the executable to use\n\
966 By default, the new inferior inherits the current inferior's connection.\n\
967 If -no-connection is specified, the new inferior begins with\n\
968 no target connection yet."));
969 set_cmd_completer (c
, filename_completer
);
971 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
972 Remove inferior ID (or list of IDs).\n\
973 Usage: remove-inferiors ID..."));
975 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
976 Clone inferior ID.\n\
977 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
978 Add N copies of inferior ID. The new inferiors have the same\n\
979 executable loaded as the copied inferior. If -copies is not specified,\n\
980 adds 1 copy. If ID is not specified, it is the current inferior\n\
982 By default, the new inferiors inherit the copied inferior's connection.\n\
983 If -no-connection is specified, the new inferiors begin with\n\
984 no target connection yet."));
986 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
987 Detach from inferior ID (or list of IDS).\n\
988 Usage; detach inferiors ID..."),
991 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
992 Kill inferior ID (or list of IDs).\n\
993 Usage: kill inferiors ID..."),
996 add_cmd ("inferior", class_run
, inferior_command
, _("\
997 Use this command to switch between inferiors.\n\
998 Usage: inferior ID\n\
999 The new inferior ID must be currently known."),
1002 add_setshow_boolean_cmd ("inferior-events", no_class
,
1003 &print_inferior_events
, _("\
1004 Set printing of inferior events (such as inferior start and exit)."), _("\
1005 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1007 show_print_inferior_events
,
1008 &setprintlist
, &showprintlist
);
1010 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);