/* Variables that describe the inferior process running under GDB:
Where it is, why it stopped, and how to step it.
- Copyright (C) 1986-2017 Free Software Foundation, Inc.
+ Copyright (C) 1986-2018 Free Software Foundation, Inc.
This file is part of GDB.
struct target_desc_info;
struct continuation;
struct inferior;
+struct thread_info;
/* For bpstat. */
#include "breakpoint.h"
extern void discard_infcall_suspend_state (struct infcall_suspend_state *);
extern void discard_infcall_control_state (struct infcall_control_state *);
-extern struct regcache *
+extern readonly_detached_regcache *
get_infcall_suspend_state_regcache (struct infcall_suspend_state *);
extern void set_sigint_trap (void);
extern const char *get_inferior_io_terminal (void);
/* Collected pid, tid, etc. of the debugged inferior. When there's
- no inferior, ptid_get_pid (inferior_ptid) will be 0. */
+ no inferior, inferior_ptid.pid () will be 0. */
extern ptid_t inferior_ptid;
extern void child_terminal_inferior (struct target_ops *self);
+extern void child_terminal_save_inferior (struct target_ops *self);
+
extern void child_terminal_init (struct target_ops *self);
extern void child_terminal_init_with_pgrp (int pgrp);
+extern void child_pass_ctrlc (struct target_ops *self);
+
+extern void child_interrupt (struct target_ops *self);
+
/* From fork-child.c */
/* Helper function to call STARTUP_INFERIOR with PID and NUM_TRAPS.
extern void post_create_inferior (struct target_ops *, int);
-extern void attach_command (char *, int);
+extern void attach_command (const char *, int);
extern char *get_inferior_args (void);
-extern void set_inferior_args (char *);
+extern void set_inferior_args (const char *);
extern void set_inferior_args_vector (int, char **);
-extern void registers_info (char *, int);
+extern void registers_info (const char *, int);
extern void continue_1 (int all_threads);
extern void delete_longjmp_breakpoint_cleanup (void *arg);
-extern void detach_command (char *, int);
+extern void detach_command (const char *, int);
-extern void notice_new_inferior (ptid_t, int, int);
+extern void notice_new_inferior (struct thread_info *, int, int);
extern struct value *get_return_value (struct value *function,
struct type *value_type);
the target is started up with a shell. */
extern int startup_with_shell;
-/* Address at which inferior stopped. */
-
-extern CORE_ADDR stop_pc;
-
/* Nonzero if stopped due to completion of a stack dummy routine. */
extern enum stop_stack_kind stop_stack_dummy;
extern int stopped_by_random_signal;
+/* Print notices on inferior events (attach, detach, etc.), set with
+ `set print inferior-events'. */
+extern int print_inferior_events;
+
/* STEP_OVER_ALL means step over all subroutine calls.
STEP_OVER_UNDEBUGGABLE means step over calls to undebuggable functions.
STEP_OVER_NONE means don't step over any subroutine calls. */
#define ON_STACK 1
#define AT_ENTRY_POINT 4
-struct private_inferior;
+/* Base class for target-specific inferior data. */
+
+struct private_inferior
+{
+ virtual ~private_inferior () = 0;
+};
/* Inferior process specific part of `struct infcall_control_state'.
should never be freed. */
char **argv = NULL;
+ /* The current working directory that will be used when starting
+ this inferior. */
+ gdb::unique_xmalloc_ptr<char> cwd;
+
/* The name of terminal device to use for I/O. */
char *terminal = NULL;
+ /* The terminal state as set by the last target_terminal::terminal_*
+ call. */
+ target_terminal_state terminal_state = target_terminal_state::is_ours;
+
/* Environment to use for running inferior,
in format described in environ.h. */
gdb_environ environment;
bool needs_setup = false;
/* Private data used by the target vector implementation. */
- private_inferior *priv = NULL;
+ std::unique_ptr<private_inferior> priv;
/* HAS_EXIT_CODE is true if the inferior exited with an exit code.
In this case, the EXIT_CODE field is also valid. */
extern void delete_inferior (struct inferior *todel);
/* Delete an existing inferior list entry, due to inferior detaching. */
-extern void detach_inferior (int pid);
+extern void detach_inferior (inferior *inf);
-extern void exit_inferior (int pid);
+extern void exit_inferior (inferior *inf);
-extern void exit_inferior_silent (int pid);
+extern void exit_inferior_silent (inferior *inf);
extern void exit_inferior_num_silent (int num);
/* Get rid of all inferiors. */
extern void discard_all_inferiors (void);
-/* Translate the integer inferior id (GDB's homegrown id, not the system's)
- into a "pid" (which may be overloaded with extra inferior information). */
-extern int gdb_inferior_id_to_pid (int);
-
-/* Translate a target 'pid' into the integer inferior id (GDB's
- homegrown id, not the system's). */
-extern int pid_to_gdb_inferior_id (int pid);
-
-/* Boolean test for an already-known pid. */
-extern int in_inferior_list (int pid);
-
-/* Boolean test for an already-known inferior id (GDB's homegrown id,
- not the system's). */
-extern int valid_gdb_inferior_id (int num);
-
/* Search function to lookup an inferior by target 'pid'. */
extern struct inferior *find_inferior_pid (int pid);