xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/inferior.h (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1 /* Variables that describe the inferior process running under GDB:
2    Where it is, why it stopped, and how to step it.
3 
4    Copyright (C) 1986-2023 Free Software Foundation, Inc.
5 
6    This file is part of GDB.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20 
21 #if !defined (INFERIOR_H)
22 #define INFERIOR_H 1
23 
24 #include <exception>
25 #include <list>
26 
27 struct target_waitstatus;
28 class frame_info_ptr;
29 struct ui_file;
30 struct type;
31 struct gdbarch;
32 struct regcache;
33 struct ui_out;
34 struct terminal_info;
35 struct target_desc_info;
36 struct inferior;
37 struct thread_info;
38 
39 /* For bpstat.  */
40 #include "breakpoint.h"
41 
42 /* For enum gdb_signal.  */
43 #include "target.h"
44 
45 /* For struct frame_id.  */
46 #include "frame.h"
47 
48 /* For gdb_environ.  */
49 #include "gdbsupport/environ.h"
50 
51 #include "progspace.h"
52 #include "registry.h"
53 
54 #include "symfile-add-flags.h"
55 #include "gdbsupport/refcounted-object.h"
56 #include "gdbsupport/forward-scope-exit.h"
57 #include "gdbsupport/gdb_unique_ptr.h"
58 #include "gdbsupport/intrusive_list.h"
59 
60 #include "gdbsupport/common-inferior.h"
61 #include "gdbthread.h"
62 
63 #include "process-stratum-target.h"
64 #include "displaced-stepping.h"
65 
66 #include <unordered_map>
67 
68 struct infcall_suspend_state;
69 struct infcall_control_state;
70 
71 extern void restore_infcall_suspend_state (struct infcall_suspend_state *);
72 extern void restore_infcall_control_state (struct infcall_control_state *);
73 
74 /* A deleter for infcall_suspend_state that calls
75    restore_infcall_suspend_state.  */
76 struct infcall_suspend_state_deleter
77 {
78   void operator() (struct infcall_suspend_state *state) const
79   {
80     try
81       {
82 	restore_infcall_suspend_state (state);
83       }
84     catch (const gdb_exception_error &e)
85       {
86 	/* If we are restoring the inferior state due to an exception,
87 	   some error message will be printed.  So, only warn the user
88 	   when we cannot restore during normal execution.  */
89 	bool unwinding;
90 #if __cpp_lib_uncaught_exceptions
91 	unwinding = std::uncaught_exceptions () > 0;
92 #else
93 	unwinding = std::uncaught_exception ();
94 #endif
95 	if (!unwinding)
96 	  warning (_("Failed to restore inferior state: %s"), e.what ());
97       }
98   }
99 };
100 
101 /* A unique_ptr specialization for infcall_suspend_state.  */
102 typedef std::unique_ptr<infcall_suspend_state, infcall_suspend_state_deleter>
103     infcall_suspend_state_up;
104 
105 extern infcall_suspend_state_up save_infcall_suspend_state ();
106 
107 /* A deleter for infcall_control_state that calls
108    restore_infcall_control_state.  */
109 struct infcall_control_state_deleter
110 {
111   void operator() (struct infcall_control_state *state) const
112   {
113     restore_infcall_control_state (state);
114   }
115 };
116 
117 /* A unique_ptr specialization for infcall_control_state.  */
118 typedef std::unique_ptr<infcall_control_state, infcall_control_state_deleter>
119     infcall_control_state_up;
120 
121 extern infcall_control_state_up save_infcall_control_state ();
122 
123 extern void discard_infcall_suspend_state (struct infcall_suspend_state *);
124 extern void discard_infcall_control_state (struct infcall_control_state *);
125 
126 extern readonly_detached_regcache *
127   get_infcall_suspend_state_regcache (struct infcall_suspend_state *);
128 
129 extern void set_sigint_trap (void);
130 
131 extern void clear_sigint_trap (void);
132 
133 /* Collected pid, tid, etc. of the debugged inferior.  When there's
134    no inferior, inferior_ptid.pid () will be 0.  */
135 
136 extern ptid_t inferior_ptid;
137 
138 extern void generic_mourn_inferior (void);
139 
140 extern CORE_ADDR unsigned_pointer_to_address (struct gdbarch *gdbarch,
141 					      struct type *type,
142 					      const gdb_byte *buf);
143 extern void unsigned_address_to_pointer (struct gdbarch *gdbarch,
144 					 struct type *type, gdb_byte *buf,
145 					 CORE_ADDR addr);
146 extern CORE_ADDR signed_pointer_to_address (struct gdbarch *gdbarch,
147 					    struct type *type,
148 					    const gdb_byte *buf);
149 extern void address_to_signed_pointer (struct gdbarch *gdbarch,
150 				       struct type *type, gdb_byte *buf,
151 				       CORE_ADDR addr);
152 
153 extern void reopen_exec_file (void);
154 
155 /* From misc files */
156 
157 extern void default_print_registers_info (struct gdbarch *gdbarch,
158 					  struct ui_file *file,
159 					  frame_info_ptr frame,
160 					  int regnum, int all);
161 
162 /* Default implementation of gdbarch_print_float_info.  Print
163    the values of all floating point registers.  */
164 
165 extern void default_print_float_info (struct gdbarch *gdbarch,
166 				      struct ui_file *file,
167 				      frame_info_ptr frame,
168 				      const char *args);
169 
170 /* Try to determine whether TTY is GDB's input terminal.  Returns
171    TRIBOOL_UNKNOWN if we can't tell.  */
172 
173 extern tribool is_gdb_terminal (const char *tty);
174 
175 /* Helper for sharing_input_terminal.  Try to determine whether pid
176    PID is using the same TTY for input as GDB is.  Returns
177    TRIBOOL_UNKNOWN if we can't tell.  */
178 
179 extern tribool sharing_input_terminal (int pid);
180 
181 /* The type of the function that is called when SIGINT is handled.  */
182 
183 typedef void c_c_handler_ftype (int);
184 
185 /* Install a new SIGINT handler in a host-dependent way.  The previous
186    handler is returned.  It is fine to pass SIG_IGN for FN, but not
187    SIG_DFL.  */
188 
189 extern c_c_handler_ftype *install_sigint_handler (c_c_handler_ftype *fn);
190 
191 extern void child_terminal_info (struct target_ops *self, const char *, int);
192 
193 extern void child_terminal_ours (struct target_ops *self);
194 
195 extern void child_terminal_ours_for_output (struct target_ops *self);
196 
197 extern void child_terminal_inferior (struct target_ops *self);
198 
199 extern void child_terminal_save_inferior (struct target_ops *self);
200 
201 extern void child_terminal_init (struct target_ops *self);
202 
203 extern void child_terminal_init_with_pgrp (int pgrp);
204 
205 extern void child_pass_ctrlc (struct target_ops *self);
206 
207 extern void child_interrupt (struct target_ops *self);
208 
209 /* From fork-child.c */
210 
211 /* Helper function to call STARTUP_INFERIOR with PID and NUM_TRAPS.
212    This function already calls set_executing.  Return the ptid_t from
213    STARTUP_INFERIOR.  */
214 extern ptid_t gdb_startup_inferior (pid_t pid, int num_traps);
215 
216 /* From infcmd.c */
217 
218 /* Initial inferior setup.  Determines the exec file is not yet known,
219    takes any necessary post-attaching actions, fetches the target
220    description and syncs the shared library list.  */
221 
222 extern void setup_inferior (int from_tty);
223 
224 extern void post_create_inferior (int from_tty);
225 
226 extern void attach_command (const char *, int);
227 
228 extern void set_inferior_args_vector (int, char **);
229 
230 extern void registers_info (const char *, int);
231 
232 extern void continue_1 (int all_threads);
233 
234 extern void interrupt_target_1 (bool all_threads);
235 
236 using delete_longjmp_breakpoint_cleanup
237   = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint);
238 
239 extern void detach_command (const char *, int);
240 
241 extern void notice_new_inferior (struct thread_info *, bool, int);
242 
243 /* Return the value of the result of a function at the end of a 'finish'
244    command/BP.  If the result's value cannot be retrieved, return NULL.
245 
246    FUNC_SYMBOL is the symbol of the function being returned from.  FUNCTION is
247    a value containing the address of the function.  */
248 
249 extern struct value *get_return_value (struct symbol *func_symbol,
250 				       struct value *function);
251 
252 /* Prepare for execution command.  TARGET is the target that will run
253    the command.  BACKGROUND determines whether this is a foreground
254    (synchronous) or background (asynchronous) command.  */
255 
256 extern void prepare_execution_command (struct target_ops *target,
257 				       int background);
258 
259 /* Nonzero if stopped due to completion of a stack dummy routine.  */
260 
261 extern enum stop_stack_kind stop_stack_dummy;
262 
263 /* Nonzero if program stopped due to a random (unexpected) signal in
264    inferior process.  */
265 
266 extern int stopped_by_random_signal;
267 
268 /* Print notices on inferior events (attach, detach, etc.), set with
269    `set print inferior-events'.  */
270 extern bool print_inferior_events;
271 
272 /* Anything but NO_STOP_QUIETLY means we expect a trap and the caller
273    will handle it themselves.  STOP_QUIETLY is used when running in
274    the shell before the child program has been exec'd and when running
275    through shared library loading.  STOP_QUIETLY_REMOTE is used when
276    setting up a remote connection; it is like STOP_QUIETLY_NO_SIGSTOP
277    except that there is no need to hide a signal.  */
278 
279 /* STOP_QUIETLY_NO_SIGSTOP is used to handle a tricky situation with attach.
280    When doing an attach, the kernel stops the debuggee with a SIGSTOP.
281    On newer GNU/Linux kernels (>= 2.5.61) the handling of SIGSTOP for
282    a ptraced process has changed.  Earlier versions of the kernel
283    would ignore these SIGSTOPs, while now SIGSTOP is treated like any
284    other signal, i.e. it is not muffled.
285 
286    If the gdb user does a 'continue' after the 'attach', gdb passes
287    the global variable stop_signal (which stores the signal from the
288    attach, SIGSTOP) to the ptrace(PTRACE_CONT,...)  call.  This is
289    problematic, because the kernel doesn't ignore such SIGSTOP
290    now.  I.e. it is reported back to gdb, which in turn presents it
291    back to the user.
292 
293    To avoid the problem, we use STOP_QUIETLY_NO_SIGSTOP, which allows
294    gdb to clear the value of stop_signal after the attach, so that it
295    is not passed back down to the kernel.  */
296 
297 enum stop_kind
298   {
299     NO_STOP_QUIETLY = 0,
300     STOP_QUIETLY,
301     STOP_QUIETLY_REMOTE,
302     STOP_QUIETLY_NO_SIGSTOP
303   };
304 
305 
306 
307 /* Base class for target-specific inferior data.  */
308 
309 struct private_inferior
310 {
311   virtual ~private_inferior () = 0;
312 };
313 
314 /* Inferior process specific part of `struct infcall_control_state'.
315 
316    Inferior thread counterpart is `struct thread_control_state'.  */
317 
318 struct inferior_control_state
319 {
320   inferior_control_state ()
321     : stop_soon (NO_STOP_QUIETLY)
322   {
323   }
324 
325   explicit inferior_control_state (enum stop_kind when)
326     : stop_soon (when)
327   {
328   }
329 
330   /* See the definition of stop_kind above.  */
331   enum stop_kind stop_soon;
332 };
333 
334 /* Return a pointer to the current inferior.  */
335 extern inferior *current_inferior ();
336 
337 extern void set_current_inferior (inferior *);
338 
339 /* Switch inferior (and program space) to INF, and switch to no thread
340    selected.  */
341 extern void switch_to_inferior_no_thread (inferior *inf);
342 
343 /* GDB represents the state of each program execution with an object
344    called an inferior.  An inferior typically corresponds to a process
345    but is more general and applies also to targets that do not have a
346    notion of processes.  Each run of an executable creates a new
347    inferior, as does each attachment to an existing process.
348    Inferiors have unique internal identifiers that are different from
349    target process ids.  Each inferior may in turn have multiple
350    threads running in it.
351 
352    Inferiors are intrusively refcounted objects.  Unlike thread
353    objects, being the user-selected inferior is considered a strong
354    reference and is thus accounted for in the inferior object's
355    refcount (see set_current_inferior).  When GDB needs to remember
356    the selected inferior to later restore it, GDB temporarily bumps
357    the inferior object's refcount, to prevent something deleting the
358    inferior object before reverting back (e.g., due to a
359    "remove-inferiors" command (see
360    scoped_restore_current_inferior).  All other inferior
361    references are considered weak references.  Inferiors are always
362    listed exactly once in the inferior list, so placing an inferior in
363    the inferior list is an implicit, not counted strong reference.  */
364 
365 class inferior : public refcounted_object,
366 		 public intrusive_list_node<inferior>
367 {
368 public:
369   explicit inferior (int pid);
370   ~inferior ();
371 
372   /* Returns true if we can delete this inferior.  */
373   bool deletable () const { return refcount () == 0; }
374 
375   /* Push T in this inferior's target stack.  */
376   void push_target (struct target_ops *t)
377   { m_target_stack.push (t); }
378 
379   /* An overload that deletes the target on failure.  */
380   void push_target (target_ops_up &&t)
381   {
382     m_target_stack.push (t.get ());
383     t.release ();
384   }
385 
386   /* Unpush T from this inferior's target stack.  */
387   int unpush_target (struct target_ops *t);
388 
389   /* Returns true if T is pushed in this inferior's target stack.  */
390   bool target_is_pushed (const target_ops *t) const
391   { return m_target_stack.is_pushed (t); }
392 
393   /* Find the target beneath T in this inferior's target stack.  */
394   target_ops *find_target_beneath (const target_ops *t)
395   { return m_target_stack.find_beneath (t); }
396 
397   /* Return the target at the top of this inferior's target stack.  */
398   target_ops *top_target ()
399   { return m_target_stack.top (); }
400 
401   /* Unpush all targets except the dummy target from m_target_stack.  As
402      targets are removed from m_target_stack their reference count is
403      decremented, which may cause a target to close.  */
404   void pop_all_targets ()
405   { pop_all_targets_above (dummy_stratum); }
406 
407   /* Unpush all targets above STRATUM from m_target_stack.  As targets are
408      removed from m_target_stack their reference count is decremented,
409      which may cause a target to close.  */
410   void pop_all_targets_above (enum strata stratum);
411 
412   /* Unpush all targets at and above STRATUM from m_target_stack.  As
413      targets are removed from m_target_stack their reference count is
414      decremented, which may cause a target to close.  */
415   void pop_all_targets_at_and_above (enum strata stratum);
416 
417   /* Return the target at process_stratum level in this inferior's
418      target stack.  */
419   struct process_stratum_target *process_target ()
420   { return (process_stratum_target *) m_target_stack.at (process_stratum); }
421 
422   /* Return the target at STRATUM in this inferior's target stack.  */
423   target_ops *target_at (enum strata stratum)
424   { return m_target_stack.at (stratum); }
425 
426   bool has_execution ()
427   { return target_has_execution (this); }
428 
429   /* This inferior's thread list, sorted by creation order.  */
430   intrusive_list<thread_info> thread_list;
431 
432   /* A map of ptid_t to thread_info*, for average O(1) ptid_t lookup.
433      Exited threads do not appear in the map.  */
434   std::unordered_map<ptid_t, thread_info *, hash_ptid> ptid_thread_map;
435 
436   /* Returns a range adapter covering the inferior's threads,
437      including exited threads.  Used like this:
438 
439        for (thread_info *thr : inf->threads ())
440 	 { .... }
441   */
442   inf_threads_range threads ()
443   { return inf_threads_range (this->thread_list.begin ()); }
444 
445   /* Returns a range adapter covering the inferior's non-exited
446      threads.  Used like this:
447 
448        for (thread_info *thr : inf->non_exited_threads ())
449 	 { .... }
450   */
451   inf_non_exited_threads_range non_exited_threads ()
452   { return inf_non_exited_threads_range (this->thread_list.begin ()); }
453 
454   /* Like inferior::threads(), but returns a range adapter that can be
455      used with range-for, safely.  I.e., it is safe to delete the
456      currently-iterated thread, like this:
457 
458      for (thread_info *t : inf->threads_safe ())
459        if (some_condition ())
460 	 delete f;
461   */
462   inline safe_inf_threads_range threads_safe ()
463   { return safe_inf_threads_range (this->thread_list.begin ()); }
464 
465   /* Delete all threads in the thread list.  If SILENT, exit threads
466      silently.  */
467   void clear_thread_list (bool silent);
468 
469   /* Continuations-related methods.  A continuation is an std::function
470      to be called to finish the execution of a command when running
471      GDB asynchronously.  A continuation is executed after any thread
472      of this inferior stops.  Continuations are used by the attach
473      command and the remote target when a new inferior is detected.  */
474   void add_continuation (std::function<void ()> &&cont);
475   void do_all_continuations ();
476 
477   /* Set/get file name for default use for standard in/out in the inferior.
478 
479      On Unix systems, we try to make TERMINAL_NAME the inferior's controlling
480      terminal.
481 
482      If TERMINAL_NAME is the empty string, then the inferior inherits GDB's
483      terminal (or GDBserver's if spawning a remote process).  */
484   void set_tty (std::string terminal_name);
485   const std::string &tty ();
486 
487   /* Set the argument string to use when running this inferior.
488 
489      An empty string can be used to represent "no arguments".  */
490   void set_args (std::string args)
491   {
492     m_args = std::move (args);
493   };
494 
495   /* Get the argument string to use when running this inferior.
496 
497      No arguments is represented by an empty string.  */
498   const std::string &args () const
499   {
500     return m_args;
501   }
502 
503   /* Set the inferior current working directory.
504 
505      If CWD is empty, unset the directory.  */
506   void set_cwd (std::string cwd)
507   {
508     m_cwd = std::move (cwd);
509   }
510 
511   /* Get the inferior current working directory.
512 
513      Return an empty string if the current working directory is not
514      specified.  */
515   const std::string &cwd () const
516   {
517     return m_cwd;
518   }
519 
520   /* Convenient handle (GDB inferior id).  Unique across all
521      inferiors.  */
522   int num = 0;
523 
524   /* Actual target inferior id, usually, a process id.  This matches
525      the ptid_t.pid member of threads of this inferior.  */
526   int pid = 0;
527   /* True if the PID was actually faked by GDB.  */
528   bool fake_pid_p = false;
529 
530   /* The highest thread number this inferior ever had.  */
531   int highest_thread_num = 0;
532 
533   /* State of GDB control of inferior process execution.
534      See `struct inferior_control_state'.  */
535   inferior_control_state control;
536 
537   /* True if this was an auto-created inferior, e.g. created from
538      following a fork; false, if this inferior was manually added by
539      the user, and we should not attempt to prune it
540      automatically.  */
541   bool removable = false;
542 
543   /* The address space bound to this inferior.  */
544   struct address_space *aspace = NULL;
545 
546   /* The program space bound to this inferior.  */
547   struct program_space *pspace = NULL;
548 
549   /* The terminal state as set by the last target_terminal::terminal_*
550      call.  */
551   target_terminal_state terminal_state = target_terminal_state::is_ours;
552 
553   /* Environment to use for running inferior,
554      in format described in environ.h.  */
555   gdb_environ environment;
556 
557   /* True if this child process was attached rather than forked.  */
558   bool attach_flag = false;
559 
560   /* If this inferior is a vfork child, then this is the pointer to
561      its vfork parent, if GDB is still attached to it.  */
562   inferior *vfork_parent = NULL;
563 
564   /* If this process is a vfork parent, this is the pointer to the
565      child.  Since a vfork parent is left frozen by the kernel until
566      the child execs or exits, a process can only have one vfork child
567      at a given time.  */
568   inferior *vfork_child = NULL;
569 
570   /* True if this inferior should be detached when it's vfork sibling
571      exits or execs.  */
572   bool pending_detach = false;
573 
574   /* If non-nullptr, points to a thread that called vfork and is now waiting
575      for a vfork child not under our control to be done with the shared memory
576      region, either by exiting or execing.  */
577   thread_info *thread_waiting_for_vfork_done = nullptr;
578 
579   /* True if we're in the process of detaching from this inferior.  */
580   bool detaching = false;
581 
582   /* True if setup_inferior wasn't called for this inferior yet.
583      Until that is done, we must not access inferior memory or
584      registers, as we haven't determined the target
585      architecture/description.  */
586   bool needs_setup = false;
587 
588   /* True if the inferior is starting up (inside startup_inferior),
589      and we're nursing it along (through the shell) until it is ready
590      to execute its first instruction.  Until that is done, we must
591      not access inferior memory or registers, as we haven't determined
592      the target architecture/description.  */
593   bool starting_up = false;
594 
595   /* True when we are reading the library list of the inferior during an
596      attach or handling a fork child.  */
597   bool in_initial_library_scan = false;
598 
599   /* Private data used by the target vector implementation.  */
600   std::unique_ptr<private_inferior> priv;
601 
602   /* HAS_EXIT_CODE is true if the inferior exited with an exit code.
603      In this case, the EXIT_CODE field is also valid.  */
604   bool has_exit_code = false;
605   LONGEST exit_code = 0;
606 
607   /* Default flags to pass to the symbol reading functions.  These are
608      used whenever a new objfile is created.  */
609   symfile_add_flags symfile_flags = 0;
610 
611   /* Info about an inferior's target description (if it's fetched; the
612      user supplied description's filename, if any; etc.).  */
613   target_desc_info *tdesc_info = NULL;
614 
615   /* The architecture associated with the inferior through the
616      connection to the target.
617 
618      The architecture vector provides some information that is really
619      a property of the inferior, accessed through a particular target:
620      ptrace operations; the layout of certain RSP packets; the
621      solib_ops vector; etc.  To differentiate architecture accesses to
622      per-inferior/target properties from
623      per-thread/per-frame/per-objfile properties, accesses to
624      per-inferior/target properties should be made through
625      this gdbarch.  */
626   struct gdbarch *gdbarch = NULL;
627 
628   /* Data related to displaced stepping.  */
629   displaced_step_inferior_state displaced_step_state;
630 
631   /* Per inferior data-pointers required by other GDB modules.  */
632   registry<inferior> registry_fields;
633 
634 private:
635 
636   /* Unpush TARGET and assert that it worked.  */
637   void unpush_target_and_assert (struct target_ops *target);
638 
639   /* The inferior's target stack.  */
640   target_stack m_target_stack;
641 
642   /* The name of terminal device to use for I/O.  */
643   std::string m_terminal;
644 
645   /* The list of continuations.  */
646   std::list<std::function<void ()>> m_continuations;
647 
648   /* The arguments string to use when running.  */
649   std::string m_args;
650 
651   /* The current working directory that will be used when starting
652      this inferior.  */
653   std::string m_cwd;
654 };
655 
656 /* Add an inferior to the inferior list, print a message that a new
657    inferior is found, and return the pointer to the new inferior.
658    Caller may use this pointer to initialize the private inferior
659    data.  */
660 extern struct inferior *add_inferior (int pid);
661 
662 /* Same as add_inferior, but don't print new inferior notifications to
663    the CLI.  */
664 extern struct inferior *add_inferior_silent (int pid);
665 
666 extern void delete_inferior (struct inferior *todel);
667 
668 /* Delete an existing inferior list entry, due to inferior detaching.  */
669 extern void detach_inferior (inferior *inf);
670 
671 extern void exit_inferior (inferior *inf);
672 
673 extern void exit_inferior_silent (inferior *inf);
674 
675 extern void exit_inferior_num_silent (int num);
676 
677 extern void inferior_appeared (struct inferior *inf, int pid);
678 
679 /* Search function to lookup an inferior of TARG by target 'pid'.  */
680 extern struct inferior *find_inferior_pid (process_stratum_target *targ,
681 					   int pid);
682 
683 /* Search function to lookup an inferior of TARG whose pid is equal to
684    'ptid.pid'. */
685 extern struct inferior *find_inferior_ptid (process_stratum_target *targ,
686 					    ptid_t ptid);
687 
688 /* Search function to lookup an inferior by GDB 'num'.  */
689 extern struct inferior *find_inferior_id (int num);
690 
691 /* Find an inferior bound to PSPACE, giving preference to the current
692    inferior.  */
693 extern struct inferior *
694   find_inferior_for_program_space (struct program_space *pspace);
695 
696 /* Returns true if the inferior list is not empty.  */
697 extern int have_inferiors (void);
698 
699 /* Returns the number of live inferiors running on PROC_TARGET (real
700    live processes with execution).  */
701 extern int number_of_live_inferiors (process_stratum_target *proc_target);
702 
703 /* Returns true if there are any live inferiors in the inferior list
704    (not cores, not executables, real live processes).  */
705 extern int have_live_inferiors (void);
706 
707 /* Save/restore the current inferior.  */
708 
709 class scoped_restore_current_inferior
710 {
711 public:
712   scoped_restore_current_inferior ()
713     : m_saved_inf (current_inferior ())
714   {}
715 
716   ~scoped_restore_current_inferior ()
717   { set_current_inferior (m_saved_inf); }
718 
719   DISABLE_COPY_AND_ASSIGN (scoped_restore_current_inferior);
720 
721 private:
722   inferior *m_saved_inf;
723 };
724 
725 
726 /* Traverse all inferiors.  */
727 
728 extern intrusive_list<inferior> inferior_list;
729 
730 /* Pull in the internals of the inferiors ranges and iterators.  Must
731    be done after struct inferior is defined.  */
732 #include "inferior-iter.h"
733 
734 /* Return a range that can be used to walk over all inferiors
735    inferiors, with range-for, safely.  I.e., it is safe to delete the
736    currently-iterated inferior.  When combined with range-for, this
737    allow convenient patterns like this:
738 
739      for (inferior *inf : all_inferiors_safe ())
740        if (some_condition ())
741 	 delete inf;
742 */
743 
744 inline all_inferiors_safe_range
745 all_inferiors_safe ()
746 {
747   return all_inferiors_safe_range (nullptr, inferior_list);
748 }
749 
750 /* Returns a range representing all inferiors, suitable to use with
751    range-for, like this:
752 
753    for (inferior *inf : all_inferiors ())
754      [...]
755 */
756 
757 inline all_inferiors_range
758 all_inferiors (process_stratum_target *proc_target = nullptr)
759 {
760   return all_inferiors_range (proc_target, inferior_list);
761 }
762 
763 /* Return a range that can be used to walk over all inferiors with PID
764    not zero, with range-for.  */
765 
766 inline all_non_exited_inferiors_range
767 all_non_exited_inferiors (process_stratum_target *proc_target = nullptr)
768 {
769   return all_non_exited_inferiors_range (proc_target, inferior_list);
770 }
771 
772 /* Prune away automatically added inferiors that aren't required
773    anymore.  */
774 extern void prune_inferiors (void);
775 
776 extern int number_of_inferiors (void);
777 
778 extern struct inferior *add_inferior_with_spaces (void);
779 
780 /* Print the current selected inferior.  */
781 extern void print_selected_inferior (struct ui_out *uiout);
782 
783 /* Switch to inferior NEW_INF, a new inferior, and unless
784    NO_CONNECTION is true, push the process_stratum_target of ORG_INF
785    to NEW_INF.  */
786 
787 extern void switch_to_inferior_and_push_target
788   (inferior *new_inf, bool no_connection, inferior *org_inf);
789 
790 #endif /* !defined (INFERIOR_H) */
791