X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fframe.h;h=5d9880183a2d7f8a766805729e7e434a8c7b0ccc;hb=666547aa9ebfac79a2f7607e0621f6a55c8c6f30;hp=39e41ef3272ec7bdf308d83f62c365f2e2f8b5b3;hpb=30727aa6d12fb866494020c0b62ab265a2bdcdfe;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/frame.h b/gdb/frame.h index 39e41ef327..5d9880183a 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -1,5 +1,6 @@ /* Definitions for dealing with stack frames, for GDB, the GNU debugger. - Copyright 1986, 1989, 1991, 1992, 1999 Free Software Foundation, Inc. + Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, + 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GDB. @@ -27,13 +28,13 @@ /* XXXX - deprecated */ struct frame_saved_regs { + /* For each register R (except the SP), regs[R] is the address at + which it was saved on entry to the frame, or zero if it was not + saved on entry to this frame. This includes special registers + such as pc and fp saved in special ways in the stack frame. - /* For each register, address of where it was saved on entry to - the frame, or zero if it was not saved on entry to this frame. - This includes special registers such as pc and fp saved in - special ways in the stack frame. The SP_REGNUM is even more - special, the address here is the sp for the next frame, not the - address where the sp was saved. */ + regs[SP_REGNUM] is different. It holds the actual SP, not the + address at which it was saved. */ CORE_ADDR regs[NUM_REGS]; }; @@ -80,7 +81,7 @@ struct frame_info address where the sp was saved. */ /* Allocated by frame_saved_regs_zalloc () which is called / initialized by FRAME_INIT_SAVED_REGS(). */ - CORE_ADDR *saved_regs; /*NUM_REGS */ + CORE_ADDR *saved_regs; /*NUM_REGS + NUM_PSEUDO_REGS*/ #ifdef EXTRA_FRAME_INFO /* XXXX - deprecated */ @@ -99,15 +100,35 @@ struct frame_info struct frame_info *next, *prev; }; -/* Allocate additional space for appendices to a struct frame_info. */ +/* Values for the source flag to be used in print_frame_info_base(). */ +enum print_what + { + /* Print only the source line, like in stepi. */ + SRC_LINE = -1, + /* Print only the location, i.e. level, address (sometimes) + function, args, file, line, line num. */ + LOCATION, + /* Print both of the above. */ + SRC_AND_LOC, + /* Print location only, but always include the address. */ + LOC_AND_ADDRESS + }; + +/* Allocate additional space for appendices to a struct frame_info. + NOTE: Much of GDB's code works on the assumption that the allocated + saved_regs[] array is the size specified below. If you try to make + that array smaller, GDB will happily walk off its end. */ -#ifndef SIZEOF_FRAME_SAVED_REGS -#define SIZEOF_FRAME_SAVED_REGS (sizeof (CORE_ADDR) * (NUM_REGS)) +#ifdef SIZEOF_FRAME_SAVED_REGS +#error "SIZEOF_FRAME_SAVED_REGS can not be re-defined" #endif -extern void *frame_obstack_alloc PARAMS ((unsigned long size)); -extern void frame_saved_regs_zalloc PARAMS ((struct frame_info *)); +#define SIZEOF_FRAME_SAVED_REGS \ + (sizeof (CORE_ADDR) * (NUM_REGS+NUM_PSEUDO_REGS)) + +extern void *frame_obstack_alloc (unsigned long size); +extern void frame_saved_regs_zalloc (struct frame_info *); -/* Return the frame address from FR. Except in the machine-dependent +/* Return the frame address from FI. Except in the machine-dependent *FRAME* macros, a frame address has no defined meaning other than as a magic cookie which identifies a frame over calls to the inferior. The only known exception is inferior.h @@ -129,22 +150,24 @@ extern void frame_saved_regs_zalloc PARAMS ((struct frame_info *)); the definition here by providing one in the tm file. XXXX - both default and alternate frame_chain_valid functions are - deprecated. New code should use generic dummy frames. */ + deprecated. New code should use dummy frames and one of the + generic functions. */ -extern int default_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *)); -extern int alternate_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *)); -extern int nonnull_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *)); -extern int generic_frame_chain_valid PARAMS ((CORE_ADDR, struct frame_info *)); -extern void generic_save_dummy_frame_tos PARAMS ((CORE_ADDR sp)); +extern int file_frame_chain_valid (CORE_ADDR, struct frame_info *); +extern int func_frame_chain_valid (CORE_ADDR, struct frame_info *); +extern int nonnull_frame_chain_valid (CORE_ADDR, struct frame_info *); +extern int generic_file_frame_chain_valid (CORE_ADDR, struct frame_info *); +extern int generic_func_frame_chain_valid (CORE_ADDR, struct frame_info *); +extern void generic_save_dummy_frame_tos (CORE_ADDR sp); #if !defined (FRAME_CHAIN_VALID) #if !defined (FRAME_CHAIN_VALID_ALTERNATE) -#define FRAME_CHAIN_VALID(chain, thisframe) default_frame_chain_valid (chain, thisframe) +#define FRAME_CHAIN_VALID(chain, thisframe) file_frame_chain_valid (chain, thisframe) #else /* Use the alternate method of avoiding running up off the end of the frame chain or following frames back into the startup code. See the comments in objfiles.h. */ -#define FRAME_CHAIN_VALID(chain, thisframe) alternate_frame_chain_valid (chain,thisframe) +#define FRAME_CHAIN_VALID(chain, thisframe) func_frame_chain_valid (chain,thisframe) #endif /* FRAME_CHAIN_VALID_ALTERNATE */ #endif /* FRAME_CHAIN_VALID */ @@ -159,99 +182,99 @@ extern struct frame_info *selected_frame; extern int selected_frame_level; -extern struct frame_info *create_new_frame PARAMS ((CORE_ADDR, CORE_ADDR)); +extern struct frame_info *create_new_frame (CORE_ADDR, CORE_ADDR); -extern void flush_cached_frames PARAMS ((void)); +extern void flush_cached_frames (void); -extern void reinit_frame_cache PARAMS ((void)); +extern void reinit_frame_cache (void); #ifdef FRAME_FIND_SAVED_REGS /* XXX - deprecated */ #define FRAME_INIT_SAVED_REGS(FI) get_frame_saved_regs (FI, NULL) -extern void get_frame_saved_regs PARAMS ((struct frame_info *, - struct frame_saved_regs *)); +extern void get_frame_saved_regs (struct frame_info *, + struct frame_saved_regs *); #endif -extern void set_current_frame PARAMS ((struct frame_info *)); +extern void set_current_frame (struct frame_info *); -extern struct frame_info *get_prev_frame PARAMS ((struct frame_info *)); +extern struct frame_info *get_prev_frame (struct frame_info *); -extern struct frame_info *get_current_frame PARAMS ((void)); +extern struct frame_info *get_current_frame (void); -extern struct frame_info *get_next_frame PARAMS ((struct frame_info *)); +extern struct frame_info *get_next_frame (struct frame_info *); -extern struct block *get_frame_block PARAMS ((struct frame_info *)); +extern struct block *get_frame_block (struct frame_info *); -extern struct block *get_current_block PARAMS ((void)); +extern struct block *get_current_block (void); -extern struct block *get_selected_block PARAMS ((void)); +extern struct block *get_selected_block (void); -extern struct symbol *get_frame_function PARAMS ((struct frame_info *)); +extern struct symbol *get_frame_function (struct frame_info *); -extern CORE_ADDR get_frame_pc PARAMS ((struct frame_info *)); +extern CORE_ADDR get_frame_pc (struct frame_info *); -extern CORE_ADDR get_pc_function_start PARAMS ((CORE_ADDR)); +extern CORE_ADDR get_pc_function_start (CORE_ADDR); -extern struct block *block_for_pc PARAMS ((CORE_ADDR)); +extern struct block *block_for_pc (CORE_ADDR); -extern struct block *block_for_pc_sect PARAMS ((CORE_ADDR, asection *)); +extern struct block *block_for_pc_sect (CORE_ADDR, asection *); -extern int frameless_look_for_prologue PARAMS ((struct frame_info *)); +extern int frameless_look_for_prologue (struct frame_info *); -extern void print_frame_args PARAMS ((struct symbol *, struct frame_info *, - int, GDB_FILE *)); +extern void print_frame_args (struct symbol *, struct frame_info *, + int, struct ui_file *); -extern struct frame_info *find_relative_frame PARAMS ((struct frame_info *, int *)); +extern struct frame_info *find_relative_frame (struct frame_info *, int *); -extern void show_and_print_stack_frame PARAMS ((struct frame_info * fi, int level, int source)); +extern void show_and_print_stack_frame (struct frame_info *fi, int level, + int source); -extern void print_stack_frame PARAMS ((struct frame_info *, int, int)); +extern void print_stack_frame (struct frame_info *, int, int); -extern void print_only_stack_frame PARAMS ((struct frame_info *, int, int)); +extern void print_only_stack_frame (struct frame_info *, int, int); -extern void show_stack_frame PARAMS ((struct frame_info *)); +extern void show_stack_frame (struct frame_info *); -extern void select_frame PARAMS ((struct frame_info *, int)); +extern void select_frame (struct frame_info *, int); -extern void record_selected_frame PARAMS ((CORE_ADDR *, int *)); +extern void record_selected_frame (CORE_ADDR *, int *); -extern void select_and_print_frame PARAMS ((struct frame_info *, int)); +extern void select_and_print_frame (struct frame_info *, int); -extern void print_frame_info PARAMS ((struct frame_info *, int, int, int)); +extern void print_frame_info (struct frame_info *, int, int, int); -extern void show_frame_info PARAMS ((struct frame_info *, int, int, int)); +extern void show_frame_info (struct frame_info *, int, int, int); -extern CORE_ADDR find_saved_register PARAMS ((struct frame_info *, int)); +extern CORE_ADDR find_saved_register (struct frame_info *, int); -extern struct frame_info *block_innermost_frame PARAMS ((struct block *)); +extern struct frame_info *block_innermost_frame (struct block *); -extern struct frame_info *find_frame_addr_in_frame_chain PARAMS ((CORE_ADDR)); +extern struct frame_info *find_frame_addr_in_frame_chain (CORE_ADDR); -extern CORE_ADDR sigtramp_saved_pc PARAMS ((struct frame_info *)); +extern CORE_ADDR sigtramp_saved_pc (struct frame_info *); -extern CORE_ADDR generic_read_register_dummy PARAMS ((CORE_ADDR pc, - CORE_ADDR fp, - int)); -extern void generic_push_dummy_frame PARAMS ((void)); -extern void generic_pop_current_frame PARAMS ((void (*)(struct frame_info *))); -extern void generic_pop_dummy_frame PARAMS ((void)); +extern CORE_ADDR generic_read_register_dummy (CORE_ADDR pc, + CORE_ADDR fp, int); +extern void generic_push_dummy_frame (void); +extern void generic_pop_current_frame (void (*)(struct frame_info *)); +extern void generic_pop_dummy_frame (void); -extern int generic_pc_in_call_dummy PARAMS ((CORE_ADDR pc, - CORE_ADDR sp, - CORE_ADDR fp)); -extern char *generic_find_dummy_frame PARAMS ((CORE_ADDR pc, - CORE_ADDR fp)); +extern int generic_pc_in_call_dummy (CORE_ADDR pc, + CORE_ADDR sp, CORE_ADDR fp); +extern char *generic_find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp); -extern void generic_fix_call_dummy PARAMS ((char *dummy, CORE_ADDR pc, CORE_ADDR fun, - int nargs, struct value ** args, - struct type * type, int gcc_p)); +extern void generic_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, + int nargs, struct value **args, + struct type *type, int gcc_p); -#ifdef __STDC__ -/* Some native compilers, even ones that are supposed to be ANSI and for which __STDC__ - is true, complain about forward decls of enums. */ -enum lval_type; -extern void generic_get_saved_register PARAMS ((char *, int *, CORE_ADDR *, struct frame_info *, int, enum lval_type *)); -#endif +extern void generic_get_saved_register (char *, int *, CORE_ADDR *, + struct frame_info *, int, + enum lval_type *); + +extern void get_saved_register (char *raw_buffer, int *optimized, + CORE_ADDR * addrp, + struct frame_info *frame, + int regnum, enum lval_type *lval); #endif /* !defined (FRAME_H) */