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
+ 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
This file is part of GDB.
/* For struct frame_id. */
#include "frame.h"
-/* Structure in which to save the status of the inferior. Create/Save
- through "save_inferior_status", restore through
- "restore_inferior_status".
+/* Two structures are used to record inferior state.
- This pair of routines should be called around any transfer of
- control to the inferior which you don't want showing up in your
- control variables. */
+ inferior_thread_state contains state about the program itself like its
+ registers and any signal it received when it last stopped.
+ This state must be restored regardless of how the inferior function call
+ ends (either successfully, or after it hits a breakpoint or signal)
+ if the program is to properly continue where it left off.
+ inferior_status contains state regarding gdb's control of the inferior
+ itself like stepping control. It also contains session state like the
+ user's currently selected frame.
+
+ Call these routines around hand called functions, including function calls
+ in conditional breakpoints for example. */
+
+struct inferior_thread_state;
struct inferior_status;
-extern struct inferior_status *save_inferior_status (int);
+extern struct inferior_thread_state *save_inferior_thread_state (void);
+extern struct inferior_status *save_inferior_status (void);
+extern void restore_inferior_thread_state (struct inferior_thread_state *);
extern void restore_inferior_status (struct inferior_status *);
+extern struct cleanup *make_cleanup_restore_inferior_thread_state (struct inferior_thread_state *);
extern struct cleanup *make_cleanup_restore_inferior_status (struct inferior_status *);
+extern void discard_inferior_thread_state (struct inferior_thread_state *);
extern void discard_inferior_status (struct inferior_status *);
-extern void write_inferior_status_register (struct inferior_status
- *inf_status, int regno,
- LONGEST val);
+extern struct regcache *get_inferior_thread_state_regcache (struct inferior_thread_state *);
/* The -1 ptid, often used to indicate either an error condition
or a "don't care" condition, i.e, "run all threads." */
/* Compare two ptids to see if they are equal */
extern int ptid_equal (ptid_t p1, ptid_t p2);
+/* Return true if PTID represents a process id. */
+extern int ptid_is_pid (ptid_t ptid);
+
/* 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 void clear_sigint_trap (void);
-extern void set_sigio_trap (void);
-
-extern void clear_sigio_trap (void);
-
/* Set/get file name for default use for standard in/out in the inferior. */
extern void set_inferior_io_terminal (const char *terminal_name);
redisplay the prompt until the execution is actually over. */
extern int sync_execution;
-/* Some targets (stupidly) report more than one exec event per actual
- call to an event() system call. If only the last such exec event
- need actually be noticed and responded to by the debugger (i.e.,
- be reported to the user), then this is the number of "leading"
- exec events which should be ignored.
- */
-extern int inferior_ignoring_leading_exec_events;
-
/* Inferior environment. */
extern struct gdb_environ *inferior_environ;
/* From fork-child.c */
-extern void fork_inferior (char *, char *, char **,
- void (*)(void),
- void (*)(int), void (*)(void), char *);
+extern int fork_inferior (char *, char *, char **,
+ void (*)(void),
+ void (*)(int), void (*)(void), char *);
extern void startup_inferior (int);
extern void interrupt_target_1 (int all_threads);
+extern void detach_command (char *, int);
+
/* Address at which inferior stopped. */
extern CORE_ADDR stop_pc;
STOP_QUIETLY_NO_SIGSTOP
};
-extern enum stop_kind stop_soon;
-
-/* Nonzero if proceed is being used for a "finish" command or a similar
- situation when stop_registers should be saved. */
+/* Reverse execution. */
+enum exec_direction_kind
+ {
+ EXEC_FORWARD,
+ EXEC_REVERSE,
+ EXEC_ERROR
+ };
-extern int proceed_to_finish;
+extern enum exec_direction_kind execution_direction;
-/* Save register contents here when about to pop a stack dummy frame,
- if-and-only-if proceed_to_finish is set.
+/* 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;
-/* Nonzero if the child process in inferior_ptid was attached rather
- than forked. */
-
-extern int attach_flag;
-
/* True if we are debugging displaced stepping. */
extern int debug_displaced;
the ptid_t.pid member of threads of this inferior. */
int pid;
+ /* See the definition of stop_kind above. */
+ enum stop_kind stop_soon;
+
+ /* Nonzero if this child process was attached rather than
+ forked. */
+ int attach_flag;
+
+ /* 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'. */
+ struct continuation *continuations;
+
/* Private data used by the target vector implementation. */
struct private_inferior *private;
};
/* Delete an existing inferior list entry, due to inferior detaching. */
extern void detach_inferior (int pid);
+/* 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);
/* Boolean test for an already-known inferior id (GDB's homegrown id,
not the system's). */
-extern int valid_inferior_id (int num);
+extern int valid_gdb_inferior_id (int num);
/* Search function to lookup a inferior by target 'pid'. */
extern struct inferior *find_inferior_pid (int pid);