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 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 iterate_over_inferiors (int (*callback
) (struct inferior
*, void *),
317 for (inferior
*inf
: all_inferiors_safe ())
318 if ((*callback
) (inf
, data
))
325 have_inferiors (void)
327 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
333 /* Return the number of live inferiors. We account for the case
334 where an inferior might have a non-zero pid but no threads, as
335 in the middle of a 'mourn' operation. */
338 number_of_live_inferiors (process_stratum_target
*proc_target
)
342 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
343 if (inf
->has_execution ())
344 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
346 /* Found a live thread in this inferior, go to the next
355 /* Return true if there is at least one live inferior. */
358 have_live_inferiors (void)
360 return number_of_live_inferiors (NULL
) > 0;
363 /* Prune away any unused inferiors, and then prune away no longer used
367 prune_inferiors (void)
374 if (!ss
->deletable ()
382 inferior
*ss_next
= ss
->next
;
383 delete_inferior (ss
);
388 /* Simply returns the count of inferiors. */
391 number_of_inferiors (void)
393 auto rng
= all_inferiors ();
394 return std::distance (rng
.begin (), rng
.end ());
397 /* Converts an inferior process id to a string. Like
398 target_pid_to_str, but special cases the null process. */
401 inferior_pid_to_str (int pid
)
404 return target_pid_to_str (ptid_t (pid
));
409 /* See inferior.h. */
412 print_selected_inferior (struct ui_out
*uiout
)
414 struct inferior
*inf
= current_inferior ();
415 const char *filename
= inf
->pspace
->pspace_exec_filename
;
417 if (filename
== NULL
)
418 filename
= _("<noexec>");
420 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
421 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
424 /* Helper for print_inferior. Returns the 'connection-id' string for
428 uiout_field_connection (process_stratum_target
*proc_target
)
430 if (proc_target
== NULL
)
434 else if (proc_target
->connection_string () != NULL
)
436 return string_printf ("%d (%s %s)",
437 proc_target
->connection_number
,
438 proc_target
->shortname (),
439 proc_target
->connection_string ());
443 return string_printf ("%d (%s)",
444 proc_target
->connection_number
,
445 proc_target
->shortname ());
449 /* Prints the list of inferiors and their details on UIOUT. This is a
450 version of 'info_inferior_command' suitable for use from MI.
452 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
453 inferiors that should be printed. Otherwise, all inferiors are
457 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
460 size_t connection_id_len
= 20;
462 /* Compute number of inferiors we will print. */
463 for (inferior
*inf
: all_inferiors ())
465 if (!number_is_in_list (requested_inferiors
, inf
->num
))
468 std::string conn
= uiout_field_connection (inf
->process_target ());
469 if (connection_id_len
< conn
.size ())
470 connection_id_len
= conn
.size ();
477 uiout
->message ("No inferiors.\n");
481 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
482 uiout
->table_header (1, ui_left
, "current", "");
483 uiout
->table_header (4, ui_left
, "number", "Num");
484 uiout
->table_header (17, ui_left
, "target-id", "Description");
485 uiout
->table_header (connection_id_len
, ui_left
,
486 "connection-id", "Connection");
487 uiout
->table_header (17, ui_left
, "exec", "Executable");
489 uiout
->table_body ();
491 /* Restore the current thread after the loop because we switch the
492 inferior in the loop. */
493 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
494 inferior
*current_inf
= current_inferior ();
495 for (inferior
*inf
: all_inferiors ())
497 if (!number_is_in_list (requested_inferiors
, inf
->num
))
500 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
502 if (inf
== current_inf
)
503 uiout
->field_string ("current", "*");
505 uiout
->field_skip ("current");
507 uiout
->field_signed ("number", inf
->num
);
509 /* Because target_pid_to_str uses current_top_target,
510 switch the inferior. */
511 switch_to_inferior_no_thread (inf
);
513 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
515 std::string conn
= uiout_field_connection (inf
->process_target ());
516 uiout
->field_string ("connection-id", conn
.c_str ());
518 if (inf
->pspace
->pspace_exec_filename
!= NULL
)
519 uiout
->field_string ("exec", inf
->pspace
->pspace_exec_filename
);
521 uiout
->field_skip ("exec");
523 /* Print extra info that isn't really fit to always present in
524 tabular form. Currently we print the vfork parent/child
525 relationships, if any. */
526 if (inf
->vfork_parent
)
528 uiout
->text (_("\n\tis vfork child of inferior "));
529 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
531 if (inf
->vfork_child
)
533 uiout
->text (_("\n\tis vfork parent of inferior "));
534 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
542 detach_inferior_command (const char *args
, int from_tty
)
545 error (_("Requires argument (inferior id(s) to detach)"));
547 number_or_range_parser
parser (args
);
548 while (!parser
.finished ())
550 int num
= parser
.get_number ();
552 inferior
*inf
= find_inferior_id (num
);
555 warning (_("Inferior ID %d not known."), num
);
561 warning (_("Inferior ID %d is not running."), num
);
565 thread_info
*tp
= any_thread_of_inferior (inf
);
568 warning (_("Inferior ID %d has no threads."), num
);
572 switch_to_thread (tp
);
574 detach_command (NULL
, from_tty
);
579 kill_inferior_command (const char *args
, int from_tty
)
582 error (_("Requires argument (inferior id(s) to kill)"));
584 number_or_range_parser
parser (args
);
585 while (!parser
.finished ())
587 int num
= parser
.get_number ();
589 inferior
*inf
= find_inferior_id (num
);
592 warning (_("Inferior ID %d not known."), num
);
598 warning (_("Inferior ID %d is not running."), num
);
602 thread_info
*tp
= any_thread_of_inferior (inf
);
605 warning (_("Inferior ID %d has no threads."), num
);
609 switch_to_thread (tp
);
614 bfd_cache_close_all ();
617 /* See inferior.h. */
620 switch_to_inferior_no_thread (inferior
*inf
)
622 set_current_inferior (inf
);
623 switch_to_no_thread ();
624 set_current_program_space (inf
->pspace
);
628 inferior_command (const char *args
, int from_tty
)
630 struct inferior
*inf
;
633 num
= parse_and_eval_long (args
);
635 inf
= find_inferior_id (num
);
637 error (_("Inferior ID %d not known."), num
);
641 if (inf
!= current_inferior ())
643 thread_info
*tp
= any_thread_of_inferior (inf
);
645 error (_("Inferior has no threads."));
647 switch_to_thread (tp
);
650 gdb::observers::user_selected_context_changed
.notify
651 (USER_SELECTED_INFERIOR
652 | USER_SELECTED_THREAD
653 | USER_SELECTED_FRAME
);
657 switch_to_inferior_no_thread (inf
);
659 gdb::observers::user_selected_context_changed
.notify
660 (USER_SELECTED_INFERIOR
);
664 /* Print information about currently known inferiors. */
667 info_inferiors_command (const char *args
, int from_tty
)
669 print_inferior (current_uiout
, args
);
672 /* remove-inferior ID */
675 remove_inferior_command (const char *args
, int from_tty
)
677 if (args
== NULL
|| *args
== '\0')
678 error (_("Requires an argument (inferior id(s) to remove)"));
680 number_or_range_parser
parser (args
);
681 while (!parser
.finished ())
683 int num
= parser
.get_number ();
684 struct inferior
*inf
= find_inferior_id (num
);
688 warning (_("Inferior ID %d not known."), num
);
692 if (!inf
->deletable ())
694 warning (_("Can not remove current inferior %d."), num
);
700 warning (_("Can not remove active inferior %d."), num
);
704 delete_inferior (inf
);
709 add_inferior_with_spaces (void)
711 struct address_space
*aspace
;
712 struct program_space
*pspace
;
713 struct inferior
*inf
;
714 struct gdbarch_info info
;
716 /* If all inferiors share an address space on this system, this
717 doesn't really return a new address space; otherwise, it
719 aspace
= maybe_new_address_space ();
720 pspace
= new program_space (aspace
);
721 inf
= add_inferior (0);
722 inf
->pspace
= pspace
;
723 inf
->aspace
= pspace
->aspace
;
725 /* Setup the inferior's initial arch, based on information obtained
726 from the global "set ..." options. */
727 gdbarch_info_init (&info
);
728 inf
->gdbarch
= gdbarch_find_by_info (info
);
729 /* The "set ..." options reject invalid settings, so we should
730 always have a valid arch by now. */
731 gdb_assert (inf
->gdbarch
!= NULL
);
736 /* Switch to inferior NEW_INF, a new inferior, and unless
737 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
741 switch_to_inferior_and_push_target (inferior
*new_inf
,
742 bool no_connection
, inferior
*org_inf
)
744 process_stratum_target
*proc_target
= org_inf
->process_target ();
746 /* Switch over temporarily, while reading executable and
748 switch_to_inferior_no_thread (new_inf
);
750 /* Reuse the target for new inferior. */
751 if (!no_connection
&& proc_target
!= NULL
)
753 push_target (proc_target
);
754 if (proc_target
->connection_string () != NULL
)
755 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
757 proc_target
->connection_number
,
758 proc_target
->shortname (),
759 proc_target
->connection_string ());
761 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
763 proc_target
->connection_number
,
764 proc_target
->shortname ());
767 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
770 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
773 add_inferior_command (const char *args
, int from_tty
)
776 gdb::unique_xmalloc_ptr
<char> exec
;
777 symfile_add_flags add_flags
= 0;
778 bool no_connection
= false;
781 add_flags
|= SYMFILE_VERBOSE
;
785 gdb_argv
built_argv (args
);
787 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
791 if (strcmp (*argv
, "-copies") == 0)
795 error (_("No argument to -copies"));
796 copies
= parse_and_eval_long (*argv
);
798 else if (strcmp (*argv
, "-no-connection") == 0)
799 no_connection
= true;
800 else if (strcmp (*argv
, "-exec") == 0)
804 error (_("No argument to -exec"));
805 exec
.reset (tilde_expand (*argv
));
809 error (_("Invalid argument"));
813 inferior
*orginf
= current_inferior ();
815 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
817 for (i
= 0; i
< copies
; ++i
)
819 inferior
*inf
= add_inferior_with_spaces ();
821 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
825 exec_file_attach (exec
.get (), from_tty
);
826 symbol_file_add_main (exec
.get (), add_flags
);
831 /* clone-inferior [-copies N] [ID] [-no-connection] */
834 clone_inferior_command (const char *args
, int from_tty
)
837 struct inferior
*orginf
= NULL
;
838 bool no_connection
= false;
842 gdb_argv
built_argv (args
);
844 char **argv
= built_argv
.get ();
845 for (; *argv
!= NULL
; argv
++)
849 if (strcmp (*argv
, "-copies") == 0)
853 error (_("No argument to -copies"));
854 copies
= parse_and_eval_long (*argv
);
857 error (_("Invalid copies number"));
859 else if (strcmp (*argv
, "-no-connection") == 0)
860 no_connection
= true;
868 /* The first non-option (-) argument specified the
870 num
= parse_and_eval_long (*argv
);
871 orginf
= find_inferior_id (num
);
874 error (_("Inferior ID %d not known."), num
);
878 error (_("Invalid argument"));
883 /* If no inferior id was specified, then the user wants to clone the
886 orginf
= current_inferior ();
888 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
890 for (i
= 0; i
< copies
; ++i
)
892 struct address_space
*aspace
;
893 struct program_space
*pspace
;
894 struct inferior
*inf
;
896 /* If all inferiors share an address space on this system, this
897 doesn't really return a new address space; otherwise, it
899 aspace
= maybe_new_address_space ();
900 pspace
= new program_space (aspace
);
901 inf
= add_inferior (0);
902 inf
->pspace
= pspace
;
903 inf
->aspace
= pspace
->aspace
;
904 inf
->gdbarch
= orginf
->gdbarch
;
906 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
908 /* If the original inferior had a user specified target
909 description, make the clone use it too. */
910 if (target_desc_info_from_user_p (inf
->tdesc_info
))
911 copy_inferior_target_desc_info (inf
, orginf
);
913 clone_program_space (pspace
, orginf
->pspace
);
917 /* Print notices when new inferiors are created and die. */
919 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
920 struct cmd_list_element
*c
, const char *value
)
922 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
925 /* Return a new value for the selected inferior's id. */
927 static struct value
*
928 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
931 struct inferior
*inf
= current_inferior ();
933 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
936 /* Implementation of `$_inferior' variable. */
938 static const struct internalvar_funcs inferior_funcs
=
940 inferior_id_make_value
,
948 initialize_inferiors (void)
950 struct cmd_list_element
*c
= NULL
;
952 /* There's always one inferior. Note that this function isn't an
953 automatic _initialize_foo function, since other _initialize_foo
954 routines may need to install their per-inferior data keys. We
955 can only allocate an inferior when all those modules have done
956 that. Do this after initialize_progspace, due to the
957 current_program_space reference. */
958 current_inferior_
= add_inferior_silent (0);
959 current_inferior_
->incref ();
960 current_inferior_
->pspace
= current_program_space
;
961 current_inferior_
->aspace
= current_program_space
->aspace
;
962 /* The architecture will be initialized shortly, by
963 initialize_current_architecture. */
965 add_info ("inferiors", info_inferiors_command
,
966 _("Print a list of inferiors being managed.\n\
967 Usage: info inferiors [ID]...\n\
968 If IDs are specified, the list is limited to just those inferiors.\n\
969 By default all inferiors are displayed."));
971 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
972 Add a new inferior.\n\
973 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
974 N is the optional number of inferiors to add, default is 1.\n\
975 FILENAME is the file name of the executable to use\n\
977 By default, the new inferior inherits the current inferior's connection.\n\
978 If -no-connection is specified, the new inferior begins with\n\
979 no target connection yet."));
980 set_cmd_completer (c
, filename_completer
);
982 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
983 Remove inferior ID (or list of IDs).\n\
984 Usage: remove-inferiors ID..."));
986 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
987 Clone inferior ID.\n\
988 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
989 Add N copies of inferior ID. The new inferiors have the same\n\
990 executable loaded as the copied inferior. If -copies is not specified,\n\
991 adds 1 copy. If ID is not specified, it is the current inferior\n\
993 By default, the new inferiors inherit the copied inferior's connection.\n\
994 If -no-connection is specified, the new inferiors begin with\n\
995 no target connection yet."));
997 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
998 Detach from inferior ID (or list of IDS).\n\
999 Usage; detach inferiors ID..."),
1002 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
1003 Kill inferior ID (or list of IDs).\n\
1004 Usage: kill inferiors ID..."),
1007 add_cmd ("inferior", class_run
, inferior_command
, _("\
1008 Use this command to switch between inferiors.\n\
1009 Usage: inferior ID\n\
1010 The new inferior ID must be currently known."),
1013 add_setshow_boolean_cmd ("inferior-events", no_class
,
1014 &print_inferior_events
, _("\
1015 Set printing of inferior events (such as inferior start and exit)."), _("\
1016 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1018 show_print_inferior_events
,
1019 &setprintlist
, &showprintlist
);
1021 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);