]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/inferior.c
Automatic Copyright Year update after running gdb/copyright.py
[thirdparty/binutils-gdb.git] / gdb / inferior.c
1 /* Multi-process control for GDB, the GNU debugger.
2
3 Copyright (C) 2008-2022 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
20 #include "defs.h"
21 #include "exec.h"
22 #include "inferior.h"
23 #include "target.h"
24 #include "command.h"
25 #include "completer.h"
26 #include "gdbcmd.h"
27 #include "gdbthread.h"
28 #include "ui-out.h"
29 #include "observable.h"
30 #include "gdbcore.h"
31 #include "symfile.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"
38
39 /* Keep a registry of per-inferior data-pointers required by other GDB
40 modules. */
41
42 DEFINE_REGISTRY (inferior, REGISTRY_ACCESS_FIELD)
43
44 intrusive_list<inferior> inferior_list;
45 static int highest_inferior_num;
46
47 /* See inferior.h. */
48 bool print_inferior_events = true;
49
50 /* The Current Inferior. This is a strong reference. I.e., whenever
51 an inferior is the current inferior, its refcount is
52 incremented. */
53 static inferior_ref current_inferior_;
54
55 struct inferior*
56 current_inferior (void)
57 {
58 return current_inferior_.get ();
59 }
60
61 void
62 set_current_inferior (struct inferior *inf)
63 {
64 /* There's always an inferior. */
65 gdb_assert (inf != NULL);
66
67 current_inferior_ = inferior_ref::new_reference (inf);
68 }
69
70 private_inferior::~private_inferior () = default;
71
72 inferior::~inferior ()
73 {
74 inferior *inf = this;
75
76 m_continuations.clear ();
77 inferior_free_data (inf);
78 target_desc_info_free (inf->tdesc_info);
79 }
80
81 inferior::inferior (int pid_)
82 : num (++highest_inferior_num),
83 pid (pid_),
84 environment (gdb_environ::from_host_environ ()),
85 registry_data ()
86 {
87 inferior_alloc_data (this);
88
89 m_target_stack.push (get_dummy_target ());
90 }
91
92 /* See inferior.h. */
93
94 int
95 inferior::unpush_target (struct target_ops *t)
96 {
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.
100
101 See also the comment in set_thread_exited. */
102 if (t->stratum () == process_stratum)
103 {
104 process_stratum_target *proc_target = as_process_stratum_target (t);
105
106 for (thread_info *thread : this->non_exited_threads ())
107 proc_target->maybe_remove_resumed_with_pending_wait_status (thread);
108 }
109
110 return m_target_stack.unpush (t);
111 }
112
113 void
114 inferior::set_tty (std::string terminal_name)
115 {
116 m_terminal = std::move (terminal_name);
117 }
118
119 const std::string &
120 inferior::tty ()
121 {
122 return m_terminal;
123 }
124
125 void
126 inferior::add_continuation (std::function<void ()> &&cont)
127 {
128 m_continuations.emplace_front (std::move (cont));
129 }
130
131 void
132 inferior::do_all_continuations ()
133 {
134 while (!m_continuations.empty ())
135 {
136 auto iter = m_continuations.begin ();
137 (*iter) ();
138 m_continuations.erase (iter);
139 }
140 }
141
142 struct inferior *
143 add_inferior_silent (int pid)
144 {
145 inferior *inf = new inferior (pid);
146
147 inferior_list.push_back (*inf);
148
149 gdb::observers::inferior_added.notify (inf);
150
151 if (pid != 0)
152 inferior_appeared (inf, pid);
153
154 return inf;
155 }
156
157 struct inferior *
158 add_inferior (int pid)
159 {
160 struct inferior *inf = add_inferior_silent (pid);
161
162 if (print_inferior_events)
163 {
164 if (pid != 0)
165 printf_unfiltered (_("[New inferior %d (%s)]\n"),
166 inf->num,
167 target_pid_to_str (ptid_t (pid)).c_str ());
168 else
169 printf_unfiltered (_("[New inferior %d]\n"), inf->num);
170 }
171
172 return inf;
173 }
174
175 /* See inferior.h. */
176
177 void
178 inferior::clear_thread_list (bool silent)
179 {
180 thread_list.clear_and_dispose ([=] (thread_info *thr)
181 {
182 threads_debug_printf ("deleting thread %s, silent = %d",
183 thr->ptid.to_string ().c_str (), silent);
184 set_thread_exited (thr, silent);
185 if (thr->deletable ())
186 delete thr;
187 });
188 ptid_thread_map.clear ();
189 }
190
191 void
192 delete_inferior (struct inferior *inf)
193 {
194 inf->clear_thread_list (true);
195
196 auto it = inferior_list.iterator_to (*inf);
197 inferior_list.erase (it);
198
199 gdb::observers::inferior_removed.notify (inf);
200
201 /* If this program space is rendered useless, remove it. */
202 if (inf->pspace->empty ())
203 delete inf->pspace;
204
205 delete inf;
206 }
207
208 /* If SILENT then be quiet -- don't announce a inferior exit, or the
209 exit of its threads. */
210
211 static void
212 exit_inferior_1 (struct inferior *inf, int silent)
213 {
214 inf->clear_thread_list (silent);
215
216 gdb::observers::inferior_exit.notify (inf);
217
218 inf->pid = 0;
219 inf->fake_pid_p = false;
220 inf->priv = NULL;
221
222 if (inf->vfork_parent != NULL)
223 {
224 inf->vfork_parent->vfork_child = NULL;
225 inf->vfork_parent = NULL;
226 }
227 if (inf->vfork_child != NULL)
228 {
229 inf->vfork_child->vfork_parent = NULL;
230 inf->vfork_child = NULL;
231 }
232
233 inf->pending_detach = 0;
234 /* Reset it. */
235 inf->control = inferior_control_state (NO_STOP_QUIETLY);
236
237 /* Clear the register cache and the frame cache. */
238 registers_changed ();
239 reinit_frame_cache ();
240 }
241
242 void
243 exit_inferior (inferior *inf)
244 {
245 exit_inferior_1 (inf, 0);
246 }
247
248 void
249 exit_inferior_silent (inferior *inf)
250 {
251 exit_inferior_1 (inf, 1);
252 }
253
254 /* See inferior.h. */
255
256 void
257 detach_inferior (inferior *inf)
258 {
259 /* Save the pid, since exit_inferior_1 will reset it. */
260 int pid = inf->pid;
261
262 exit_inferior_1 (inf, 0);
263
264 if (print_inferior_events)
265 printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
266 inf->num,
267 target_pid_to_str (ptid_t (pid)).c_str ());
268 }
269
270 void
271 inferior_appeared (struct inferior *inf, int pid)
272 {
273 /* If this is the first inferior with threads, reset the global
274 thread id. */
275 delete_exited_threads ();
276 if (!any_thread_p ())
277 init_thread_list ();
278
279 inf->pid = pid;
280 inf->has_exit_code = 0;
281 inf->exit_code = 0;
282
283 gdb::observers::inferior_appeared.notify (inf);
284 }
285
286 struct inferior *
287 find_inferior_id (int num)
288 {
289 for (inferior *inf : all_inferiors ())
290 if (inf->num == num)
291 return inf;
292
293 return NULL;
294 }
295
296 struct inferior *
297 find_inferior_pid (process_stratum_target *targ, int pid)
298 {
299 /* Looking for inferior pid == 0 is always wrong, and indicative of
300 a bug somewhere else. There may be more than one with pid == 0,
301 for instance. */
302 gdb_assert (pid != 0);
303
304 for (inferior *inf : all_inferiors (targ))
305 if (inf->pid == pid)
306 return inf;
307
308 return NULL;
309 }
310
311 /* See inferior.h */
312
313 struct inferior *
314 find_inferior_ptid (process_stratum_target *targ, ptid_t ptid)
315 {
316 return find_inferior_pid (targ, ptid.pid ());
317 }
318
319 /* See inferior.h. */
320
321 struct inferior *
322 find_inferior_for_program_space (struct program_space *pspace)
323 {
324 struct inferior *cur_inf = current_inferior ();
325
326 if (cur_inf->pspace == pspace)
327 return cur_inf;
328
329 for (inferior *inf : all_inferiors ())
330 if (inf->pspace == pspace)
331 return inf;
332
333 return NULL;
334 }
335
336 int
337 have_inferiors (void)
338 {
339 for (inferior *inf ATTRIBUTE_UNUSED : all_non_exited_inferiors ())
340 return 1;
341
342 return 0;
343 }
344
345 /* Return the number of live inferiors. We account for the case
346 where an inferior might have a non-zero pid but no threads, as
347 in the middle of a 'mourn' operation. */
348
349 int
350 number_of_live_inferiors (process_stratum_target *proc_target)
351 {
352 int num_inf = 0;
353
354 for (inferior *inf : all_non_exited_inferiors (proc_target))
355 if (inf->has_execution ())
356 for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
357 {
358 /* Found a live thread in this inferior, go to the next
359 inferior. */
360 ++num_inf;
361 break;
362 }
363
364 return num_inf;
365 }
366
367 /* Return true if there is at least one live inferior. */
368
369 int
370 have_live_inferiors (void)
371 {
372 return number_of_live_inferiors (NULL) > 0;
373 }
374
375 /* Prune away any unused inferiors, and then prune away no longer used
376 program spaces. */
377
378 void
379 prune_inferiors (void)
380 {
381 for (inferior *inf : all_inferiors_safe ())
382 {
383 if (!inf->deletable ()
384 || !inf->removable
385 || inf->pid != 0)
386 continue;
387
388 delete_inferior (inf);
389 }
390 }
391
392 /* Simply returns the count of inferiors. */
393
394 int
395 number_of_inferiors (void)
396 {
397 auto rng = all_inferiors ();
398 return std::distance (rng.begin (), rng.end ());
399 }
400
401 /* Converts an inferior process id to a string. Like
402 target_pid_to_str, but special cases the null process. */
403
404 static std::string
405 inferior_pid_to_str (int pid)
406 {
407 if (pid != 0)
408 return target_pid_to_str (ptid_t (pid));
409 else
410 return _("<null>");
411 }
412
413 /* See inferior.h. */
414
415 void
416 print_selected_inferior (struct ui_out *uiout)
417 {
418 struct inferior *inf = current_inferior ();
419 const char *filename = inf->pspace->exec_filename.get ();
420
421 if (filename == NULL)
422 filename = _("<noexec>");
423
424 uiout->message (_("[Switching to inferior %d [%s] (%s)]\n"),
425 inf->num, inferior_pid_to_str (inf->pid).c_str (), filename);
426 }
427
428 /* Helper for print_inferior. Returns the 'connection-id' string for
429 PROC_TARGET. */
430
431 static std::string
432 uiout_field_connection (process_stratum_target *proc_target)
433 {
434 if (proc_target == NULL)
435 {
436 return {};
437 }
438 else if (proc_target->connection_string () != NULL)
439 {
440 return string_printf ("%d (%s %s)",
441 proc_target->connection_number,
442 proc_target->shortname (),
443 proc_target->connection_string ());
444 }
445 else
446 {
447 return string_printf ("%d (%s)",
448 proc_target->connection_number,
449 proc_target->shortname ());
450 }
451 }
452
453 /* Prints the list of inferiors and their details on UIOUT. This is a
454 version of 'info_inferior_command' suitable for use from MI.
455
456 If REQUESTED_INFERIORS is not NULL, it's a list of GDB ids of the
457 inferiors that should be printed. Otherwise, all inferiors are
458 printed. */
459
460 static void
461 print_inferior (struct ui_out *uiout, const char *requested_inferiors)
462 {
463 int inf_count = 0;
464 size_t connection_id_len = 20;
465
466 /* Compute number of inferiors we will print. */
467 for (inferior *inf : all_inferiors ())
468 {
469 if (!number_is_in_list (requested_inferiors, inf->num))
470 continue;
471
472 std::string conn = uiout_field_connection (inf->process_target ());
473 if (connection_id_len < conn.size ())
474 connection_id_len = conn.size ();
475
476 ++inf_count;
477 }
478
479 if (inf_count == 0)
480 {
481 uiout->message ("No inferiors.\n");
482 return;
483 }
484
485 ui_out_emit_table table_emitter (uiout, 5, inf_count, "inferiors");
486 uiout->table_header (1, ui_left, "current", "");
487 uiout->table_header (4, ui_left, "number", "Num");
488 uiout->table_header (17, ui_left, "target-id", "Description");
489 uiout->table_header (connection_id_len, ui_left,
490 "connection-id", "Connection");
491 uiout->table_header (17, ui_left, "exec", "Executable");
492
493 uiout->table_body ();
494
495 /* Restore the current thread after the loop because we switch the
496 inferior in the loop. */
497 scoped_restore_current_pspace_and_thread restore_pspace_thread;
498 inferior *current_inf = current_inferior ();
499 for (inferior *inf : all_inferiors ())
500 {
501 if (!number_is_in_list (requested_inferiors, inf->num))
502 continue;
503
504 ui_out_emit_tuple tuple_emitter (uiout, NULL);
505
506 if (inf == current_inf)
507 uiout->field_string ("current", "*");
508 else
509 uiout->field_skip ("current");
510
511 uiout->field_signed ("number", inf->num);
512
513 /* Because target_pid_to_str uses the current inferior,
514 switch the inferior. */
515 switch_to_inferior_no_thread (inf);
516
517 uiout->field_string ("target-id", inferior_pid_to_str (inf->pid));
518
519 std::string conn = uiout_field_connection (inf->process_target ());
520 uiout->field_string ("connection-id", conn);
521
522 if (inf->pspace->exec_filename != nullptr)
523 uiout->field_string ("exec", inf->pspace->exec_filename.get ());
524 else
525 uiout->field_skip ("exec");
526
527 /* Print extra info that isn't really fit to always present in
528 tabular form. Currently we print the vfork parent/child
529 relationships, if any. */
530 if (inf->vfork_parent)
531 {
532 uiout->text (_("\n\tis vfork child of inferior "));
533 uiout->field_signed ("vfork-parent", inf->vfork_parent->num);
534 }
535 if (inf->vfork_child)
536 {
537 uiout->text (_("\n\tis vfork parent of inferior "));
538 uiout->field_signed ("vfork-child", inf->vfork_child->num);
539 }
540
541 uiout->text ("\n");
542 }
543 }
544
545 static void
546 detach_inferior_command (const char *args, int from_tty)
547 {
548 if (!args || !*args)
549 error (_("Requires argument (inferior id(s) to detach)"));
550
551 scoped_restore_current_thread restore_thread;
552
553 number_or_range_parser parser (args);
554 while (!parser.finished ())
555 {
556 int num = parser.get_number ();
557
558 inferior *inf = find_inferior_id (num);
559 if (inf == NULL)
560 {
561 warning (_("Inferior ID %d not known."), num);
562 continue;
563 }
564
565 if (inf->pid == 0)
566 {
567 warning (_("Inferior ID %d is not running."), num);
568 continue;
569 }
570
571 thread_info *tp = any_thread_of_inferior (inf);
572 if (tp == NULL)
573 {
574 warning (_("Inferior ID %d has no threads."), num);
575 continue;
576 }
577
578 switch_to_thread (tp);
579
580 detach_command (NULL, from_tty);
581 }
582 }
583
584 static void
585 kill_inferior_command (const char *args, int from_tty)
586 {
587 if (!args || !*args)
588 error (_("Requires argument (inferior id(s) to kill)"));
589
590 scoped_restore_current_thread restore_thread;
591
592 number_or_range_parser parser (args);
593 while (!parser.finished ())
594 {
595 int num = parser.get_number ();
596
597 inferior *inf = find_inferior_id (num);
598 if (inf == NULL)
599 {
600 warning (_("Inferior ID %d not known."), num);
601 continue;
602 }
603
604 if (inf->pid == 0)
605 {
606 warning (_("Inferior ID %d is not running."), num);
607 continue;
608 }
609
610 thread_info *tp = any_thread_of_inferior (inf);
611 if (tp == NULL)
612 {
613 warning (_("Inferior ID %d has no threads."), num);
614 continue;
615 }
616
617 switch_to_thread (tp);
618
619 target_kill ();
620 }
621
622 bfd_cache_close_all ();
623 }
624
625 /* See inferior.h. */
626
627 void
628 switch_to_inferior_no_thread (inferior *inf)
629 {
630 set_current_inferior (inf);
631 switch_to_no_thread ();
632 set_current_program_space (inf->pspace);
633 }
634
635 static void
636 inferior_command (const char *args, int from_tty)
637 {
638 struct inferior *inf;
639 int num;
640
641 if (args == nullptr)
642 {
643 inf = current_inferior ();
644 gdb_assert (inf != nullptr);
645 const char *filename = inf->pspace->exec_filename.get ();
646
647 if (filename == nullptr)
648 filename = _("<noexec>");
649
650 printf_filtered (_("[Current inferior is %d [%s] (%s)]\n"),
651 inf->num, inferior_pid_to_str (inf->pid).c_str (),
652 filename);
653 }
654 else
655 {
656 num = parse_and_eval_long (args);
657
658 inf = find_inferior_id (num);
659 if (inf == NULL)
660 error (_("Inferior ID %d not known."), num);
661
662 if (inf->pid != 0)
663 {
664 if (inf != current_inferior ())
665 {
666 thread_info *tp = any_thread_of_inferior (inf);
667 if (tp == NULL)
668 error (_("Inferior has no threads."));
669
670 switch_to_thread (tp);
671 }
672
673 gdb::observers::user_selected_context_changed.notify
674 (USER_SELECTED_INFERIOR
675 | USER_SELECTED_THREAD
676 | USER_SELECTED_FRAME);
677 }
678 else
679 {
680 switch_to_inferior_no_thread (inf);
681
682 gdb::observers::user_selected_context_changed.notify
683 (USER_SELECTED_INFERIOR);
684 }
685 }
686 }
687
688 /* Print information about currently known inferiors. */
689
690 static void
691 info_inferiors_command (const char *args, int from_tty)
692 {
693 print_inferior (current_uiout, args);
694 }
695
696 /* remove-inferior ID */
697
698 static void
699 remove_inferior_command (const char *args, int from_tty)
700 {
701 if (args == NULL || *args == '\0')
702 error (_("Requires an argument (inferior id(s) to remove)"));
703
704 number_or_range_parser parser (args);
705 while (!parser.finished ())
706 {
707 int num = parser.get_number ();
708 struct inferior *inf = find_inferior_id (num);
709
710 if (inf == NULL)
711 {
712 warning (_("Inferior ID %d not known."), num);
713 continue;
714 }
715
716 if (!inf->deletable ())
717 {
718 warning (_("Can not remove current inferior %d."), num);
719 continue;
720 }
721
722 if (inf->pid != 0)
723 {
724 warning (_("Can not remove active inferior %d."), num);
725 continue;
726 }
727
728 delete_inferior (inf);
729 }
730 }
731
732 struct inferior *
733 add_inferior_with_spaces (void)
734 {
735 struct address_space *aspace;
736 struct program_space *pspace;
737 struct inferior *inf;
738
739 /* If all inferiors share an address space on this system, this
740 doesn't really return a new address space; otherwise, it
741 really does. */
742 aspace = maybe_new_address_space ();
743 pspace = new program_space (aspace);
744 inf = add_inferior (0);
745 inf->pspace = pspace;
746 inf->aspace = pspace->aspace;
747
748 /* Setup the inferior's initial arch, based on information obtained
749 from the global "set ..." options. */
750 gdbarch_info info;
751 inf->gdbarch = gdbarch_find_by_info (info);
752 /* The "set ..." options reject invalid settings, so we should
753 always have a valid arch by now. */
754 gdb_assert (inf->gdbarch != NULL);
755
756 return inf;
757 }
758
759 /* Switch to inferior NEW_INF, a new inferior, and unless
760 NO_CONNECTION is true, push the process_stratum_target of ORG_INF
761 to NEW_INF. */
762
763 static void
764 switch_to_inferior_and_push_target (inferior *new_inf,
765 bool no_connection, inferior *org_inf)
766 {
767 process_stratum_target *proc_target = org_inf->process_target ();
768
769 /* Switch over temporarily, while reading executable and
770 symbols. */
771 switch_to_inferior_no_thread (new_inf);
772
773 /* Reuse the target for new inferior. */
774 if (!no_connection && proc_target != NULL)
775 {
776 new_inf->push_target (proc_target);
777 if (proc_target->connection_string () != NULL)
778 printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"),
779 new_inf->num,
780 proc_target->connection_number,
781 proc_target->shortname (),
782 proc_target->connection_string ());
783 else
784 printf_filtered (_("Added inferior %d on connection %d (%s)\n"),
785 new_inf->num,
786 proc_target->connection_number,
787 proc_target->shortname ());
788 }
789 else
790 printf_filtered (_("Added inferior %d\n"), new_inf->num);
791 }
792
793 /* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */
794
795 static void
796 add_inferior_command (const char *args, int from_tty)
797 {
798 int i, copies = 1;
799 gdb::unique_xmalloc_ptr<char> exec;
800 symfile_add_flags add_flags = 0;
801 bool no_connection = false;
802
803 if (from_tty)
804 add_flags |= SYMFILE_VERBOSE;
805
806 if (args)
807 {
808 gdb_argv built_argv (args);
809
810 for (char **argv = built_argv.get (); *argv != NULL; argv++)
811 {
812 if (**argv == '-')
813 {
814 if (strcmp (*argv, "-copies") == 0)
815 {
816 ++argv;
817 if (!*argv)
818 error (_("No argument to -copies"));
819 copies = parse_and_eval_long (*argv);
820 }
821 else if (strcmp (*argv, "-no-connection") == 0)
822 no_connection = true;
823 else if (strcmp (*argv, "-exec") == 0)
824 {
825 ++argv;
826 if (!*argv)
827 error (_("No argument to -exec"));
828 exec.reset (tilde_expand (*argv));
829 }
830 }
831 else
832 error (_("Invalid argument"));
833 }
834 }
835
836 inferior *orginf = current_inferior ();
837
838 scoped_restore_current_pspace_and_thread restore_pspace_thread;
839
840 for (i = 0; i < copies; ++i)
841 {
842 inferior *inf = add_inferior_with_spaces ();
843
844 switch_to_inferior_and_push_target (inf, no_connection, orginf);
845
846 if (exec != NULL)
847 {
848 exec_file_attach (exec.get (), from_tty);
849 symbol_file_add_main (exec.get (), add_flags);
850 }
851 }
852 }
853
854 /* clone-inferior [-copies N] [ID] [-no-connection] */
855
856 static void
857 clone_inferior_command (const char *args, int from_tty)
858 {
859 int i, copies = 1;
860 struct inferior *orginf = NULL;
861 bool no_connection = false;
862
863 if (args)
864 {
865 gdb_argv built_argv (args);
866
867 char **argv = built_argv.get ();
868 for (; *argv != NULL; argv++)
869 {
870 if (**argv == '-')
871 {
872 if (strcmp (*argv, "-copies") == 0)
873 {
874 ++argv;
875 if (!*argv)
876 error (_("No argument to -copies"));
877 copies = parse_and_eval_long (*argv);
878
879 if (copies < 0)
880 error (_("Invalid copies number"));
881 }
882 else if (strcmp (*argv, "-no-connection") == 0)
883 no_connection = true;
884 }
885 else
886 {
887 if (orginf == NULL)
888 {
889 int num;
890
891 /* The first non-option (-) argument specified the
892 program space ID. */
893 num = parse_and_eval_long (*argv);
894 orginf = find_inferior_id (num);
895
896 if (orginf == NULL)
897 error (_("Inferior ID %d not known."), num);
898 continue;
899 }
900 else
901 error (_("Invalid argument"));
902 }
903 }
904 }
905
906 /* If no inferior id was specified, then the user wants to clone the
907 current inferior. */
908 if (orginf == NULL)
909 orginf = current_inferior ();
910
911 scoped_restore_current_pspace_and_thread restore_pspace_thread;
912
913 for (i = 0; i < copies; ++i)
914 {
915 struct address_space *aspace;
916 struct program_space *pspace;
917 struct inferior *inf;
918
919 /* If all inferiors share an address space on this system, this
920 doesn't really return a new address space; otherwise, it
921 really does. */
922 aspace = maybe_new_address_space ();
923 pspace = new program_space (aspace);
924 inf = add_inferior (0);
925 inf->pspace = pspace;
926 inf->aspace = pspace->aspace;
927 inf->gdbarch = orginf->gdbarch;
928
929 switch_to_inferior_and_push_target (inf, no_connection, orginf);
930
931 /* If the original inferior had a user specified target
932 description, make the clone use it too. */
933 if (target_desc_info_from_user_p (inf->tdesc_info))
934 copy_inferior_target_desc_info (inf, orginf);
935
936 clone_program_space (pspace, orginf->pspace);
937
938 /* Copy properties from the original inferior to the new one. */
939 inf->set_args (orginf->args ());
940 inf->set_cwd (orginf->cwd ());
941 inf->set_tty (orginf->tty ());
942 for (const std::string &set_var : orginf->environment.user_set_env ())
943 {
944 /* set_var has the form NAME=value. Split on the first '='. */
945 const std::string::size_type pos = set_var.find ('=');
946 gdb_assert (pos != std::string::npos);
947 const std::string varname = set_var.substr (0, pos);
948 inf->environment.set
949 (varname.c_str (), orginf->environment.get (varname.c_str ()));
950 }
951 for (const std::string &unset_var
952 : orginf->environment.user_unset_env ())
953 inf->environment.unset (unset_var.c_str ());
954 }
955 }
956
957 /* Print notices when new inferiors are created and die. */
958 static void
959 show_print_inferior_events (struct ui_file *file, int from_tty,
960 struct cmd_list_element *c, const char *value)
961 {
962 fprintf_filtered (file, _("Printing of inferior events is %s.\n"), value);
963 }
964
965 /* Return a new value for the selected inferior's id. */
966
967 static struct value *
968 inferior_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
969 void *ignore)
970 {
971 struct inferior *inf = current_inferior ();
972
973 return value_from_longest (builtin_type (gdbarch)->builtin_int, inf->num);
974 }
975
976 /* Implementation of `$_inferior' variable. */
977
978 static const struct internalvar_funcs inferior_funcs =
979 {
980 inferior_id_make_value,
981 NULL,
982 NULL
983 };
984
985 \f
986
987 void
988 initialize_inferiors (void)
989 {
990 struct cmd_list_element *c = NULL;
991
992 /* There's always one inferior. Note that this function isn't an
993 automatic _initialize_foo function, since other _initialize_foo
994 routines may need to install their per-inferior data keys. We
995 can only allocate an inferior when all those modules have done
996 that. Do this after initialize_progspace, due to the
997 current_program_space reference. */
998 set_current_inferior (add_inferior_silent (0));
999 current_inferior_->pspace = current_program_space;
1000 current_inferior_->aspace = current_program_space->aspace;
1001 /* The architecture will be initialized shortly, by
1002 initialize_current_architecture. */
1003
1004 add_info ("inferiors", info_inferiors_command,
1005 _("Print a list of inferiors being managed.\n\
1006 Usage: info inferiors [ID]...\n\
1007 If IDs are specified, the list is limited to just those inferiors.\n\
1008 By default all inferiors are displayed."));
1009
1010 c = add_com ("add-inferior", no_class, add_inferior_command, _("\
1011 Add a new inferior.\n\
1012 Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\
1013 N is the optional number of inferiors to add, default is 1.\n\
1014 FILENAME is the file name of the executable to use\n\
1015 as main program.\n\
1016 By default, the new inferior inherits the current inferior's connection.\n\
1017 If -no-connection is specified, the new inferior begins with\n\
1018 no target connection yet."));
1019 set_cmd_completer (c, filename_completer);
1020
1021 add_com ("remove-inferiors", no_class, remove_inferior_command, _("\
1022 Remove inferior ID (or list of IDs).\n\
1023 Usage: remove-inferiors ID..."));
1024
1025 add_com ("clone-inferior", no_class, clone_inferior_command, _("\
1026 Clone inferior ID.\n\
1027 Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\
1028 Add N copies of inferior ID. The new inferiors have the same\n\
1029 executable loaded as the copied inferior. If -copies is not specified,\n\
1030 adds 1 copy. If ID is not specified, it is the current inferior\n\
1031 that is cloned.\n\
1032 By default, the new inferiors inherit the copied inferior's connection.\n\
1033 If -no-connection is specified, the new inferiors begin with\n\
1034 no target connection yet."));
1035
1036 add_cmd ("inferiors", class_run, detach_inferior_command, _("\
1037 Detach from inferior ID (or list of IDS).\n\
1038 Usage; detach inferiors ID..."),
1039 &detachlist);
1040
1041 add_cmd ("inferiors", class_run, kill_inferior_command, _("\
1042 Kill inferior ID (or list of IDs).\n\
1043 Usage: kill inferiors ID..."),
1044 &killlist);
1045
1046 add_cmd ("inferior", class_run, inferior_command, _("\
1047 Use this command to switch between inferiors.\n\
1048 Usage: inferior ID\n\
1049 The new inferior ID must be currently known."),
1050 &cmdlist);
1051
1052 add_setshow_boolean_cmd ("inferior-events", no_class,
1053 &print_inferior_events, _("\
1054 Set printing of inferior events (such as inferior start and exit)."), _("\
1055 Show printing of inferior events (such as inferior start and exit)."), NULL,
1056 NULL,
1057 show_print_inferior_events,
1058 &setprintlist, &showprintlist);
1059
1060 create_internalvar_type_lazy ("_inferior", &inferior_funcs, NULL);
1061 }