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