/* 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 ui_out;
struct terminal_info;
struct target_desc_info;
-struct gdb_environ;
struct continuation;
struct inferior;
/* For struct frame_id. */
#include "frame.h"
+/* For gdb_environ. */
+#include "environ.h"
+
#include "progspace.h"
#include "registry.h"
#include "symfile-add-flags.h"
#include "common/refcounted-object.h"
+#include "common-inferior.h"
+
struct infcall_suspend_state;
struct infcall_control_state;
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 *);
-/* Save value of inferior_ptid so that it may be restored by
- a later call to do_cleanups(). Returns the struct cleanup
- pointer needed for later doing the cleanup. */
-extern struct cleanup * save_inferior_ptid (void);
-
extern void set_sigint_trap (void);
extern void clear_sigint_trap (void);
extern void child_terminal_info (struct target_ops *self, const char *, int);
-extern void term_info (char *, int);
+extern void info_terminal_command (char *, int);
extern void child_terminal_ours (struct target_ops *self);
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);
-/* From fork-child.c */
-
-/* Report an error that happened when starting to trace the inferior
- (i.e., when the "traceme_fun" callback is called on fork_inferior)
- and bail out. This function does not return. */
-
-extern void trace_start_error (const char *fmt, ...)
- ATTRIBUTE_NORETURN;
-
-/* Like "trace_start_error", but the error message is constructed by
- combining STRING with the system error message for errno. This
- function does not return. */
+extern void child_pass_ctrlc (struct target_ops *self);
-extern void trace_start_error_with_name (const char *string)
- ATTRIBUTE_NORETURN;
-
-extern int fork_inferior (const char *, const std::string &, char **,
- void (*)(void),
- void (*)(int), void (*)(void), char *,
- void (*)(const char *,
- char * const *, char * const *));
+extern void child_interrupt (struct target_ops *self);
+/* From fork-child.c */
-extern void startup_inferior (int);
+/* Helper function to call STARTUP_INFERIOR with PID and NUM_TRAPS.
+ This function already calls set_executing. Return the ptid_t from
+ STARTUP_INFERIOR. */
+extern ptid_t gdb_startup_inferior (pid_t pid, int num_traps);
extern char *construct_inferior_arguments (int, char **);
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 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
-/* Number of traps that happen between exec'ing the shell to run an
- inferior and when we finally get to the inferior code, not counting
- the exec for the shell. This is 1 on all supported
- implementations. */
-#define START_INFERIOR_TRAPS_EXPECTED 1
+/* Base class for target-specific inferior data. */
-struct private_inferior;
+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 = NULL;
+ gdb_environ environment;
/* True if this child process was attached rather than forked. */
bool attach_flag = false;
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 (inferior *inf);
+
+/* Same as the above, but with the inferior specified by PID. */
extern void detach_inferior (int pid);
extern void exit_inferior (int pid);
~scoped_restore_current_inferior ()
{ set_current_inferior (m_saved_inf); }
- /* Disable copy. */
- scoped_restore_current_inferior
- (const scoped_restore_current_inferior &) = delete;
- void operator=
- (const scoped_restore_current_inferior &) = delete;
+ DISABLE_COPY_AND_ASSIGN (scoped_restore_current_inferior);
private:
inferior *m_saved_inf;