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 target_desc_info_free (inf
->tdesc_info
);
85 inferior::inferior (int pid_
)
86 : num (++highest_inferior_num
),
88 environment (gdb_environ::from_host_environ ()),
91 inferior_alloc_data (this);
93 m_target_stack
.push (get_dummy_target ());
97 inferior::set_tty (const char *terminal_name
)
99 if (terminal_name
!= nullptr && *terminal_name
!= '\0')
100 m_terminal
= make_unique_xstrdup (terminal_name
);
108 return m_terminal
.get ();
112 add_inferior_silent (int pid
)
114 inferior
*inf
= new inferior (pid
);
116 if (inferior_list
== NULL
)
122 for (last
= inferior_list
; last
->next
!= NULL
; last
= last
->next
)
127 gdb::observers::inferior_added
.notify (inf
);
130 inferior_appeared (inf
, pid
);
136 add_inferior (int pid
)
138 struct inferior
*inf
= add_inferior_silent (pid
);
140 if (print_inferior_events
)
143 printf_unfiltered (_("[New inferior %d (%s)]\n"),
145 target_pid_to_str (ptid_t (pid
)).c_str ());
147 printf_unfiltered (_("[New inferior %d]\n"), inf
->num
);
154 delete_inferior (struct inferior
*todel
)
156 struct inferior
*inf
, *infprev
;
160 for (inf
= inferior_list
; inf
; infprev
= inf
, inf
= inf
->next
)
167 for (thread_info
*tp
: inf
->threads_safe ())
168 delete_thread_silent (tp
);
171 infprev
->next
= inf
->next
;
173 inferior_list
= inf
->next
;
175 gdb::observers::inferior_removed
.notify (inf
);
177 /* If this program space is rendered useless, remove it. */
178 if (program_space_empty_p (inf
->pspace
))
184 /* If SILENT then be quiet -- don't announce a inferior exit, or the
185 exit of its threads. */
188 exit_inferior_1 (struct inferior
*inftoex
, int silent
)
190 struct inferior
*inf
;
192 for (inf
= inferior_list
; inf
; inf
= inf
->next
)
199 for (thread_info
*tp
: inf
->threads_safe ())
202 delete_thread_silent (tp
);
207 inf
->thread_map
.clear ();
209 gdb::observers::inferior_exit
.notify (inf
);
212 inf
->fake_pid_p
= false;
215 if (inf
->vfork_parent
!= NULL
)
217 inf
->vfork_parent
->vfork_child
= NULL
;
218 inf
->vfork_parent
= NULL
;
220 if (inf
->vfork_child
!= NULL
)
222 inf
->vfork_child
->vfork_parent
= NULL
;
223 inf
->vfork_child
= NULL
;
226 inf
->pending_detach
= 0;
228 inf
->control
= inferior_control_state (NO_STOP_QUIETLY
);
230 /* Clear the register cache and the frame cache. */
231 registers_changed ();
232 reinit_frame_cache ();
236 exit_inferior (inferior
*inf
)
238 exit_inferior_1 (inf
, 0);
242 exit_inferior_silent (inferior
*inf
)
244 exit_inferior_1 (inf
, 1);
247 /* See inferior.h. */
250 detach_inferior (inferior
*inf
)
252 /* Save the pid, since exit_inferior_1 will reset it. */
255 exit_inferior_1 (inf
, 0);
257 if (print_inferior_events
)
258 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
260 target_pid_to_str (ptid_t (pid
)).c_str ());
264 inferior_appeared (struct inferior
*inf
, int pid
)
266 /* If this is the first inferior with threads, reset the global
268 delete_exited_threads ();
269 if (!any_thread_p ())
273 inf
->has_exit_code
= 0;
276 gdb::observers::inferior_appeared
.notify (inf
);
280 find_inferior_id (int num
)
282 for (inferior
*inf
: all_inferiors ())
290 find_inferior_pid (process_stratum_target
*targ
, int pid
)
292 /* Looking for inferior pid == 0 is always wrong, and indicative of
293 a bug somewhere else. There may be more than one with pid == 0,
295 gdb_assert (pid
!= 0);
297 for (inferior
*inf
: all_inferiors (targ
))
307 find_inferior_ptid (process_stratum_target
*targ
, ptid_t ptid
)
309 return find_inferior_pid (targ
, ptid
.pid ());
312 /* See inferior.h. */
315 find_inferior_for_program_space (struct program_space
*pspace
)
317 struct inferior
*cur_inf
= current_inferior ();
319 if (cur_inf
->pspace
== pspace
)
322 for (inferior
*inf
: all_inferiors ())
323 if (inf
->pspace
== pspace
)
330 have_inferiors (void)
332 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
338 /* Return the number of live inferiors. We account for the case
339 where an inferior might have a non-zero pid but no threads, as
340 in the middle of a 'mourn' operation. */
343 number_of_live_inferiors (process_stratum_target
*proc_target
)
347 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
348 if (inf
->has_execution ())
349 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
351 /* Found a live thread in this inferior, go to the next
360 /* Return true if there is at least one live inferior. */
363 have_live_inferiors (void)
365 return number_of_live_inferiors (NULL
) > 0;
368 /* Prune away any unused inferiors, and then prune away no longer used
372 prune_inferiors (void)
379 if (!ss
->deletable ()
387 inferior
*ss_next
= ss
->next
;
388 delete_inferior (ss
);
393 /* Simply returns the count of inferiors. */
396 number_of_inferiors (void)
398 auto rng
= all_inferiors ();
399 return std::distance (rng
.begin (), rng
.end ());
402 /* Converts an inferior process id to a string. Like
403 target_pid_to_str, but special cases the null process. */
406 inferior_pid_to_str (int pid
)
409 return target_pid_to_str (ptid_t (pid
));
414 /* See inferior.h. */
417 print_selected_inferior (struct ui_out
*uiout
)
419 struct inferior
*inf
= current_inferior ();
420 const char *filename
= inf
->pspace
->pspace_exec_filename
;
422 if (filename
== NULL
)
423 filename
= _("<noexec>");
425 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
426 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
429 /* Helper for print_inferior. Returns the 'connection-id' string for
433 uiout_field_connection (process_stratum_target
*proc_target
)
435 if (proc_target
== NULL
)
439 else if (proc_target
->connection_string () != NULL
)
441 return string_printf ("%d (%s %s)",
442 proc_target
->connection_number
,
443 proc_target
->shortname (),
444 proc_target
->connection_string ());
448 return string_printf ("%d (%s)",
449 proc_target
->connection_number
,
450 proc_target
->shortname ());
454 /* Prints the list of inferiors and their details on UIOUT. This is a
455 version of 'info_inferior_command' suitable for use from MI.
457 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
458 inferiors that should be printed. Otherwise, all inferiors are
462 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
465 size_t connection_id_len
= 20;
467 /* Compute number of inferiors we will print. */
468 for (inferior
*inf
: all_inferiors ())
470 if (!number_is_in_list (requested_inferiors
, inf
->num
))
473 std::string conn
= uiout_field_connection (inf
->process_target ());
474 if (connection_id_len
< conn
.size ())
475 connection_id_len
= conn
.size ();
482 uiout
->message ("No inferiors.\n");
486 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
487 uiout
->table_header (1, ui_left
, "current", "");
488 uiout
->table_header (4, ui_left
, "number", "Num");
489 uiout
->table_header (17, ui_left
, "target-id", "Description");
490 uiout
->table_header (connection_id_len
, ui_left
,
491 "connection-id", "Connection");
492 uiout
->table_header (17, ui_left
, "exec", "Executable");
494 uiout
->table_body ();
496 /* Restore the current thread after the loop because we switch the
497 inferior in the loop. */
498 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
499 inferior
*current_inf
= current_inferior ();
500 for (inferior
*inf
: all_inferiors ())
502 if (!number_is_in_list (requested_inferiors
, inf
->num
))
505 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
507 if (inf
== current_inf
)
508 uiout
->field_string ("current", "*");
510 uiout
->field_skip ("current");
512 uiout
->field_signed ("number", inf
->num
);
514 /* Because target_pid_to_str uses current_top_target,
515 switch the inferior. */
516 switch_to_inferior_no_thread (inf
);
518 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
520 std::string conn
= uiout_field_connection (inf
->process_target ());
521 uiout
->field_string ("connection-id", conn
.c_str ());
523 if (inf
->pspace
->pspace_exec_filename
!= NULL
)
524 uiout
->field_string ("exec", inf
->pspace
->pspace_exec_filename
);
526 uiout
->field_skip ("exec");
528 /* Print extra info that isn't really fit to always present in
529 tabular form. Currently we print the vfork parent/child
530 relationships, if any. */
531 if (inf
->vfork_parent
)
533 uiout
->text (_("\n\tis vfork child of inferior "));
534 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
536 if (inf
->vfork_child
)
538 uiout
->text (_("\n\tis vfork parent of inferior "));
539 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
547 detach_inferior_command (const char *args
, int from_tty
)
550 error (_("Requires argument (inferior id(s) to detach)"));
552 number_or_range_parser
parser (args
);
553 while (!parser
.finished ())
555 int num
= parser
.get_number ();
557 inferior
*inf
= find_inferior_id (num
);
560 warning (_("Inferior ID %d not known."), num
);
566 warning (_("Inferior ID %d is not running."), num
);
570 thread_info
*tp
= any_thread_of_inferior (inf
);
573 warning (_("Inferior ID %d has no threads."), num
);
577 switch_to_thread (tp
);
579 detach_command (NULL
, from_tty
);
584 kill_inferior_command (const char *args
, int from_tty
)
587 error (_("Requires argument (inferior id(s) to kill)"));
589 number_or_range_parser
parser (args
);
590 while (!parser
.finished ())
592 int num
= parser
.get_number ();
594 inferior
*inf
= find_inferior_id (num
);
597 warning (_("Inferior ID %d not known."), num
);
603 warning (_("Inferior ID %d is not running."), num
);
607 thread_info
*tp
= any_thread_of_inferior (inf
);
610 warning (_("Inferior ID %d has no threads."), num
);
614 switch_to_thread (tp
);
619 bfd_cache_close_all ();
622 /* See inferior.h. */
625 switch_to_inferior_no_thread (inferior
*inf
)
627 set_current_inferior (inf
);
628 switch_to_no_thread ();
629 set_current_program_space (inf
->pspace
);
633 inferior_command (const char *args
, int from_tty
)
635 struct inferior
*inf
;
638 num
= parse_and_eval_long (args
);
640 inf
= find_inferior_id (num
);
642 error (_("Inferior ID %d not known."), num
);
646 if (inf
!= current_inferior ())
648 thread_info
*tp
= any_thread_of_inferior (inf
);
650 error (_("Inferior has no threads."));
652 switch_to_thread (tp
);
655 gdb::observers::user_selected_context_changed
.notify
656 (USER_SELECTED_INFERIOR
657 | USER_SELECTED_THREAD
658 | USER_SELECTED_FRAME
);
662 switch_to_inferior_no_thread (inf
);
664 gdb::observers::user_selected_context_changed
.notify
665 (USER_SELECTED_INFERIOR
);
669 /* Print information about currently known inferiors. */
672 info_inferiors_command (const char *args
, int from_tty
)
674 print_inferior (current_uiout
, args
);
677 /* remove-inferior ID */
680 remove_inferior_command (const char *args
, int from_tty
)
682 if (args
== NULL
|| *args
== '\0')
683 error (_("Requires an argument (inferior id(s) to remove)"));
685 number_or_range_parser
parser (args
);
686 while (!parser
.finished ())
688 int num
= parser
.get_number ();
689 struct inferior
*inf
= find_inferior_id (num
);
693 warning (_("Inferior ID %d not known."), num
);
697 if (!inf
->deletable ())
699 warning (_("Can not remove current inferior %d."), num
);
705 warning (_("Can not remove active inferior %d."), num
);
709 delete_inferior (inf
);
714 add_inferior_with_spaces (void)
716 struct address_space
*aspace
;
717 struct program_space
*pspace
;
718 struct inferior
*inf
;
719 struct gdbarch_info info
;
721 /* If all inferiors share an address space on this system, this
722 doesn't really return a new address space; otherwise, it
724 aspace
= maybe_new_address_space ();
725 pspace
= new program_space (aspace
);
726 inf
= add_inferior (0);
727 inf
->pspace
= pspace
;
728 inf
->aspace
= pspace
->aspace
;
730 /* Setup the inferior's initial arch, based on information obtained
731 from the global "set ..." options. */
732 gdbarch_info_init (&info
);
733 inf
->gdbarch
= gdbarch_find_by_info (info
);
734 /* The "set ..." options reject invalid settings, so we should
735 always have a valid arch by now. */
736 gdb_assert (inf
->gdbarch
!= NULL
);
741 /* Switch to inferior NEW_INF, a new inferior, and unless
742 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
746 switch_to_inferior_and_push_target (inferior
*new_inf
,
747 bool no_connection
, inferior
*org_inf
)
749 process_stratum_target
*proc_target
= org_inf
->process_target ();
751 /* Switch over temporarily, while reading executable and
753 switch_to_inferior_no_thread (new_inf
);
755 /* Reuse the target for new inferior. */
756 if (!no_connection
&& proc_target
!= NULL
)
758 push_target (proc_target
);
759 if (proc_target
->connection_string () != NULL
)
760 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
762 proc_target
->connection_number
,
763 proc_target
->shortname (),
764 proc_target
->connection_string ());
766 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
768 proc_target
->connection_number
,
769 proc_target
->shortname ());
772 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
775 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
778 add_inferior_command (const char *args
, int from_tty
)
781 gdb::unique_xmalloc_ptr
<char> exec
;
782 symfile_add_flags add_flags
= 0;
783 bool no_connection
= false;
786 add_flags
|= SYMFILE_VERBOSE
;
790 gdb_argv
built_argv (args
);
792 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
796 if (strcmp (*argv
, "-copies") == 0)
800 error (_("No argument to -copies"));
801 copies
= parse_and_eval_long (*argv
);
803 else if (strcmp (*argv
, "-no-connection") == 0)
804 no_connection
= true;
805 else if (strcmp (*argv
, "-exec") == 0)
809 error (_("No argument to -exec"));
810 exec
.reset (tilde_expand (*argv
));
814 error (_("Invalid argument"));
818 inferior
*orginf
= current_inferior ();
820 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
822 for (i
= 0; i
< copies
; ++i
)
824 inferior
*inf
= add_inferior_with_spaces ();
826 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
830 exec_file_attach (exec
.get (), from_tty
);
831 symbol_file_add_main (exec
.get (), add_flags
);
836 /* clone-inferior [-copies N] [ID] [-no-connection] */
839 clone_inferior_command (const char *args
, int from_tty
)
842 struct inferior
*orginf
= NULL
;
843 bool no_connection
= false;
847 gdb_argv
built_argv (args
);
849 char **argv
= built_argv
.get ();
850 for (; *argv
!= NULL
; argv
++)
854 if (strcmp (*argv
, "-copies") == 0)
858 error (_("No argument to -copies"));
859 copies
= parse_and_eval_long (*argv
);
862 error (_("Invalid copies number"));
864 else if (strcmp (*argv
, "-no-connection") == 0)
865 no_connection
= true;
873 /* The first non-option (-) argument specified the
875 num
= parse_and_eval_long (*argv
);
876 orginf
= find_inferior_id (num
);
879 error (_("Inferior ID %d not known."), num
);
883 error (_("Invalid argument"));
888 /* If no inferior id was specified, then the user wants to clone the
891 orginf
= current_inferior ();
893 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
895 for (i
= 0; i
< copies
; ++i
)
897 struct address_space
*aspace
;
898 struct program_space
*pspace
;
899 struct inferior
*inf
;
901 /* If all inferiors share an address space on this system, this
902 doesn't really return a new address space; otherwise, it
904 aspace
= maybe_new_address_space ();
905 pspace
= new program_space (aspace
);
906 inf
= add_inferior (0);
907 inf
->pspace
= pspace
;
908 inf
->aspace
= pspace
->aspace
;
909 inf
->gdbarch
= orginf
->gdbarch
;
911 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
913 /* If the original inferior had a user specified target
914 description, make the clone use it too. */
915 if (target_desc_info_from_user_p (inf
->tdesc_info
))
916 copy_inferior_target_desc_info (inf
, orginf
);
918 clone_program_space (pspace
, orginf
->pspace
);
922 /* Print notices when new inferiors are created and die. */
924 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
925 struct cmd_list_element
*c
, const char *value
)
927 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
930 /* Return a new value for the selected inferior's id. */
932 static struct value
*
933 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
936 struct inferior
*inf
= current_inferior ();
938 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
941 /* Implementation of `$_inferior' variable. */
943 static const struct internalvar_funcs inferior_funcs
=
945 inferior_id_make_value
,
953 initialize_inferiors (void)
955 struct cmd_list_element
*c
= NULL
;
957 /* There's always one inferior. Note that this function isn't an
958 automatic _initialize_foo function, since other _initialize_foo
959 routines may need to install their per-inferior data keys. We
960 can only allocate an inferior when all those modules have done
961 that. Do this after initialize_progspace, due to the
962 current_program_space reference. */
963 current_inferior_
= add_inferior_silent (0);
964 current_inferior_
->incref ();
965 current_inferior_
->pspace
= current_program_space
;
966 current_inferior_
->aspace
= current_program_space
->aspace
;
967 /* The architecture will be initialized shortly, by
968 initialize_current_architecture. */
970 add_info ("inferiors", info_inferiors_command
,
971 _("Print a list of inferiors being managed.\n\
972 Usage: info inferiors [ID]...\n\
973 If IDs are specified, the list is limited to just those inferiors.\n\
974 By default all inferiors are displayed."));
976 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
977 Add a new inferior.\n\
978 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
979 N is the optional number of inferiors to add, default is 1.\n\
980 FILENAME is the file name of the executable to use\n\
982 By default, the new inferior inherits the current inferior's connection.\n\
983 If -no-connection is specified, the new inferior begins with\n\
984 no target connection yet."));
985 set_cmd_completer (c
, filename_completer
);
987 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
988 Remove inferior ID (or list of IDs).\n\
989 Usage: remove-inferiors ID..."));
991 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
992 Clone inferior ID.\n\
993 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
994 Add N copies of inferior ID. The new inferiors have the same\n\
995 executable loaded as the copied inferior. If -copies is not specified,\n\
996 adds 1 copy. If ID is not specified, it is the current inferior\n\
998 By default, the new inferiors inherit the copied inferior's connection.\n\
999 If -no-connection is specified, the new inferiors begin with\n\
1000 no target connection yet."));
1002 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
1003 Detach from inferior ID (or list of IDS).\n\
1004 Usage; detach inferiors ID..."),
1007 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
1008 Kill inferior ID (or list of IDs).\n\
1009 Usage: kill inferiors ID..."),
1012 add_cmd ("inferior", class_run
, inferior_command
, _("\
1013 Use this command to switch between inferiors.\n\
1014 Usage: inferior ID\n\
1015 The new inferior ID must be currently known."),
1018 add_setshow_boolean_cmd ("inferior-events", no_class
,
1019 &print_inferior_events
, _("\
1020 Set printing of inferior events (such as inferior start and exit)."), _("\
1021 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1023 show_print_inferior_events
,
1024 &setprintlist
, &showprintlist
);
1026 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);