X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Finferior.h;h=e93e413bb75f8bb5e5875c5fcddbffb611a27cba;hb=56be38147cbe5a85a4d2d4d9cf402696826a4392;hp=6f2411cb8fd2bee03284e6d34befd29a18a06cda;hpb=73dd234f2ffe66ac8e500fb37244c5c65c74caa6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/inferior.h b/gdb/inferior.h index 6f2411cb8f..e93e413bb7 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -1,8 +1,9 @@ /* Variables that describe the inferior process running under GDB: Where it is, why it stopped, and how to step it. - Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, - 1996, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, + 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of GDB. @@ -18,12 +19,16 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ #if !defined (INFERIOR_H) #define INFERIOR_H 1 +struct target_waitstatus; +struct frame_info; +struct ui_file; +struct type; struct gdbarch; struct regcache; @@ -98,9 +103,10 @@ extern void set_sigio_trap (void); extern void clear_sigio_trap (void); -/* File name for default use for standard in/out in the inferior. */ +/* Set/get file name for default use for standard in/out in the inferior. */ -extern char *inferior_io_terminal; +extern void set_inferior_io_terminal (const char *terminal_name); +extern const char *get_inferior_io_terminal (void); /* Collected pid, tid, etc. of the debugged inferior. When there's no inferior, PIDGET (inferior_ptid) will be 0. */ @@ -141,7 +147,7 @@ extern int inferior_ignoring_leading_exec_events; /* Inferior environment. */ -extern struct environ *inferior_environ; +extern struct gdb_environ *inferior_environ; extern void clear_proceed_status (void); @@ -160,14 +166,10 @@ extern void terminal_save_ours (void); extern void terminal_ours (void); -extern int run_stack_dummy (CORE_ADDR , struct regcache *); - extern CORE_ADDR read_pc (void); extern CORE_ADDR read_pc_pid (ptid_t); -extern CORE_ADDR generic_target_read_pc (ptid_t); - extern void write_pc (CORE_ADDR); extern void write_pc_pid (CORE_ADDR, ptid_t); @@ -176,21 +178,13 @@ extern void generic_target_write_pc (CORE_ADDR, ptid_t); extern CORE_ADDR read_sp (void); -extern CORE_ADDR generic_target_read_sp (void); - -extern void generic_target_write_sp (CORE_ADDR); - -extern CORE_ADDR read_fp (void); - -extern CORE_ADDR generic_target_read_fp (void); - -extern CORE_ADDR unsigned_pointer_to_address (struct type *type, const void *buf); - -extern void unsigned_address_to_pointer (struct type *type, void *buf, +extern CORE_ADDR unsigned_pointer_to_address (struct type *type, + const gdb_byte *buf); +extern void unsigned_address_to_pointer (struct type *type, gdb_byte *buf, CORE_ADDR addr); extern CORE_ADDR signed_pointer_to_address (struct type *type, - const void *buf); -extern void address_to_signed_pointer (struct type *type, void *buf, + const gdb_byte *buf); +extern void address_to_signed_pointer (struct type *type, gdb_byte *buf, CORE_ADDR addr); extern void wait_for_inferior (void); @@ -215,11 +209,9 @@ extern void default_print_registers_info (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, int all); -extern void store_inferior_registers (int); +extern void store_inferior_registers (struct regcache *, int); -extern void fetch_inferior_registers (int); - -extern void solib_create_inferior_hook (void); +extern void fetch_inferior_registers (struct regcache *, int); extern void child_terminal_info (char *, int); @@ -244,11 +236,7 @@ int ptrace_wait (ptid_t, int *); extern void child_resume (ptid_t, int, enum target_signal); -#ifndef PTRACE_ARG3_TYPE -#define PTRACE_ARG3_TYPE int /* Correct definition for most systems. */ -#endif - -extern int call_ptrace (int, int, PTRACE_ARG3_TYPE, int); +extern int call_ptrace (int, int, PTRACE_TYPE_ARG3, int); extern void pre_fork_inferior (void); @@ -271,13 +259,13 @@ extern char *construct_inferior_arguments (struct gdbarch *, int, char **); /* From inflow.c */ -extern void new_tty_prefork (char *); +extern void new_tty_prefork (const char *); extern int gdb_has_a_terminal (void); /* From infrun.c */ -extern void start_remote (void); +extern void start_remote (int from_tty); extern void normal_stop (void); @@ -302,6 +290,8 @@ extern void follow_inferior_reset_breakpoints (void); extern void tty_command (char *, int); +extern void post_create_inferior (struct target_ops *, int); + extern void attach_command (char *, int); extern char *get_inferior_args (void); @@ -368,10 +358,6 @@ extern CORE_ADDR step_range_end; /* Exclusive */ extern struct frame_id step_frame_id; -/* Our notion of the current stack pointer. */ - -extern CORE_ADDR step_sp; - /* 1 means step over all subroutine calls. -1 means step over calls to undebuggable functions. */ @@ -390,12 +376,37 @@ extern enum step_over_calls_kind step_over_calls; extern int step_multi; -/* Nonzero means expecting a trap and caller will handle it themselves. - It is used after attach, due to attaching to a process; - when running in the shell before the child program has been exec'd; - and when running some kinds of remote stuff (FIXME?). */ +/* Nonzero means expecting a trap and caller will handle it + themselves. It is used when running in the shell before the child + program has been exec'd; and when running some kinds of remote + stuff (FIXME?). */ + +/* 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. + + 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. */ + +enum stop_kind + { + NO_STOP_QUIETLY = 0, + STOP_QUIETLY, + STOP_QUIETLY_NO_SIGSTOP + }; -extern int stop_soon_quietly; +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. */ @@ -417,67 +428,7 @@ extern int attach_flag; /* Possible values for CALL_DUMMY_LOCATION. */ #define ON_STACK 1 #define AT_ENTRY_POINT 4 - -#if !defined (CALL_DUMMY_START_OFFSET) -#define CALL_DUMMY_START_OFFSET (internal_error (__FILE__, __LINE__, "CALL_DUMMY_START_OFFSET"), 0) -#endif -#if !defined (CALL_DUMMY_LENGTH) -#define CALL_DUMMY_LENGTH (internal_error (__FILE__, __LINE__, "CALL_DUMMY_LENGTH"), 0) -#endif - -/* FIXME: cagney/2000-04-17: gdbarch should manage this. The default - shouldn't be necessary. */ - -#if !defined PUSH_DUMMY_FRAME -#define PUSH_DUMMY_FRAME (internal_error (__FILE__, __LINE__, "PUSH_DUMMY_FRAME"), 0) -#endif - -#if !defined STORE_STRUCT_RETURN -#define STORE_STRUCT_RETURN(a1,a2) (internal_error (__FILE__, __LINE__, "STORE_STRUCT_RETURN"), 0) -#endif - - -/* Are we in a call dummy? */ - -/* NOTE: cagney/2002-11-24: Targets need to both switch to generic - dummy frames, and use generic_pc_in_call_dummy(). The generic - version should be able to handle all cases since that code works by - saving the address of the dummy's breakpoint (where ever it is). */ - -extern int deprecated_pc_in_call_dummy_on_stack (CORE_ADDR pc, - CORE_ADDR sp, - CORE_ADDR frame_address); - -/* NOTE: cagney/2002-11-24: Targets need to both switch to generic - dummy frames, and use generic_pc_in_call_dummy(). The generic - version should be able to handle all cases since that code works by - saving the address of the dummy's breakpoint (where ever it is). */ - -extern int deprecated_pc_in_call_dummy_at_entry_point (CORE_ADDR pc, - CORE_ADDR sp, - CORE_ADDR frame_address); - -/* It's often not enough for our clients to know whether the PC is merely - somewhere within the call dummy. They may need to know whether the - call dummy has actually completed. (For example, wait_for_inferior - wants to know when it should truly stop because the call dummy has - completed. If we're single-stepping because of slow watchpoints, - then we may find ourselves stopped at the entry of the call dummy, - and want to continue stepping until we reach the end.) - - Note that this macro is intended for targets (like HP-UX) which - require more than a single breakpoint in their call dummies, and - therefore cannot use the CALL_DUMMY_BREAKPOINT_OFFSET mechanism. - - If a target does define CALL_DUMMY_BREAKPOINT_OFFSET, then this - default implementation of CALL_DUMMY_HAS_COMPLETED is sufficient. - Else, a target may wish to supply an implementation that works in - the presense of multiple breakpoints in its call dummy. - */ -#if !defined(CALL_DUMMY_HAS_COMPLETED) -#define CALL_DUMMY_HAS_COMPLETED(pc, sp, frame_address) \ - DEPRECATED_PC_IN_CALL_DUMMY((pc), (sp), (frame_address)) -#endif +#define AT_SYMBOL 5 /* If STARTUP_WITH_SHELL is set, GDB's "run" will attempts to start up the debugee under a shell.