/* Variables that describe the inferior process running under GDB:
Where it is, why it stopped, and how to step it.
- Copyright (C) 1986-2014 Free Software Foundation, Inc.
+ Copyright (C) 1986-2016 Free Software Foundation, Inc.
This file is part of GDB.
struct terminal_info;
struct target_desc_info;
-#include "ptid.h"
-
/* For bpstat. */
#include "breakpoint.h"
extern ptid_t inferior_ptid;
-/* Are we simulating synchronous execution? This is used in async gdb
- to implement the 'run', 'continue' etc commands, which will not
- redisplay the prompt until the execution is actually over. */
-extern int sync_execution;
-
-/* Inferior environment. */
-
-extern void clear_proceed_status (void);
-
-extern void proceed (CORE_ADDR, enum gdb_signal, int);
-
-extern int sched_multi;
-
-/* When set, stop the 'step' command if we enter a function which has
- no line number information. The normal behavior is that we step
- over such function. */
-extern int step_stop_if_no_debug;
-
-/* If set, the inferior should be controlled in non-stop mode. In
- this mode, each thread is controlled independently. Execution
- commands apply only to the selected thread by default, and stop
- events stop only the thread that had the event -- the other threads
- are kept running freely. */
-extern int non_stop;
-
-/* When set (default), the target should attempt to disable the operating
- system's address space randomization feature when starting an inferior. */
-extern int disable_randomization;
-
extern void generic_mourn_inferior (void);
extern CORE_ADDR unsigned_pointer_to_address (struct gdbarch *gdbarch,
struct type *type, gdb_byte *buf,
CORE_ADDR addr);
-extern void wait_for_inferior (void);
-
-extern void prepare_for_detach (void);
-
-extern void fetch_inferior_event (void *);
-
-extern void init_wait_for_inferior (void);
-
extern void reopen_exec_file (void);
-/* The `resume' routine should only be called in special circumstances.
- Normally, use `proceed', which handles a lot of bookkeeping. */
-
-extern void resume (int, enum gdb_signal);
-
-extern ptid_t user_visible_resume_ptid (int step);
-
-extern void insert_step_resume_breakpoint_at_sal (struct gdbarch *,
- struct symtab_and_line ,
- struct frame_id);
-
/* From misc files */
extern void default_print_registers_info (struct gdbarch *gdbarch,
struct frame_info *frame,
int regnum, int all);
+/* Default implementation of gdbarch_print_float_info. Print
+ the values of all floating point registers. */
+
+extern void default_print_float_info (struct gdbarch *gdbarch,
+ struct ui_file *file,
+ struct frame_info *frame,
+ const char *args);
+
extern void child_terminal_info (struct target_ops *self, const char *, int);
extern void term_info (char *, int);
-extern void child_terminal_save_ours (struct target_ops *self);
-
extern void child_terminal_ours (struct target_ops *self);
extern void child_terminal_ours_for_output (struct target_ops *self);
extern char *construct_inferior_arguments (int, char **);
-/* From infrun.c */
-
-extern unsigned int debug_infrun;
-
-extern int stop_on_solib_events;
-
-extern void start_remote (int from_tty);
-
-extern void normal_stop (void);
-
-extern void print_stop_event (struct target_waitstatus *ws);
-
-extern int signal_stop_state (int);
-
-extern int signal_print_state (int);
-
-extern int signal_pass_state (int);
-
-extern int signal_stop_update (int, int);
-
-extern int signal_print_update (int, int);
-
-extern int signal_pass_update (int, int);
-
-extern void get_last_target_status(ptid_t *ptid,
- struct target_waitstatus *status);
-
-extern void follow_inferior_reset_breakpoints (void);
-
-void set_step_info (struct frame_info *frame, struct symtab_and_line sal);
-
-/* Clear the convenience variables associated with the exit of the
- inferior. Currently, those variables are $_exitcode and
- $_exitsignal. */
+/* From infcmd.c */
-extern void clear_exit_convenience_vars (void);
+/* Initial inferior setup. Determines the exec file is not yet known,
+ takes any necessary post-attaching actions, fetches the target
+ description and syncs the shared library list. */
-/* From infcmd.c */
+extern void setup_inferior (int from_tty);
extern void post_create_inferior (struct target_ops *, int);
extern void notice_new_inferior (ptid_t, int, int);
extern struct value *get_return_value (struct value *function,
- struct type *value_type);
+ struct type *value_type);
+
+/* Prepare for execution command. TARGET is the target that will run
+ the command. BACKGROUND determines whether this is a foreground
+ (synchronous) or background (asynchronous) command. */
+
+extern void prepare_execution_command (struct target_ops *target,
+ int background);
/* Whether to start up the debuggee under a shell.
setting up a remote connection; it is like STOP_QUIETLY_NO_SIGSTOP
except that there is no need to hide a signal. */
-/* It is also used after attach, due to attaching to a process. This
- is a bit trickier. When doing an attach, the kernel stops the
- debuggee with a SIGSTOP. On newer GNU/Linux kernels (>= 2.5.61)
- the handling of SIGSTOP for a ptraced process has changed. Earlier
- versions of the kernel would ignore these SIGSTOPs, while now
- SIGSTOP is treated like any other signal, i.e. it is not muffled.
-
+/* STOP_QUIETLY_NO_SIGSTOP is used to handle a tricky situation with attach.
+ When doing an attach, the kernel stops the debuggee with a SIGSTOP.
+ On newer GNU/Linux kernels (>= 2.5.61) the handling of SIGSTOP for
+ a ptraced process has changed. Earlier versions of the kernel
+ would ignore these SIGSTOPs, while now SIGSTOP is treated like any
+ other signal, i.e. it is not muffled.
+
If the gdb user does a 'continue' after the 'attach', gdb passes
the global variable stop_signal (which stores the signal from the
attach, SIGSTOP) to the ptrace(PTRACE_CONT,...) call. This is
problematic, because the kernel doesn't ignore such SIGSTOP
now. I.e. it is reported back to gdb, which in turn presents it
back to the user.
-
+
To avoid the problem, we use STOP_QUIETLY_NO_SIGSTOP, which allows
gdb to clear the value of stop_signal after the attach, so that it
is not passed back down to the kernel. */
STOP_QUIETLY_NO_SIGSTOP
};
-/* Reverse execution. */
-enum exec_direction_kind
- {
- EXEC_FORWARD,
- EXEC_REVERSE
- };
-
-/* The current execution direction. This should only be set to enum
- exec_direction_kind values. It is only an int to make it
- compatible with make_cleanup_restore_integer. */
-extern int execution_direction;
-
-/* Save register contents here when executing a "finish" command or are
- about to pop a stack dummy frame, if-and-only-if proceed_to_finish is set.
- Thus this contains the return value from the called function (assuming
- values are returned in a register). */
-
-extern struct regcache *stop_registers;
-
-/* True if we are debugging displaced stepping. */
-extern int debug_displaced;
-
-/* Dump LEN bytes at BUF in hex to FILE, followed by a newline. */
-void displaced_step_dump_bytes (struct ui_file *file,
- const gdb_byte *buf, size_t len);
-
-struct displaced_step_closure *get_displaced_step_closure_by_addr (CORE_ADDR addr);
\f
/* Possible values for gdbarch_call_dummy_location. */
#define ON_STACK 1
/* 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 most implementations.
- Overridden in nm.h files. */
-#if !defined(START_INFERIOR_TRAPS_EXPECTED)
+ the exec for the shell. This is 1 on all supported
+ implementations. */
#define START_INFERIOR_TRAPS_EXPECTED 1
-#endif
struct private_inferior;
enum stop_kind stop_soon;
};
-/* Inferior process specific part of `struct infcall_suspend_state'.
-
- Inferior thread counterpart is `struct thread_suspend_state'. */
-
-#if 0 /* Currently unused and empty structures are not valid C. */
-struct inferior_suspend_state
-{
-};
-#endif
-
/* GDB represents the state of each program execution with an object
called an inferior. An inferior typically corresponds to a process
but is more general and applies also to targets that do not have a
/* True if the PID was actually faked by GDB. */
int fake_pid_p;
+ /* The highest thread number this inferior ever had. */
+ int highest_thread_num;
+
/* State of GDB control of inferior process execution.
See `struct inferior_control_state'. */
struct inferior_control_state control;
- /* State of inferior process to restore after GDB is done with an inferior
- call. See `struct inferior_suspend_state'. */
-#if 0 /* Currently unused and empty structures are not valid C. */
- struct inferior_suspend_state suspend;
-#endif
-
/* True if this was an auto-created inferior, e.g. created from
following a fork; false, if this inferior was manually added by
the user, and we should not attempt to prune it
specific thread, see `struct thread_info'. */
struct continuation *continuations;
+ /* True if setup_inferior wasn't called for this inferior yet.
+ Until that is done, we must not access inferior memory or
+ registers, as we haven't determined the target
+ architecture/description. */
+ int needs_setup;
+
/* Private data used by the target vector implementation. */
- struct private_inferior *private;
+ struct 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. */
the CLI. */
extern struct inferior *add_inferior_silent (int pid);
-/* Delete an existing inferior list entry, due to inferior exit. */
-extern void delete_inferior (int pid);
-
-extern void delete_inferior_1 (struct inferior *todel, int silent);
-
-/* Same as delete_inferior, but don't print new inferior notifications
- to the CLI. */
-extern void delete_inferior_silent (int pid);
+extern void delete_inferior (struct inferior *todel);
/* Delete an existing inferior list entry, due to inferior detaching. */
extern void detach_inferior (int pid);
/* Search function to lookup an inferior by target 'pid'. */
extern struct inferior *find_inferior_pid (int pid);
+/* Search function to lookup an inferior whose pid is equal to 'ptid.pid'. */
+extern struct inferior *find_inferior_ptid (ptid_t ptid);
+
/* Search function to lookup an inferior by GDB 'num'. */
extern struct inferior *find_inferior_id (int num);
-/* Find an inferior bound to PSPACE. */
+/* Find an inferior bound to PSPACE, giving preference to the current
+ inferior. */
extern struct inferior *
find_inferior_for_program_space (struct program_space *pspace);
/* Returns true if the inferior list is not empty. */
extern int have_inferiors (void);
+/* Returns the number of live inferiors (real live processes). */
+extern int number_of_live_inferiors (void);
+
/* Returns true if there are any live inferiors in the inferior list
(not cores, not executables, real live processes). */
extern int have_live_inferiors (void);
extern struct inferior *add_inferior_with_spaces (void);
-extern void update_observer_mode (void);
-
-extern void update_signals_program_target (void);
-
-extern void signal_catch_update (const unsigned int *);
-
-/* In some circumstances we allow a command to specify a numeric
- signal. The idea is to keep these circumstances limited so that
- users (and scripts) develop portable habits. For comparison,
- POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
- numeric signal at all is obsolescent. We are slightly more lenient
- and allow 1-15 which should match host signal numbers on most
- systems. Use of symbolic signal names is strongly encouraged. */
-
-enum gdb_signal gdb_signal_from_command (int num);
+/* Print the current selected inferior. */
+extern void print_selected_inferior (struct ui_out *uiout);
#endif /* !defined (INFERIOR_H) */