X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fframe.h;h=d8461a2e40d21b58b5a6255d029773a4b73c20e7;hb=ebd3bcc1327e6a7de6daf6536134cb20be9c2cfd;hp=941ee73ef5b5ae292ac61f41fe597f981a7af7f5;hpb=93d42b302eb91d758191675dcaf3bd90323b5224;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/frame.h b/gdb/frame.h index 941ee73ef5..d8461a2e40 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -1,14 +1,14 @@ /* Definitions for dealing with stack frames, for GDB, the GNU debugger. Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007 + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -17,9 +17,7 @@ GNU General Public License for more details. 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., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ #if !defined (FRAME_H) #define FRAME_H 1 @@ -146,6 +144,10 @@ struct frame_id /* For convenience. All fields are zero. */ extern const struct frame_id null_frame_id; +/* Flag to control debugging. */ + +extern int frame_debug; + /* Construct a frame ID. The first parameter is the frame's constant stack address (typically the outer-bound), and the second the frame's constant code address (typically the entry point). @@ -177,7 +179,8 @@ extern int frame_id_eq (struct frame_id l, struct frame_id r); /* Returns non-zero when L is strictly inner-than R (they have different frame .bases). Neither L, nor R can be `null'. See note above about frameless functions. */ -extern int frame_id_inner (struct frame_id l, struct frame_id r); +extern int frame_id_inner (struct gdbarch *gdbarch, struct frame_id l, + struct frame_id r); /* Write the internal representation of a frame ID on the specified stream. */ @@ -225,17 +228,10 @@ extern struct frame_info *get_current_frame (void); /* Invalidates the frame cache (this function should have been called invalidate_cached_frames). - FIXME: cagney/2002-11-28: The only difference between - flush_cached_frames() and reinit_frame_cache() is that the latter - explicitly sets the selected frame back to the current frame -- there - isn't any real difference (except that one delays the selection of - a new frame). Code can instead simply rely on get_selected_frame() - to reinit the selected frame as needed. As for invalidating the - cache, there should be two methods: one that reverts the thread's - selected frame back to current frame (for when the inferior - resumes) and one that does not (for when the user modifies the - target invalidating the frame cache). */ -extern void flush_cached_frames (void); + FIXME: cagney/2002-11-28: There should be two methods: one that + reverts the thread's selected frame back to current frame (for when + the inferior resumes) and one that does not (for when the user + modifies the target invalidating the frame cache). */ extern void reinit_frame_cache (void); /* On demand, create the selected frame and then return it. If the @@ -468,13 +464,19 @@ extern void frame_register_unwind (struct frame_info *frame, int regnum, /* Fetch a register from this, or unwind a register from the next frame. Note that the get_frame methods are wrappers to frame->next->unwind. They all [potentially] throw an error if the - fetch fails. */ + fetch fails. The value methods never return NULL, but usually + do return a lazy value. */ extern void frame_unwind_register (struct frame_info *frame, int regnum, gdb_byte *buf); extern void get_frame_register (struct frame_info *frame, int regnum, gdb_byte *buf); +struct value *frame_unwind_register_value (struct frame_info *frame, + int regnum); +struct value *get_frame_register_value (struct frame_info *frame, + int regnum); + extern LONGEST frame_unwind_register_signed (struct frame_info *frame, int regnum); extern LONGEST get_frame_register_signed (struct frame_info *frame, @@ -485,10 +487,6 @@ extern ULONGEST get_frame_register_unsigned (struct frame_info *frame, int regnum); -/* Use frame_unwind_register_signed. */ -extern void frame_unwind_unsigned_register (struct frame_info *frame, - int regnum, ULONGEST *val); - /* Get the value of the register that belongs to this FRAME. This function is a wrapper to the call sequence ``frame_register_unwind (get_next_frame (FRAME))''. As per frame_register_unwind(), if @@ -590,7 +588,8 @@ enum print_what #error "SIZEOF_FRAME_SAVED_REGS can not be re-defined" #endif #define SIZEOF_FRAME_SAVED_REGS \ - (sizeof (CORE_ADDR) * (NUM_REGS+NUM_PSEUDO_REGS)) + (sizeof (CORE_ADDR) * (gdbarch_num_regs (current_gdbarch)\ + + gdbarch_num_pseudo_regs (current_gdbarch))) /* Allocate zero initialized memory from the frame cache obstack. Appendices to the frame info (such as the unwind cache) should @@ -646,8 +645,6 @@ extern void show_and_print_stack_frame (struct frame_info *fi, int print_level, extern void print_stack_frame (struct frame_info *, int print_level, enum print_what print_what); -extern void show_stack_frame (struct frame_info *); - extern void print_frame_info (struct frame_info *, int print_level, enum print_what print_what, int args); @@ -677,6 +674,12 @@ extern void (*deprecated_selected_frame_level_changed_hook) (int); extern void return_command (char *, int); +/* Set FRAME's unwinder temporarily, so that we can call a sniffer. + Return a cleanup which should be called if unwinding fails, and + discarded if it succeeds. */ + +struct cleanup *frame_prepare_for_sniffer (struct frame_info *frame, + const struct frame_unwind *unwind); /* Notes (cagney/2002-11-27, drow/2003-09-06): @@ -715,7 +718,7 @@ extern struct frame_info *deprecated_safe_get_selected_frame (void); extern struct frame_info *create_new_frame (CORE_ADDR base, CORE_ADDR pc); /* FIXME: cagney/2002-12-06: Has the PC in the current frame changed? - "infrun.c", Thanks to DECR_PC_AFTER_BREAK, can change the PC after + "infrun.c", Thanks to gdbarch_decr_pc_after_break, can change the PC after the initial frame create. This puts things back in sync. This replaced: frame->pc = ....; */