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 add_inferior_silent (int pid
)
99 inferior
*inf
= new inferior (pid
);
101 if (inferior_list
== NULL
)
107 for (last
= inferior_list
; last
->next
!= NULL
; last
= last
->next
)
112 gdb::observers::inferior_added
.notify (inf
);
115 inferior_appeared (inf
, pid
);
121 add_inferior (int pid
)
123 struct inferior
*inf
= add_inferior_silent (pid
);
125 if (print_inferior_events
)
128 printf_unfiltered (_("[New inferior %d (%s)]\n"),
130 target_pid_to_str (ptid_t (pid
)).c_str ());
132 printf_unfiltered (_("[New inferior %d]\n"), inf
->num
);
139 delete_inferior (struct inferior
*todel
)
141 struct inferior
*inf
, *infprev
;
145 for (inf
= inferior_list
; inf
; infprev
= inf
, inf
= inf
->next
)
152 for (thread_info
*tp
: inf
->threads_safe ())
153 delete_thread_silent (tp
);
156 infprev
->next
= inf
->next
;
158 inferior_list
= inf
->next
;
160 gdb::observers::inferior_removed
.notify (inf
);
162 /* If this program space is rendered useless, remove it. */
163 if (program_space_empty_p (inf
->pspace
))
169 /* If SILENT then be quiet -- don't announce a inferior exit, or the
170 exit of its threads. */
173 exit_inferior_1 (struct inferior
*inftoex
, int silent
)
175 struct inferior
*inf
;
177 for (inf
= inferior_list
; inf
; inf
= inf
->next
)
184 for (thread_info
*tp
: inf
->threads_safe ())
187 delete_thread_silent (tp
);
192 gdb::observers::inferior_exit
.notify (inf
);
195 inf
->fake_pid_p
= false;
198 if (inf
->vfork_parent
!= NULL
)
200 inf
->vfork_parent
->vfork_child
= NULL
;
201 inf
->vfork_parent
= NULL
;
203 if (inf
->vfork_child
!= NULL
)
205 inf
->vfork_child
->vfork_parent
= NULL
;
206 inf
->vfork_child
= NULL
;
209 inf
->pending_detach
= 0;
211 inf
->control
= inferior_control_state (NO_STOP_QUIETLY
);
213 /* Clear the register cache and the frame cache. */
214 registers_changed ();
215 reinit_frame_cache ();
219 exit_inferior (inferior
*inf
)
221 exit_inferior_1 (inf
, 0);
225 exit_inferior_silent (inferior
*inf
)
227 exit_inferior_1 (inf
, 1);
230 /* See inferior.h. */
233 detach_inferior (inferior
*inf
)
235 /* Save the pid, since exit_inferior_1 will reset it. */
238 exit_inferior_1 (inf
, 0);
240 if (print_inferior_events
)
241 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
243 target_pid_to_str (ptid_t (pid
)).c_str ());
247 inferior_appeared (struct inferior
*inf
, int pid
)
249 /* If this is the first inferior with threads, reset the global
251 delete_exited_threads ();
252 if (!any_thread_p ())
256 inf
->has_exit_code
= 0;
259 gdb::observers::inferior_appeared
.notify (inf
);
263 find_inferior_id (int num
)
265 for (inferior
*inf
: all_inferiors ())
273 find_inferior_pid (process_stratum_target
*targ
, int pid
)
275 /* Looking for inferior pid == 0 is always wrong, and indicative of
276 a bug somewhere else. There may be more than one with pid == 0,
278 gdb_assert (pid
!= 0);
280 for (inferior
*inf
: all_inferiors (targ
))
290 find_inferior_ptid (process_stratum_target
*targ
, ptid_t ptid
)
292 return find_inferior_pid (targ
, ptid
.pid ());
295 /* See inferior.h. */
298 find_inferior_for_program_space (struct program_space
*pspace
)
300 struct inferior
*cur_inf
= current_inferior ();
302 if (cur_inf
->pspace
== pspace
)
305 for (inferior
*inf
: all_inferiors ())
306 if (inf
->pspace
== pspace
)
313 have_inferiors (void)
315 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
321 /* Return the number of live inferiors. We account for the case
322 where an inferior might have a non-zero pid but no threads, as
323 in the middle of a 'mourn' operation. */
326 number_of_live_inferiors (process_stratum_target
*proc_target
)
330 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
331 if (inf
->has_execution ())
332 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
334 /* Found a live thread in this inferior, go to the next
343 /* Return true if there is at least one live inferior. */
346 have_live_inferiors (void)
348 return number_of_live_inferiors (NULL
) > 0;
351 /* Prune away any unused inferiors, and then prune away no longer used
355 prune_inferiors (void)
362 if (!ss
->deletable ()
370 inferior
*ss_next
= ss
->next
;
371 delete_inferior (ss
);
376 /* Simply returns the count of inferiors. */
379 number_of_inferiors (void)
381 auto rng
= all_inferiors ();
382 return std::distance (rng
.begin (), rng
.end ());
385 /* Converts an inferior process id to a string. Like
386 target_pid_to_str, but special cases the null process. */
389 inferior_pid_to_str (int pid
)
392 return target_pid_to_str (ptid_t (pid
));
397 /* See inferior.h. */
400 print_selected_inferior (struct ui_out
*uiout
)
402 struct inferior
*inf
= current_inferior ();
403 const char *filename
= inf
->pspace
->pspace_exec_filename
;
405 if (filename
== NULL
)
406 filename
= _("<noexec>");
408 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
409 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
412 /* Helper for print_inferior. Returns the 'connection-id' string for
416 uiout_field_connection (process_stratum_target
*proc_target
)
418 if (proc_target
== NULL
)
422 else if (proc_target
->connection_string () != NULL
)
424 return string_printf ("%d (%s %s)",
425 proc_target
->connection_number
,
426 proc_target
->shortname (),
427 proc_target
->connection_string ());
431 return string_printf ("%d (%s)",
432 proc_target
->connection_number
,
433 proc_target
->shortname ());
437 /* Prints the list of inferiors and their details on UIOUT. This is a
438 version of 'info_inferior_command' suitable for use from MI.
440 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
441 inferiors that should be printed. Otherwise, all inferiors are
445 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
448 size_t connection_id_len
= 20;
450 /* Compute number of inferiors we will print. */
451 for (inferior
*inf
: all_inferiors ())
453 if (!number_is_in_list (requested_inferiors
, inf
->num
))
456 std::string conn
= uiout_field_connection (inf
->process_target ());
457 if (connection_id_len
< conn
.size ())
458 connection_id_len
= conn
.size ();
465 uiout
->message ("No inferiors.\n");
469 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
470 uiout
->table_header (1, ui_left
, "current", "");
471 uiout
->table_header (4, ui_left
, "number", "Num");
472 uiout
->table_header (17, ui_left
, "target-id", "Description");
473 uiout
->table_header (connection_id_len
, ui_left
,
474 "connection-id", "Connection");
475 uiout
->table_header (17, ui_left
, "exec", "Executable");
477 uiout
->table_body ();
479 /* Restore the current thread after the loop because we switch the
480 inferior in the loop. */
481 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
482 inferior
*current_inf
= current_inferior ();
483 for (inferior
*inf
: all_inferiors ())
485 if (!number_is_in_list (requested_inferiors
, inf
->num
))
488 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
490 if (inf
== current_inf
)
491 uiout
->field_string ("current", "*");
493 uiout
->field_skip ("current");
495 uiout
->field_signed ("number", inf
->num
);
497 /* Because target_pid_to_str uses current_top_target,
498 switch the inferior. */
499 switch_to_inferior_no_thread (inf
);
501 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
503 std::string conn
= uiout_field_connection (inf
->process_target ());
504 uiout
->field_string ("connection-id", conn
.c_str ());
506 if (inf
->pspace
->pspace_exec_filename
!= NULL
)
507 uiout
->field_string ("exec", inf
->pspace
->pspace_exec_filename
);
509 uiout
->field_skip ("exec");
511 /* Print extra info that isn't really fit to always present in
512 tabular form. Currently we print the vfork parent/child
513 relationships, if any. */
514 if (inf
->vfork_parent
)
516 uiout
->text (_("\n\tis vfork child of inferior "));
517 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
519 if (inf
->vfork_child
)
521 uiout
->text (_("\n\tis vfork parent of inferior "));
522 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
530 detach_inferior_command (const char *args
, int from_tty
)
533 error (_("Requires argument (inferior id(s) to detach)"));
535 number_or_range_parser
parser (args
);
536 while (!parser
.finished ())
538 int num
= parser
.get_number ();
540 inferior
*inf
= find_inferior_id (num
);
543 warning (_("Inferior ID %d not known."), num
);
549 warning (_("Inferior ID %d is not running."), num
);
553 thread_info
*tp
= any_thread_of_inferior (inf
);
556 warning (_("Inferior ID %d has no threads."), num
);
560 switch_to_thread (tp
);
562 detach_command (NULL
, from_tty
);
567 kill_inferior_command (const char *args
, int from_tty
)
570 error (_("Requires argument (inferior id(s) to kill)"));
572 number_or_range_parser
parser (args
);
573 while (!parser
.finished ())
575 int num
= parser
.get_number ();
577 inferior
*inf
= find_inferior_id (num
);
580 warning (_("Inferior ID %d not known."), num
);
586 warning (_("Inferior ID %d is not running."), num
);
590 thread_info
*tp
= any_thread_of_inferior (inf
);
593 warning (_("Inferior ID %d has no threads."), num
);
597 switch_to_thread (tp
);
602 bfd_cache_close_all ();
605 /* See inferior.h. */
608 switch_to_inferior_no_thread (inferior
*inf
)
610 set_current_inferior (inf
);
611 switch_to_no_thread ();
612 set_current_program_space (inf
->pspace
);
616 inferior_command (const char *args
, int from_tty
)
618 struct inferior
*inf
;
621 num
= parse_and_eval_long (args
);
623 inf
= find_inferior_id (num
);
625 error (_("Inferior ID %d not known."), num
);
629 if (inf
!= current_inferior ())
631 thread_info
*tp
= any_thread_of_inferior (inf
);
633 error (_("Inferior has no threads."));
635 switch_to_thread (tp
);
638 gdb::observers::user_selected_context_changed
.notify
639 (USER_SELECTED_INFERIOR
640 | USER_SELECTED_THREAD
641 | USER_SELECTED_FRAME
);
645 switch_to_inferior_no_thread (inf
);
647 gdb::observers::user_selected_context_changed
.notify
648 (USER_SELECTED_INFERIOR
);
652 /* Print information about currently known inferiors. */
655 info_inferiors_command (const char *args
, int from_tty
)
657 print_inferior (current_uiout
, args
);
660 /* remove-inferior ID */
663 remove_inferior_command (const char *args
, int from_tty
)
665 if (args
== NULL
|| *args
== '\0')
666 error (_("Requires an argument (inferior id(s) to remove)"));
668 number_or_range_parser
parser (args
);
669 while (!parser
.finished ())
671 int num
= parser
.get_number ();
672 struct inferior
*inf
= find_inferior_id (num
);
676 warning (_("Inferior ID %d not known."), num
);
680 if (!inf
->deletable ())
682 warning (_("Can not remove current inferior %d."), num
);
688 warning (_("Can not remove active inferior %d."), num
);
692 delete_inferior (inf
);
697 add_inferior_with_spaces (void)
699 struct address_space
*aspace
;
700 struct program_space
*pspace
;
701 struct inferior
*inf
;
702 struct gdbarch_info info
;
704 /* If all inferiors share an address space on this system, this
705 doesn't really return a new address space; otherwise, it
707 aspace
= maybe_new_address_space ();
708 pspace
= new program_space (aspace
);
709 inf
= add_inferior (0);
710 inf
->pspace
= pspace
;
711 inf
->aspace
= pspace
->aspace
;
713 /* Setup the inferior's initial arch, based on information obtained
714 from the global "set ..." options. */
715 gdbarch_info_init (&info
);
716 inf
->gdbarch
= gdbarch_find_by_info (info
);
717 /* The "set ..." options reject invalid settings, so we should
718 always have a valid arch by now. */
719 gdb_assert (inf
->gdbarch
!= NULL
);
724 /* Switch to inferior NEW_INF, a new inferior, and unless
725 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
729 switch_to_inferior_and_push_target (inferior
*new_inf
,
730 bool no_connection
, inferior
*org_inf
)
732 process_stratum_target
*proc_target
= org_inf
->process_target ();
734 /* Switch over temporarily, while reading executable and
736 switch_to_inferior_no_thread (new_inf
);
738 /* Reuse the target for new inferior. */
739 if (!no_connection
&& proc_target
!= NULL
)
741 push_target (proc_target
);
742 if (proc_target
->connection_string () != NULL
)
743 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
745 proc_target
->connection_number
,
746 proc_target
->shortname (),
747 proc_target
->connection_string ());
749 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
751 proc_target
->connection_number
,
752 proc_target
->shortname ());
755 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
758 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
761 add_inferior_command (const char *args
, int from_tty
)
764 gdb::unique_xmalloc_ptr
<char> exec
;
765 symfile_add_flags add_flags
= 0;
766 bool no_connection
= false;
769 add_flags
|= SYMFILE_VERBOSE
;
773 gdb_argv
built_argv (args
);
775 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
779 if (strcmp (*argv
, "-copies") == 0)
783 error (_("No argument to -copies"));
784 copies
= parse_and_eval_long (*argv
);
786 else if (strcmp (*argv
, "-no-connection") == 0)
787 no_connection
= true;
788 else if (strcmp (*argv
, "-exec") == 0)
792 error (_("No argument to -exec"));
793 exec
.reset (tilde_expand (*argv
));
797 error (_("Invalid argument"));
801 inferior
*orginf
= current_inferior ();
803 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
805 for (i
= 0; i
< copies
; ++i
)
807 inferior
*inf
= add_inferior_with_spaces ();
809 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
813 exec_file_attach (exec
.get (), from_tty
);
814 symbol_file_add_main (exec
.get (), add_flags
);
819 /* clone-inferior [-copies N] [ID] [-no-connection] */
822 clone_inferior_command (const char *args
, int from_tty
)
825 struct inferior
*orginf
= NULL
;
826 bool no_connection
= false;
830 gdb_argv
built_argv (args
);
832 char **argv
= built_argv
.get ();
833 for (; *argv
!= NULL
; argv
++)
837 if (strcmp (*argv
, "-copies") == 0)
841 error (_("No argument to -copies"));
842 copies
= parse_and_eval_long (*argv
);
845 error (_("Invalid copies number"));
847 else if (strcmp (*argv
, "-no-connection") == 0)
848 no_connection
= true;
856 /* The first non-option (-) argument specified the
858 num
= parse_and_eval_long (*argv
);
859 orginf
= find_inferior_id (num
);
862 error (_("Inferior ID %d not known."), num
);
866 error (_("Invalid argument"));
871 /* If no inferior id was specified, then the user wants to clone the
874 orginf
= current_inferior ();
876 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
878 for (i
= 0; i
< copies
; ++i
)
880 struct address_space
*aspace
;
881 struct program_space
*pspace
;
882 struct inferior
*inf
;
884 /* If all inferiors share an address space on this system, this
885 doesn't really return a new address space; otherwise, it
887 aspace
= maybe_new_address_space ();
888 pspace
= new program_space (aspace
);
889 inf
= add_inferior (0);
890 inf
->pspace
= pspace
;
891 inf
->aspace
= pspace
->aspace
;
892 inf
->gdbarch
= orginf
->gdbarch
;
894 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
896 /* If the original inferior had a user specified target
897 description, make the clone use it too. */
898 if (target_desc_info_from_user_p (inf
->tdesc_info
))
899 copy_inferior_target_desc_info (inf
, orginf
);
901 clone_program_space (pspace
, orginf
->pspace
);
905 /* Print notices when new inferiors are created and die. */
907 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
908 struct cmd_list_element
*c
, const char *value
)
910 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
913 /* Return a new value for the selected inferior's id. */
915 static struct value
*
916 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
919 struct inferior
*inf
= current_inferior ();
921 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
924 /* Implementation of `$_inferior' variable. */
926 static const struct internalvar_funcs inferior_funcs
=
928 inferior_id_make_value
,
936 initialize_inferiors (void)
938 struct cmd_list_element
*c
= NULL
;
940 /* There's always one inferior. Note that this function isn't an
941 automatic _initialize_foo function, since other _initialize_foo
942 routines may need to install their per-inferior data keys. We
943 can only allocate an inferior when all those modules have done
944 that. Do this after initialize_progspace, due to the
945 current_program_space reference. */
946 current_inferior_
= add_inferior_silent (0);
947 current_inferior_
->incref ();
948 current_inferior_
->pspace
= current_program_space
;
949 current_inferior_
->aspace
= current_program_space
->aspace
;
950 /* The architecture will be initialized shortly, by
951 initialize_current_architecture. */
953 add_info ("inferiors", info_inferiors_command
,
954 _("Print a list of inferiors being managed.\n\
955 Usage: info inferiors [ID]...\n\
956 If IDs are specified, the list is limited to just those inferiors.\n\
957 By default all inferiors are displayed."));
959 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
960 Add a new inferior.\n\
961 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
962 N is the optional number of inferiors to add, default is 1.\n\
963 FILENAME is the file name of the executable to use\n\
965 By default, the new inferior inherits the current inferior's connection.\n\
966 If -no-connection is specified, the new inferior begins with\n\
967 no target connection yet."));
968 set_cmd_completer (c
, filename_completer
);
970 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
971 Remove inferior ID (or list of IDs).\n\
972 Usage: remove-inferiors ID..."));
974 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
975 Clone inferior ID.\n\
976 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
977 Add N copies of inferior ID. The new inferiors have the same\n\
978 executable loaded as the copied inferior. If -copies is not specified,\n\
979 adds 1 copy. If ID is not specified, it is the current inferior\n\
981 By default, the new inferiors inherit the copied inferior's connection.\n\
982 If -no-connection is specified, the new inferiors begin with\n\
983 no target connection yet."));
985 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
986 Detach from inferior ID (or list of IDS).\n\
987 Usage; detach inferiors ID..."),
990 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
991 Kill inferior ID (or list of IDs).\n\
992 Usage: kill inferiors ID..."),
995 add_cmd ("inferior", class_run
, inferior_command
, _("\
996 Use this command to switch between inferiors.\n\
997 Usage: inferior ID\n\
998 The new inferior ID must be currently known."),
1001 add_setshow_boolean_cmd ("inferior-events", no_class
,
1002 &print_inferior_events
, _("\
1003 Set printing of inferior events (such as inferior start and exit)."), _("\
1004 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1006 show_print_inferior_events
,
1007 &setprintlist
, &showprintlist
);
1009 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);