1 /* Multi-process control for GDB, the GNU debugger.
3 Copyright (C) 2008-2021 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 "arch-utils.h"
35 #include "target-descriptions.h"
36 #include "readline/tilde.h"
37 #include "progspace-and-thread.h"
39 /* Keep a registry of per-inferior data-pointers required by other GDB
42 DEFINE_REGISTRY (inferior
, REGISTRY_ACCESS_FIELD
)
44 intrusive_list
<inferior
> inferior_list
;
45 static int highest_inferior_num
;
48 bool print_inferior_events
= true;
50 /* The Current Inferior. This is a strong reference. I.e., whenever
51 an inferior is the current inferior, its refcount is
53 static inferior_ref current_inferior_
;
56 current_inferior (void)
58 return current_inferior_
.get ();
62 set_current_inferior (struct inferior
*inf
)
64 /* There's always an inferior. */
65 gdb_assert (inf
!= NULL
);
67 current_inferior_
= inferior_ref::new_reference (inf
);
70 private_inferior::~private_inferior () = default;
72 inferior::~inferior ()
76 m_continuations
.clear ();
77 inferior_free_data (inf
);
78 target_desc_info_free (inf
->tdesc_info
);
81 inferior::inferior (int pid_
)
82 : num (++highest_inferior_num
),
84 environment (gdb_environ::from_host_environ ()),
87 inferior_alloc_data (this);
89 m_target_stack
.push (get_dummy_target ());
95 inferior::unpush_target (struct target_ops
*t
)
97 /* If unpushing the process stratum target from the inferior while threads
98 exist in the inferior, ensure that we don't leave any threads of the
99 inferior in the target's "resumed with pending wait status" list.
101 See also the comment in set_thread_exited. */
102 if (t
->stratum () == process_stratum
)
104 process_stratum_target
*proc_target
= as_process_stratum_target (t
);
106 for (thread_info
*thread
: this->non_exited_threads ())
107 proc_target
->maybe_remove_resumed_with_pending_wait_status (thread
);
110 return m_target_stack
.unpush (t
);
114 inferior::set_tty (std::string terminal_name
)
116 m_terminal
= std::move (terminal_name
);
126 inferior::add_continuation (std::function
<void ()> &&cont
)
128 m_continuations
.emplace_front (std::move (cont
));
132 inferior::do_all_continuations ()
134 while (!m_continuations
.empty ())
136 auto iter
= m_continuations
.begin ();
138 m_continuations
.erase (iter
);
143 add_inferior_silent (int pid
)
145 inferior
*inf
= new inferior (pid
);
147 inferior_list
.push_back (*inf
);
149 gdb::observers::inferior_added
.notify (inf
);
152 inferior_appeared (inf
, pid
);
158 add_inferior (int pid
)
160 struct inferior
*inf
= add_inferior_silent (pid
);
162 if (print_inferior_events
)
165 printf_unfiltered (_("[New inferior %d (%s)]\n"),
167 target_pid_to_str (ptid_t (pid
)).c_str ());
169 printf_unfiltered (_("[New inferior %d]\n"), inf
->num
);
175 /* See inferior.h. */
178 inferior::clear_thread_list (bool silent
)
180 thread_list
.clear_and_dispose ([=] (thread_info
*thr
)
182 set_thread_exited (thr
, silent
);
183 if (thr
->deletable ())
186 ptid_thread_map
.clear ();
190 delete_inferior (struct inferior
*inf
)
192 inf
->clear_thread_list (true);
194 auto it
= inferior_list
.iterator_to (*inf
);
195 inferior_list
.erase (it
);
197 gdb::observers::inferior_removed
.notify (inf
);
199 /* If this program space is rendered useless, remove it. */
200 if (inf
->pspace
->empty ())
206 /* If SILENT then be quiet -- don't announce a inferior exit, or the
207 exit of its threads. */
210 exit_inferior_1 (struct inferior
*inf
, int silent
)
212 inf
->clear_thread_list (silent
);
214 gdb::observers::inferior_exit
.notify (inf
);
217 inf
->fake_pid_p
= false;
220 if (inf
->vfork_parent
!= NULL
)
222 inf
->vfork_parent
->vfork_child
= NULL
;
223 inf
->vfork_parent
= NULL
;
225 if (inf
->vfork_child
!= NULL
)
227 inf
->vfork_child
->vfork_parent
= NULL
;
228 inf
->vfork_child
= NULL
;
231 inf
->pending_detach
= 0;
233 inf
->control
= inferior_control_state (NO_STOP_QUIETLY
);
235 /* Clear the register cache and the frame cache. */
236 registers_changed ();
237 reinit_frame_cache ();
241 exit_inferior (inferior
*inf
)
243 exit_inferior_1 (inf
, 0);
247 exit_inferior_silent (inferior
*inf
)
249 exit_inferior_1 (inf
, 1);
252 /* See inferior.h. */
255 detach_inferior (inferior
*inf
)
257 /* Save the pid, since exit_inferior_1 will reset it. */
260 exit_inferior_1 (inf
, 0);
262 if (print_inferior_events
)
263 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
265 target_pid_to_str (ptid_t (pid
)).c_str ());
269 inferior_appeared (struct inferior
*inf
, int pid
)
271 /* If this is the first inferior with threads, reset the global
273 delete_exited_threads ();
274 if (!any_thread_p ())
278 inf
->has_exit_code
= 0;
281 gdb::observers::inferior_appeared
.notify (inf
);
285 find_inferior_id (int num
)
287 for (inferior
*inf
: all_inferiors ())
295 find_inferior_pid (process_stratum_target
*targ
, int pid
)
297 /* Looking for inferior pid == 0 is always wrong, and indicative of
298 a bug somewhere else. There may be more than one with pid == 0,
300 gdb_assert (pid
!= 0);
302 for (inferior
*inf
: all_inferiors (targ
))
312 find_inferior_ptid (process_stratum_target
*targ
, ptid_t ptid
)
314 return find_inferior_pid (targ
, ptid
.pid ());
317 /* See inferior.h. */
320 find_inferior_for_program_space (struct program_space
*pspace
)
322 struct inferior
*cur_inf
= current_inferior ();
324 if (cur_inf
->pspace
== pspace
)
327 for (inferior
*inf
: all_inferiors ())
328 if (inf
->pspace
== pspace
)
335 have_inferiors (void)
337 for (inferior
*inf ATTRIBUTE_UNUSED
: all_non_exited_inferiors ())
343 /* Return the number of live inferiors. We account for the case
344 where an inferior might have a non-zero pid but no threads, as
345 in the middle of a 'mourn' operation. */
348 number_of_live_inferiors (process_stratum_target
*proc_target
)
352 for (inferior
*inf
: all_non_exited_inferiors (proc_target
))
353 if (inf
->has_execution ())
354 for (thread_info
*tp ATTRIBUTE_UNUSED
: inf
->non_exited_threads ())
356 /* Found a live thread in this inferior, go to the next
365 /* Return true if there is at least one live inferior. */
368 have_live_inferiors (void)
370 return number_of_live_inferiors (NULL
) > 0;
373 /* Prune away any unused inferiors, and then prune away no longer used
377 prune_inferiors (void)
379 for (inferior
*inf
: all_inferiors_safe ())
381 if (!inf
->deletable ()
386 delete_inferior (inf
);
390 /* Simply returns the count of inferiors. */
393 number_of_inferiors (void)
395 auto rng
= all_inferiors ();
396 return std::distance (rng
.begin (), rng
.end ());
399 /* Converts an inferior process id to a string. Like
400 target_pid_to_str, but special cases the null process. */
403 inferior_pid_to_str (int pid
)
406 return target_pid_to_str (ptid_t (pid
));
411 /* See inferior.h. */
414 print_selected_inferior (struct ui_out
*uiout
)
416 struct inferior
*inf
= current_inferior ();
417 const char *filename
= inf
->pspace
->exec_filename
.get ();
419 if (filename
== NULL
)
420 filename
= _("<noexec>");
422 uiout
->message (_("[Switching to inferior %d [%s] (%s)]\n"),
423 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (), filename
);
426 /* Helper for print_inferior. Returns the 'connection-id' string for
430 uiout_field_connection (process_stratum_target
*proc_target
)
432 if (proc_target
== NULL
)
436 else if (proc_target
->connection_string () != NULL
)
438 return string_printf ("%d (%s %s)",
439 proc_target
->connection_number
,
440 proc_target
->shortname (),
441 proc_target
->connection_string ());
445 return string_printf ("%d (%s)",
446 proc_target
->connection_number
,
447 proc_target
->shortname ());
451 /* Prints the list of inferiors and their details on UIOUT. This is a
452 version of 'info_inferior_command' suitable for use from MI.
454 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
455 inferiors that should be printed. Otherwise, all inferiors are
459 print_inferior (struct ui_out
*uiout
, const char *requested_inferiors
)
462 size_t connection_id_len
= 20;
464 /* Compute number of inferiors we will print. */
465 for (inferior
*inf
: all_inferiors ())
467 if (!number_is_in_list (requested_inferiors
, inf
->num
))
470 std::string conn
= uiout_field_connection (inf
->process_target ());
471 if (connection_id_len
< conn
.size ())
472 connection_id_len
= conn
.size ();
479 uiout
->message ("No inferiors.\n");
483 ui_out_emit_table
table_emitter (uiout
, 5, inf_count
, "inferiors");
484 uiout
->table_header (1, ui_left
, "current", "");
485 uiout
->table_header (4, ui_left
, "number", "Num");
486 uiout
->table_header (17, ui_left
, "target-id", "Description");
487 uiout
->table_header (connection_id_len
, ui_left
,
488 "connection-id", "Connection");
489 uiout
->table_header (17, ui_left
, "exec", "Executable");
491 uiout
->table_body ();
493 /* Restore the current thread after the loop because we switch the
494 inferior in the loop. */
495 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
496 inferior
*current_inf
= current_inferior ();
497 for (inferior
*inf
: all_inferiors ())
499 if (!number_is_in_list (requested_inferiors
, inf
->num
))
502 ui_out_emit_tuple
tuple_emitter (uiout
, NULL
);
504 if (inf
== current_inf
)
505 uiout
->field_string ("current", "*");
507 uiout
->field_skip ("current");
509 uiout
->field_signed ("number", inf
->num
);
511 /* Because target_pid_to_str uses the current inferior,
512 switch the inferior. */
513 switch_to_inferior_no_thread (inf
);
515 uiout
->field_string ("target-id", inferior_pid_to_str (inf
->pid
));
517 std::string conn
= uiout_field_connection (inf
->process_target ());
518 uiout
->field_string ("connection-id", conn
);
520 if (inf
->pspace
->exec_filename
!= nullptr)
521 uiout
->field_string ("exec", inf
->pspace
->exec_filename
.get ());
523 uiout
->field_skip ("exec");
525 /* Print extra info that isn't really fit to always present in
526 tabular form. Currently we print the vfork parent/child
527 relationships, if any. */
528 if (inf
->vfork_parent
)
530 uiout
->text (_("\n\tis vfork child of inferior "));
531 uiout
->field_signed ("vfork-parent", inf
->vfork_parent
->num
);
533 if (inf
->vfork_child
)
535 uiout
->text (_("\n\tis vfork parent of inferior "));
536 uiout
->field_signed ("vfork-child", inf
->vfork_child
->num
);
544 detach_inferior_command (const char *args
, int from_tty
)
547 error (_("Requires argument (inferior id(s) to detach)"));
549 scoped_restore_current_thread restore_thread
;
551 number_or_range_parser
parser (args
);
552 while (!parser
.finished ())
554 int num
= parser
.get_number ();
556 inferior
*inf
= find_inferior_id (num
);
559 warning (_("Inferior ID %d not known."), num
);
565 warning (_("Inferior ID %d is not running."), num
);
569 thread_info
*tp
= any_thread_of_inferior (inf
);
572 warning (_("Inferior ID %d has no threads."), num
);
576 switch_to_thread (tp
);
578 detach_command (NULL
, from_tty
);
583 kill_inferior_command (const char *args
, int from_tty
)
586 error (_("Requires argument (inferior id(s) to kill)"));
588 scoped_restore_current_thread restore_thread
;
590 number_or_range_parser
parser (args
);
591 while (!parser
.finished ())
593 int num
= parser
.get_number ();
595 inferior
*inf
= find_inferior_id (num
);
598 warning (_("Inferior ID %d not known."), num
);
604 warning (_("Inferior ID %d is not running."), num
);
608 thread_info
*tp
= any_thread_of_inferior (inf
);
611 warning (_("Inferior ID %d has no threads."), num
);
615 switch_to_thread (tp
);
620 bfd_cache_close_all ();
623 /* See inferior.h. */
626 switch_to_inferior_no_thread (inferior
*inf
)
628 set_current_inferior (inf
);
629 switch_to_no_thread ();
630 set_current_program_space (inf
->pspace
);
634 inferior_command (const char *args
, int from_tty
)
636 struct inferior
*inf
;
641 inf
= current_inferior ();
642 gdb_assert (inf
!= nullptr);
643 const char *filename
= inf
->pspace
->exec_filename
.get ();
645 if (filename
== nullptr)
646 filename
= _("<noexec>");
648 printf_filtered (_("[Current inferior is %d [%s] (%s)]\n"),
649 inf
->num
, inferior_pid_to_str (inf
->pid
).c_str (),
654 num
= parse_and_eval_long (args
);
656 inf
= find_inferior_id (num
);
658 error (_("Inferior ID %d not known."), num
);
662 if (inf
!= current_inferior ())
664 thread_info
*tp
= any_thread_of_inferior (inf
);
666 error (_("Inferior has no threads."));
668 switch_to_thread (tp
);
671 gdb::observers::user_selected_context_changed
.notify
672 (USER_SELECTED_INFERIOR
673 | USER_SELECTED_THREAD
674 | USER_SELECTED_FRAME
);
678 switch_to_inferior_no_thread (inf
);
680 gdb::observers::user_selected_context_changed
.notify
681 (USER_SELECTED_INFERIOR
);
686 /* Print information about currently known inferiors. */
689 info_inferiors_command (const char *args
, int from_tty
)
691 print_inferior (current_uiout
, args
);
694 /* remove-inferior ID */
697 remove_inferior_command (const char *args
, int from_tty
)
699 if (args
== NULL
|| *args
== '\0')
700 error (_("Requires an argument (inferior id(s) to remove)"));
702 number_or_range_parser
parser (args
);
703 while (!parser
.finished ())
705 int num
= parser
.get_number ();
706 struct inferior
*inf
= find_inferior_id (num
);
710 warning (_("Inferior ID %d not known."), num
);
714 if (!inf
->deletable ())
716 warning (_("Can not remove current inferior %d."), num
);
722 warning (_("Can not remove active inferior %d."), num
);
726 delete_inferior (inf
);
731 add_inferior_with_spaces (void)
733 struct address_space
*aspace
;
734 struct program_space
*pspace
;
735 struct inferior
*inf
;
737 /* If all inferiors share an address space on this system, this
738 doesn't really return a new address space; otherwise, it
740 aspace
= maybe_new_address_space ();
741 pspace
= new program_space (aspace
);
742 inf
= add_inferior (0);
743 inf
->pspace
= pspace
;
744 inf
->aspace
= pspace
->aspace
;
746 /* Setup the inferior's initial arch, based on information obtained
747 from the global "set ..." options. */
749 inf
->gdbarch
= gdbarch_find_by_info (info
);
750 /* The "set ..." options reject invalid settings, so we should
751 always have a valid arch by now. */
752 gdb_assert (inf
->gdbarch
!= NULL
);
757 /* Switch to inferior NEW_INF, a new inferior, and unless
758 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
762 switch_to_inferior_and_push_target (inferior
*new_inf
,
763 bool no_connection
, inferior
*org_inf
)
765 process_stratum_target
*proc_target
= org_inf
->process_target ();
767 /* Switch over temporarily, while reading executable and
769 switch_to_inferior_no_thread (new_inf
);
771 /* Reuse the target for new inferior. */
772 if (!no_connection
&& proc_target
!= NULL
)
774 new_inf
->push_target (proc_target
);
775 if (proc_target
->connection_string () != NULL
)
776 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
778 proc_target
->connection_number
,
779 proc_target
->shortname (),
780 proc_target
->connection_string ());
782 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
784 proc_target
->connection_number
,
785 proc_target
->shortname ());
788 printf_filtered (_("Added inferior %d\n"), new_inf
->num
);
791 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
794 add_inferior_command (const char *args
, int from_tty
)
797 gdb::unique_xmalloc_ptr
<char> exec
;
798 symfile_add_flags add_flags
= 0;
799 bool no_connection
= false;
802 add_flags
|= SYMFILE_VERBOSE
;
806 gdb_argv
built_argv (args
);
808 for (char **argv
= built_argv
.get (); *argv
!= NULL
; argv
++)
812 if (strcmp (*argv
, "-copies") == 0)
816 error (_("No argument to -copies"));
817 copies
= parse_and_eval_long (*argv
);
819 else if (strcmp (*argv
, "-no-connection") == 0)
820 no_connection
= true;
821 else if (strcmp (*argv
, "-exec") == 0)
825 error (_("No argument to -exec"));
826 exec
.reset (tilde_expand (*argv
));
830 error (_("Invalid argument"));
834 inferior
*orginf
= current_inferior ();
836 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
838 for (i
= 0; i
< copies
; ++i
)
840 inferior
*inf
= add_inferior_with_spaces ();
842 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
846 exec_file_attach (exec
.get (), from_tty
);
847 symbol_file_add_main (exec
.get (), add_flags
);
852 /* clone-inferior [-copies N] [ID] [-no-connection] */
855 clone_inferior_command (const char *args
, int from_tty
)
858 struct inferior
*orginf
= NULL
;
859 bool no_connection
= false;
863 gdb_argv
built_argv (args
);
865 char **argv
= built_argv
.get ();
866 for (; *argv
!= NULL
; argv
++)
870 if (strcmp (*argv
, "-copies") == 0)
874 error (_("No argument to -copies"));
875 copies
= parse_and_eval_long (*argv
);
878 error (_("Invalid copies number"));
880 else if (strcmp (*argv
, "-no-connection") == 0)
881 no_connection
= true;
889 /* The first non-option (-) argument specified the
891 num
= parse_and_eval_long (*argv
);
892 orginf
= find_inferior_id (num
);
895 error (_("Inferior ID %d not known."), num
);
899 error (_("Invalid argument"));
904 /* If no inferior id was specified, then the user wants to clone the
907 orginf
= current_inferior ();
909 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
911 for (i
= 0; i
< copies
; ++i
)
913 struct address_space
*aspace
;
914 struct program_space
*pspace
;
915 struct inferior
*inf
;
917 /* If all inferiors share an address space on this system, this
918 doesn't really return a new address space; otherwise, it
920 aspace
= maybe_new_address_space ();
921 pspace
= new program_space (aspace
);
922 inf
= add_inferior (0);
923 inf
->pspace
= pspace
;
924 inf
->aspace
= pspace
->aspace
;
925 inf
->gdbarch
= orginf
->gdbarch
;
927 switch_to_inferior_and_push_target (inf
, no_connection
, orginf
);
929 /* If the original inferior had a user specified target
930 description, make the clone use it too. */
931 if (target_desc_info_from_user_p (inf
->tdesc_info
))
932 copy_inferior_target_desc_info (inf
, orginf
);
934 clone_program_space (pspace
, orginf
->pspace
);
938 /* Print notices when new inferiors are created and die. */
940 show_print_inferior_events (struct ui_file
*file
, int from_tty
,
941 struct cmd_list_element
*c
, const char *value
)
943 fprintf_filtered (file
, _("Printing of inferior events is %s.\n"), value
);
946 /* Return a new value for the selected inferior's id. */
948 static struct value
*
949 inferior_id_make_value (struct gdbarch
*gdbarch
, struct internalvar
*var
,
952 struct inferior
*inf
= current_inferior ();
954 return value_from_longest (builtin_type (gdbarch
)->builtin_int
, inf
->num
);
957 /* Implementation of `$_inferior' variable. */
959 static const struct internalvar_funcs inferior_funcs
=
961 inferior_id_make_value
,
969 initialize_inferiors (void)
971 struct cmd_list_element
*c
= NULL
;
973 /* There's always one inferior. Note that this function isn't an
974 automatic _initialize_foo function, since other _initialize_foo
975 routines may need to install their per-inferior data keys. We
976 can only allocate an inferior when all those modules have done
977 that. Do this after initialize_progspace, due to the
978 current_program_space reference. */
979 set_current_inferior (add_inferior_silent (0));
980 current_inferior_
->pspace
= current_program_space
;
981 current_inferior_
->aspace
= current_program_space
->aspace
;
982 /* The architecture will be initialized shortly, by
983 initialize_current_architecture. */
985 add_info ("inferiors", info_inferiors_command
,
986 _("Print a list of inferiors being managed.\n\
987 Usage: info inferiors [ID]...\n\
988 If IDs are specified, the list is limited to just those inferiors.\n\
989 By default all inferiors are displayed."));
991 c
= add_com ("add-inferior", no_class
, add_inferior_command
, _("\
992 Add a new inferior.\n\
993 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
994 N is the optional number of inferiors to add, default is 1.\n\
995 FILENAME is the file name of the executable to use\n\
997 By default, the new inferior inherits the current inferior's connection.\n\
998 If -no-connection is specified, the new inferior begins with\n\
999 no target connection yet."));
1000 set_cmd_completer (c
, filename_completer
);
1002 add_com ("remove-inferiors", no_class
, remove_inferior_command
, _("\
1003 Remove inferior ID (or list of IDs).\n\
1004 Usage: remove-inferiors ID..."));
1006 add_com ("clone-inferior", no_class
, clone_inferior_command
, _("\
1007 Clone inferior ID.\n\
1008 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
1009 Add N copies of inferior ID. The new inferiors have the same\n\
1010 executable loaded as the copied inferior. If -copies is not specified,\n\
1011 adds 1 copy. If ID is not specified, it is the current inferior\n\
1013 By default, the new inferiors inherit the copied inferior's connection.\n\
1014 If -no-connection is specified, the new inferiors begin with\n\
1015 no target connection yet."));
1017 add_cmd ("inferiors", class_run
, detach_inferior_command
, _("\
1018 Detach from inferior ID (or list of IDS).\n\
1019 Usage; detach inferiors ID..."),
1022 add_cmd ("inferiors", class_run
, kill_inferior_command
, _("\
1023 Kill inferior ID (or list of IDs).\n\
1024 Usage: kill inferiors ID..."),
1027 add_cmd ("inferior", class_run
, inferior_command
, _("\
1028 Use this command to switch between inferiors.\n\
1029 Usage: inferior ID\n\
1030 The new inferior ID must be currently known."),
1033 add_setshow_boolean_cmd ("inferior-events", no_class
,
1034 &print_inferior_events
, _("\
1035 Set printing of inferior events (such as inferior start and exit)."), _("\
1036 Show printing of inferior events (such as inferior start and exit)."), NULL
,
1038 show_print_inferior_events
,
1039 &setprintlist
, &showprintlist
);
1041 create_internalvar_type_lazy ("_inferior", &inferior_funcs
, NULL
);