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
))
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_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 discard_all_inferiors (void)
266 for (inferior
*inf
: all_non_exited_inferiors ())
267 exit_inferior_silent (inf
);
271 find_inferior_id (int num
)
273 for (inferior
*inf
: all_inferiors ())
281 find_inferior_pid (process_stratum_target
*targ
, int pid
)
283 /* Looking for inferior pid == 0 is always wrong, and indicative of
284 a bug somewhere else. There may be more than one with pid == 0,
286 gdb_assert (pid
!= 0);
288 for (inferior
*inf
: all_inferiors (targ
))
298 find_inferior_ptid (process_stratum_target
*targ
, ptid_t ptid
)
300 return find_inferior_pid (targ
, ptid
.pid ());
303 /* See inferior.h. */
306 find_inferior_for_program_space (struct program_space
*pspace
)
308 struct inferior
*cur_inf
= current_inferior ();
310 if (cur_inf
->pspace
== pspace
)
313 for (inferior
*inf
: all_inferiors ())
314 if (inf
->pspace
== pspace
)
321 iterate_over_inferiors (int (*callback
) (struct inferior
*, void *),
324 for (inferior
*inf
: all_inferiors_safe ())
325 if ((*callback
) (inf
, data
))
332 have_inferiors (void)
334 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
340 /* Return the number of live inferiors. We account for the case
341 where an inferior might have a non-zero pid but no threads, as
342 in the middle of a 'mourn' operation. */
345 number_of_live_inferiors (process_stratum_target
*proc_target
)
349 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
350 if (inf
->has_execution ())
351 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
353 /* Found a live thread in this inferior, go to the next
362 /* Return true if there is at least one live inferior. */
365 have_live_inferiors (void)
367 return number_of_live_inferiors (NULL
) > 0;
370 /* Prune away any unused inferiors, and then prune away no longer used
374 prune_inferiors (void)
381 if (!ss
->deletable ()
389 inferior
*ss_next
= ss
->next
;
390 delete_inferior (ss
);
395 /* Simply returns the count of inferiors. */
398 number_of_inferiors (void)
400 auto rng
= all_inferiors ();
401 return std::distance (rng
.begin (), rng
.end ());
404 /* Converts an inferior process id to a string. Like
405 target_pid_to_str, but special cases the null process. */
408 inferior_pid_to_str (int pid
)
411 return target_pid_to_str (ptid_t (pid
));
416 /* See inferior.h. */
419 print_selected_inferior (struct ui_out
*uiout
)
421 struct inferior
*inf
= current_inferior ();
422 const char *filename
= inf
->pspace
->pspace_exec_filename
;
424 if (filename
== NULL
)
425 filename
= _("<noexec>");
427 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
428 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
431 /* Helper for print_inferior. Returns the 'connection-id' string for
435 uiout_field_connection (process_stratum_target
*proc_target
)
437 if (proc_target
== NULL
)
441 else if (proc_target
->connection_string () != NULL
)
443 return string_printf ("%d (%s %s)",
444 proc_target
->connection_number
,
445 proc_target
->shortname (),
446 proc_target
->connection_string ());
450 return string_printf ("%d (%s)",
451 proc_target
->connection_number
,
452 proc_target
->shortname ());
456 /* Prints the list of inferiors and their details on UIOUT. This is a
457 version of 'info_inferior_command' suitable for use from MI.
459 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
460 inferiors that should be printed. Otherwise, all inferiors are
464 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
467 size_t connection_id_len
= 20;
469 /* Compute number of inferiors we will print. */
470 for (inferior
*inf
: all_inferiors ())
472 if (!number_is_in_list (requested_inferiors
, inf
->num
))
475 std::string conn
= uiout_field_connection (inf
->process_target ());
476 if (connection_id_len
< conn
.size ())
477 connection_id_len
= conn
.size ();
484 uiout
->message ("No inferiors.\n");
488 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
489 uiout
->table_header (1, ui_left
, "current", "");
490 uiout
->table_header (4, ui_left
, "number", "Num");
491 uiout
->table_header (17, ui_left
, "target-id", "Description");
492 uiout
->table_header (connection_id_len
, ui_left
,
493 "connection-id", "Connection");
494 uiout
->table_header (17, ui_left
, "exec", "Executable");
496 uiout
->table_body ();
498 /* Restore the current thread after the loop because we switch the
499 inferior in the loop. */
500 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
501 inferior
*current_inf
= current_inferior ();
502 for (inferior
*inf
: all_inferiors ())
504 if (!number_is_in_list (requested_inferiors
, inf
->num
))
507 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
509 if (inf
== current_inf
)
510 uiout
->field_string ("current", "*");
512 uiout
->field_skip ("current");
514 uiout
->field_signed ("number", inf
->num
);
516 /* Because target_pid_to_str uses current_top_target,
517 switch the inferior. */
518 switch_to_inferior_no_thread (inf
);
520 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
522 std::string conn
= uiout_field_connection (inf
->process_target ());
523 uiout
->field_string ("connection-id", conn
.c_str ());
525 if (inf
->pspace
->pspace_exec_filename
!= NULL
)
526 uiout
->field_string ("exec", inf
->pspace
->pspace_exec_filename
);
528 uiout
->field_skip ("exec");
530 /* Print extra info that isn't really fit to always present in
531 tabular form. Currently we print the vfork parent/child
532 relationships, if any. */
533 if (inf
->vfork_parent
)
535 uiout
->text (_("\n\tis vfork child of inferior "));
536 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
538 if (inf
->vfork_child
)
540 uiout
->text (_("\n\tis vfork parent of inferior "));
541 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
549 detach_inferior_command (const char *args
, int from_tty
)
552 error (_("Requires argument (inferior id(s) to detach)"));
554 number_or_range_parser
parser (args
);
555 while (!parser
.finished ())
557 int num
= parser
.get_number ();
559 inferior
*inf
= find_inferior_id (num
);
562 warning (_("Inferior ID %d not known."), num
);
568 warning (_("Inferior ID %d is not running."), num
);
572 thread_info
*tp
= any_thread_of_inferior (inf
);
575 warning (_("Inferior ID %d has no threads."), num
);
579 switch_to_thread (tp
);
581 detach_command (NULL
, from_tty
);
586 kill_inferior_command (const char *args
, int from_tty
)
589 error (_("Requires argument (inferior id(s) to kill)"));
591 number_or_range_parser
parser (args
);
592 while (!parser
.finished ())
594 int num
= parser
.get_number ();
596 inferior
*inf
= find_inferior_id (num
);
599 warning (_("Inferior ID %d not known."), num
);
605 warning (_("Inferior ID %d is not running."), num
);
609 thread_info
*tp
= any_thread_of_inferior (inf
);
612 warning (_("Inferior ID %d has no threads."), num
);
616 switch_to_thread (tp
);
621 bfd_cache_close_all ();
624 /* See inferior.h. */
627 switch_to_inferior_no_thread (inferior
*inf
)
629 set_current_inferior (inf
);
630 switch_to_no_thread ();
631 set_current_program_space (inf
->pspace
);
635 inferior_command (const char *args
, int from_tty
)
637 struct inferior
*inf
;
640 num
= parse_and_eval_long (args
);
642 inf
= find_inferior_id (num
);
644 error (_("Inferior ID %d not known."), num
);
648 if (inf
!= current_inferior ())
650 thread_info
*tp
= any_thread_of_inferior (inf
);
652 error (_("Inferior has no threads."));
654 switch_to_thread (tp
);
657 gdb::observers::user_selected_context_changed
.notify
658 (USER_SELECTED_INFERIOR
659 | USER_SELECTED_THREAD
660 | USER_SELECTED_FRAME
);
664 switch_to_inferior_no_thread (inf
);
666 gdb::observers::user_selected_context_changed
.notify
667 (USER_SELECTED_INFERIOR
);
671 /* Print information about currently known inferiors. */
674 info_inferiors_command (const char *args
, int from_tty
)
676 print_inferior (current_uiout
, args
);
679 /* remove-inferior ID */
682 remove_inferior_command (const char *args
, int from_tty
)
684 if (args
== NULL
|| *args
== '\0')
685 error (_("Requires an argument (inferior id(s) to remove)"));
687 number_or_range_parser
parser (args
);
688 while (!parser
.finished ())
690 int num
= parser
.get_number ();
691 struct inferior
*inf
= find_inferior_id (num
);
695 warning (_("Inferior ID %d not known."), num
);
699 if (!inf
->deletable ())
701 warning (_("Can not remove current inferior %d."), num
);
707 warning (_("Can not remove active inferior %d."), num
);
711 delete_inferior (inf
);
716 add_inferior_with_spaces (void)
718 struct address_space
*aspace
;
719 struct program_space
*pspace
;
720 struct inferior
*inf
;
721 struct gdbarch_info info
;
723 /* If all inferiors share an address space on this system, this
724 doesn't really return a new address space; otherwise, it
726 aspace
= maybe_new_address_space ();
727 pspace
= new program_space (aspace
);
728 inf
= add_inferior (0);
729 inf
->pspace
= pspace
;
730 inf
->aspace
= pspace
->aspace
;
732 /* Setup the inferior's initial arch, based on information obtained
733 from the global "set ..." options. */
734 gdbarch_info_init (&info
);
735 inf
->gdbarch
= gdbarch_find_by_info (info
);
736 /* The "set ..." options reject invalid settings, so we should
737 always have a valid arch by now. */
738 gdb_assert (inf
->gdbarch
!= NULL
);
743 /* Switch to inferior NEW_INF, a new inferior, and unless
744 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
748 switch_to_inferior_and_push_target (inferior
*new_inf
,
749 bool no_connection
, inferior
*org_inf
)
751 process_stratum_target
*proc_target
= org_inf
->process_target ();
753 /* Switch over temporarily, while reading executable and
755 switch_to_inferior_no_thread (new_inf
);
757 /* Reuse the target for new inferior. */
758 if (!no_connection
&& proc_target
!= NULL
)
760 push_target (proc_target
);
761 if (proc_target
->connection_string () != NULL
)
762 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
764 proc_target
->connection_number
,
765 proc_target
->shortname (),
766 proc_target
->connection_string ());
768 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
770 proc_target
->connection_number
,
771 proc_target
->shortname ());
774 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
777 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
780 add_inferior_command (const char *args
, int from_tty
)
783 gdb::unique_xmalloc_ptr
<char> exec
;
784 symfile_add_flags add_flags
= 0;
785 bool no_connection
= false;
788 add_flags
|= SYMFILE_VERBOSE
;
792 gdb_argv
built_argv (args
);
794 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
798 if (strcmp (*argv
, "-copies") == 0)
802 error (_("No argument to -copies"));
803 copies
= parse_and_eval_long (*argv
);
805 else if (strcmp (*argv
, "-no-connection") == 0)
806 no_connection
= true;
807 else if (strcmp (*argv
, "-exec") == 0)
811 error (_("No argument to -exec"));
812 exec
.reset (tilde_expand (*argv
));
816 error (_("Invalid argument"));
820 inferior
*orginf
= current_inferior ();
822 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
824 for (i
= 0; i
< copies
; ++i
)
826 inferior
*inf
= add_inferior_with_spaces ();
828 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
832 exec_file_attach (exec
.get (), from_tty
);
833 symbol_file_add_main (exec
.get (), add_flags
);
838 /* clone-inferior [-copies N] [ID] [-no-connection] */
841 clone_inferior_command (const char *args
, int from_tty
)
844 struct inferior
*orginf
= NULL
;
845 bool no_connection
= false;
849 gdb_argv
built_argv (args
);
851 char **argv
= built_argv
.get ();
852 for (; *argv
!= NULL
; argv
++)
856 if (strcmp (*argv
, "-copies") == 0)
860 error (_("No argument to -copies"));
861 copies
= parse_and_eval_long (*argv
);
864 error (_("Invalid copies number"));
866 else if (strcmp (*argv
, "-no-connection") == 0)
867 no_connection
= true;
875 /* The first non-option (-) argument specified the
877 num
= parse_and_eval_long (*argv
);
878 orginf
= find_inferior_id (num
);
881 error (_("Inferior ID %d not known."), num
);
885 error (_("Invalid argument"));
890 /* If no inferior id was specified, then the user wants to clone the
893 orginf
= current_inferior ();
895 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
897 for (i
= 0; i
< copies
; ++i
)
899 struct address_space
*aspace
;
900 struct program_space
*pspace
;
901 struct inferior
*inf
;
903 /* If all inferiors share an address space on this system, this
904 doesn't really return a new address space; otherwise, it
906 aspace
= maybe_new_address_space ();
907 pspace
= new program_space (aspace
);
908 inf
= add_inferior (0);
909 inf
->pspace
= pspace
;
910 inf
->aspace
= pspace
->aspace
;
911 inf
->gdbarch
= orginf
->gdbarch
;
913 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
915 /* If the original inferior had a user specified target
916 description, make the clone use it too. */
917 if (target_desc_info_from_user_p (inf
->tdesc_info
))
918 copy_inferior_target_desc_info (inf
, orginf
);
920 clone_program_space (pspace
, orginf
->pspace
);
924 /* Print notices when new inferiors are created and die. */
926 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
927 struct cmd_list_element
*c
, const char *value
)
929 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
932 /* Return a new value for the selected inferior's id. */
934 static struct value
*
935 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
938 struct inferior
*inf
= current_inferior ();
940 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
943 /* Implementation of `$_inferior' variable. */
945 static const struct internalvar_funcs inferior_funcs
=
947 inferior_id_make_value
,
955 initialize_inferiors (void)
957 struct cmd_list_element
*c
= NULL
;
959 /* There's always one inferior. Note that this function isn't an
960 automatic _initialize_foo function, since other _initialize_foo
961 routines may need to install their per-inferior data keys. We
962 can only allocate an inferior when all those modules have done
963 that. Do this after initialize_progspace, due to the
964 current_program_space reference. */
965 current_inferior_
= add_inferior_silent (0);
966 current_inferior_
->incref ();
967 current_inferior_
->pspace
= current_program_space
;
968 current_inferior_
->aspace
= current_program_space
->aspace
;
969 /* The architecture will be initialized shortly, by
970 initialize_current_architecture. */
972 add_info ("inferiors", info_inferiors_command
,
973 _("Print a list of inferiors being managed.\n\
974 Usage: info inferiors [ID]...\n\
975 If IDs are specified, the list is limited to just those inferiors.\n\
976 By default all inferiors are displayed."));
978 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
979 Add a new inferior.\n\
980 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
981 N is the optional number of inferiors to add, default is 1.\n\
982 FILENAME is the file name of the executable to use\n\
984 By default, the new inferior inherits the current inferior's connection.\n\
985 If -no-connection is specified, the new inferior begins with\n\
986 no target connection yet."));
987 set_cmd_completer (c
, filename_completer
);
989 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
990 Remove inferior ID (or list of IDs).\n\
991 Usage: remove-inferiors ID..."));
993 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
994 Clone inferior ID.\n\
995 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
996 Add N copies of inferior ID. The new inferiors have the same\n\
997 executable loaded as the copied inferior. If -copies is not specified,\n\
998 adds 1 copy. If ID is not specified, it is the current inferior\n\
1000 By default, the new inferiors inherit the copied inferior's connection.\n\
1001 If -no-connection is specified, the new inferiors begin with\n\
1002 no target connection yet."));
1004 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
1005 Detach from inferior ID (or list of IDS).\n\
1006 Usage; detach inferiors ID..."),
1009 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
1010 Kill inferior ID (or list of IDs).\n\
1011 Usage: kill inferiors ID..."),
1014 add_cmd ("inferior", class_run
, inferior_command
, _("\
1015 Use this command to switch between inferiors.\n\
1016 Usage: inferior ID\n\
1017 The new inferior ID must be currently known."),
1020 add_setshow_boolean_cmd ("inferior-events", no_class
,
1021 &print_inferior_events
, _("\
1022 Set printing of inferior events (such as inferior start and exit)."), _("\
1023 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1025 show_print_inferior_events
,
1026 &setprintlist
, &showprintlist
);
1028 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);