Where it is, why it stopped, and how to step it.
Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GDB.
struct gdbarch;
struct regcache;
struct ui_out;
+struct terminal_info;
/* For bpstat. */
#include "breakpoint.h"
/* For struct frame_id. */
#include "frame.h"
+#include "progspace.h"
+
/* Two structures are used to record inferior state.
inferior_thread_state contains state about the program itself like its
/* Return true if PTID represents a process id. */
extern int ptid_is_pid (ptid_t ptid);
+/* Returns true if PTID matches filter FILTER. FILTER can be the wild
+ card MINUS_ONE_PTID (all ptid match it); can be a ptid representing
+ a process (ptid_is_pid returns true), in which case, all lwps and
+ threads of that given process match, lwps and threads of other
+ processes do not; or, it can represent a specific thread, in which
+ case, only that thread will match true. PTID must represent a
+ specific LWP or THREAD, it can never be a wild card. */
+
+extern int ptid_match (ptid_t ptid, ptid_t filter);
+
/* 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. */
/* Inferior environment. */
-extern struct gdb_environ *inferior_environ;
-
extern void clear_proceed_status (void);
extern void proceed (CORE_ADDR, enum target_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. */
are kept running freely. */
extern int non_stop;
+/* If set (default), when following a fork, GDB will detach from one
+ the fork branches, child or parent. Exactly which branch is
+ detached depends on 'set follow-fork-mode' setting. */
+extern int detach_fork;
+
extern void generic_mourn_inferior (void);
extern void terminal_save_ours (void);
extern void terminal_ours (void);
-extern CORE_ADDR read_pc (void);
-
-extern void write_pc (CORE_ADDR);
-
-extern CORE_ADDR unsigned_pointer_to_address (struct type *type,
+extern CORE_ADDR unsigned_pointer_to_address (struct gdbarch *gdbarch,
+ struct type *type,
const gdb_byte *buf);
-extern void unsigned_address_to_pointer (struct type *type, gdb_byte *buf,
+extern void unsigned_address_to_pointer (struct gdbarch *gdbarch,
+ struct type *type, gdb_byte *buf,
CORE_ADDR addr);
-extern CORE_ADDR signed_pointer_to_address (struct type *type,
+extern CORE_ADDR signed_pointer_to_address (struct gdbarch *gdbarch,
+ struct type *type,
const gdb_byte *buf);
-extern void address_to_signed_pointer (struct type *type, gdb_byte *buf,
+extern void address_to_signed_pointer (struct gdbarch *gdbarch,
+ struct type *type, gdb_byte *buf,
CORE_ADDR addr);
extern void wait_for_inferior (int treat_exec_as_sigtrap);
+extern void prepare_for_detach (void);
+
extern void fetch_inferior_event (void *);
extern void init_wait_for_inferior (void);
extern void terminal_init_inferior_with_pgrp (int pgrp);
-/* From procfs.c */
-
-extern int proc_iterate_over_mappings (int (*)(int, CORE_ADDR));
-
-extern ptid_t procfs_first_available (void);
-
/* From fork-child.c */
extern int fork_inferior (char *, char *, char **,
extern void startup_inferior (int);
-extern char *construct_inferior_arguments (struct gdbarch *, int, char **);
+extern char *construct_inferior_arguments (int, char **);
-/* From inflow.c */
-
-extern void new_tty_prefork (const char *);
+/* From infrun.c */
-extern int gdb_has_a_terminal (void);
+extern int debug_infrun;
-/* From infrun.c */
+extern int stop_on_solib_events;
extern void start_remote (int from_tty);
/* Calls error_is_running if the current thread is running. */
extern void ensure_not_running (void);
-/* From infcmd.c */
+void set_step_info (struct frame_info *frame, struct symtab_and_line sal);
-extern void tty_command (char *, int);
+/* From infcmd.c */
extern void post_create_inferior (struct target_ops *, int);
extern char *get_inferior_args (void);
-extern char *set_inferior_args (char *);
+extern void set_inferior_args (char *);
extern void set_inferior_args_vector (int, char **);
extern CORE_ADDR stop_pc;
-/* Flag indicating that a command has proceeded the inferior past the
- current breakpoint. */
-
-extern int breakpoint_proceeded;
-
/* Nonzero if stopped due to completion of a stack dummy routine. */
-extern int stop_stack_dummy;
+extern enum stop_stack_kind stop_stack_dummy;
/* Nonzero if program stopped due to a random (unexpected) signal in
inferior process. */
extern int stopped_by_random_signal;
-/* 1 means step over all subroutine calls.
- -1 means step over calls to undebuggable functions. */
+/* 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. */
enum step_over_calls_kind
{
void displaced_step_dump_bytes (struct ui_file *file,
const gdb_byte *buf, size_t len);
-
-/* When set, normal_stop will not call the normal_stop observer. */
-extern int suppress_stop_observer;
-
-/* When set, no calls to target_resumed observer will be made. */
-extern int suppress_resume_observer;
-
\f
/* Possible values for gdbarch_call_dummy_location. */
#define ON_STACK 1
the ptid_t.pid member of threads of this inferior. */
int pid;
+ /* 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
+ automatically. */
+ int removable;
+
+ /* The address space bound to this inferior. */
+ struct address_space *aspace;
+
+ /* The program space bound to this inferior. */
+ struct program_space *pspace;
+
+ /* The arguments string to use when running. */
+ char *args;
+
+ /* The size of elements in argv. */
+ int argc;
+
+ /* The vector version of arguments. If ARGC is nonzero,
+ then we must compute ARGS from this (via the target).
+ This is always coming from main's argv and therefore
+ should never be freed. */
+ char **argv;
+
+ /* The name of terminal device to use for I/O. */
+ char *terminal;
+
+ /* Environment to use for running inferior,
+ in format described in environ.h. */
+ struct gdb_environ *environment;
+
/* See the definition of stop_kind above. */
enum stop_kind stop_soon;
forked. */
int attach_flag;
+ /* If this inferior is a vfork child, then this is the pointer to
+ its vfork parent, if GDB is still attached to it. */
+ struct inferior *vfork_parent;
+
+ /* If this process is a vfork parent, this is the pointer to the
+ child. Since a vfork parent is left frozen by the kernel until
+ the child execs or exits, a process can only have one vfork child
+ at a given time. */
+ struct inferior *vfork_child;
+
+ /* True if this inferior should be detached when it's vfork sibling
+ exits or execs. */
+ int pending_detach;
+
+ /* True if this inferior is a vfork parent waiting for a vfork child
+ not under our control to be done with the shared memory region,
+ either by exiting or execing. */
+ int waiting_for_vfork_done;
+
+ /* True if we're in the process of detaching from this inferior. */
+ int detaching;
+
/* What is left to do for an execution command after any thread of
this inferior stops. For continuations associated with a
specific thread, see `struct thread_info'. */
/* Private data used by the target vector implementation. */
struct private_inferior *private;
+
+ /* We keep a count of the number of times the user has requested a
+ particular syscall to be tracked, and pass this information to the
+ target. This lets capable targets implement filtering directly. */
+
+ /* Number of times that "any" syscall is requested. */
+ int any_syscall_count;
+
+ /* Count of each system call. */
+ VEC(int) *syscalls_counts;
+
+ /* This counts all syscall catch requests, so we can readily determine
+ if any catching is necessary. */
+ int total_syscalls_count;
+
+ /* Per inferior data-pointers required by other GDB modules. */
+ void **data;
+ unsigned num_data;
};
+/* Keep a registry of per-inferior data-pointers required by other GDB
+ modules. */
+
+extern const struct inferior_data *register_inferior_data (void);
+extern const struct inferior_data *register_inferior_data_with_cleanup
+ (void (*cleanup) (struct inferior *, void *));
+extern void clear_inferior_data (struct inferior *inf);
+extern void set_inferior_data (struct inferior *inf,
+ const struct inferior_data *data, void *value);
+extern void *inferior_data (struct inferior *inf,
+ const struct inferior_data *data);
+
/* Create an empty inferior list, or empty the existing one. */
extern void init_inferior_list (void);
/* 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);
/* Delete an existing inferior list entry, due to inferior detaching. */
extern void detach_inferior (int pid);
+extern void exit_inferior (int pid);
+
+extern void exit_inferior_silent (int pid);
+
+extern void exit_inferior_num_silent (int num);
+
+extern void inferior_appeared (struct inferior *inf, int pid);
+
/* Get rid of all inferiors. */
extern void discard_all_inferiors (void);
not the system's). */
extern int valid_gdb_inferior_id (int num);
-/* Search function to lookup a inferior by target 'pid'. */
+/* Search function to lookup an inferior by target 'pid'. */
extern struct inferior *find_inferior_pid (int pid);
+/* Search function to lookup an inferior by GDB 'num'. */
+extern struct inferior *find_inferior_id (int num);
+
+/* Find an inferior bound to PSPACE. */
+extern struct inferior *
+ find_inferior_for_program_space (struct program_space *pspace);
+
/* Inferior iterator function.
Calls a callback function once for each inferior, so long as the
/* Returns true if the inferior list is not empty. */
extern int have_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);
+
/* Return a pointer to the current inferior. It is an error to call
this if there is no current inferior. */
extern struct inferior *current_inferior (void);
+extern void set_current_inferior (struct inferior *);
+
+extern struct cleanup *save_current_inferior (void);
+
+extern struct inferior *inferior_list;
+
+/* Prune away automatically added inferiors that aren't required
+ anymore. */
+extern void prune_inferiors (void);
+
+extern int number_of_inferiors (void);
+
+extern struct inferior *add_inferior_with_spaces (void);
+
+extern void update_observer_mode (void);
+
#endif /* !defined (INFERIOR_H) */