diff options
author | Andrew Cagney <cagney@redhat.com> | 2004-03-21 22:28:52 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2004-03-21 22:28:52 +0000 |
commit | 3d0e5d44322383b9989cbaaa8c8f644ffeffbbd3 (patch) | |
tree | e02e71c97cbc54a8be6bd19a4ec1f44838feeb9a /gdb/frame-unwind.h | |
parent | 4c73f0a0679827d838a68c7db3c55cb5542396ee (diff) | |
download | gdb-3d0e5d44322383b9989cbaaa8c8f644ffeffbbd3.tar.gz |
2004-03-21 Andrew Cagney <cagney@redhat.com>
* frame-unwind.h: Update copyright.
(struct frame_data): Add opaque declaration.
(frame_sniffer_ftype): Declare.
(struct frame_unwind): Add "unwind_data" and "sniffer".
(frame_unwind_register_unwinder): Declare.
(frame_unwind_find_by_frame): Add parameter "this_cache".
* frame.c (get_frame_id, create_new_frame, legacy_get_prev_frame)
(legacy_get_prev_frame, legacy_get_prev_frame)
(get_frame_type): Pass the prologue_cache to
frame_unwind_find_by_frame.
* frame-unwind.c (struct frame_unwind_table_entry): Add field
"unwinder".
(frame_unwind_register_unwinder): New function.
(frame_unwind_find_by_frame): Handle an unwind sniffer.
Diffstat (limited to 'gdb/frame-unwind.h')
-rw-r--r-- | gdb/frame-unwind.h | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/gdb/frame-unwind.h b/gdb/frame-unwind.h index 8d17280fc9a..49f28896ffe 100644 --- a/gdb/frame-unwind.h +++ b/gdb/frame-unwind.h @@ -1,6 +1,6 @@ /* Definitions for a frame unwinder, for GDB, the GNU debugger. - Copyright 2003 Free Software Foundation, Inc. + Copyright 2003, 2004 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ #if !defined (FRAME_UNWIND_H) #define FRAME_UNWIND_H 1 +struct frame_data; struct frame_info; struct frame_id; struct frame_unwind; @@ -42,6 +43,14 @@ struct regcache; as where this frame's prologue stores the previous frame's registers. */ +/* Given the NEXT frame, take a wiff of THIS frame's registers (namely + the PC and attributes) and if SELF is the applicable unwinder, + return non-zero. Possibly also initialize THIS_PROLOGUE_CACHE. */ + +typedef int (frame_sniffer_ftype) (const struct frame_unwind *self, + struct frame_info *next_frame, + void **this_prologue_cache); + /* Assuming the frame chain: (outer) prev <-> this <-> next (inner); use the NEXT frame, and its register unwind method, to determine the frame ID of THIS frame. @@ -118,8 +127,16 @@ struct frame_unwind here? */ frame_this_id_ftype *this_id; frame_prev_register_ftype *prev_register; + const struct frame_data *unwind_data; + frame_sniffer_ftype *sniffer; }; +/* Register a frame unwinder, _appending_ it to the end of the search + list. */ +extern void frame_unwind_register_unwinder (struct gdbarch *gdbarch, + const struct frame_unwind *unwinder); + + /* Given the NEXT frame, take a wiff of THIS frame's registers (namely the PC and attributes) and if it is the applicable unwinder return the unwind methods, or NULL if it is not. */ @@ -134,8 +151,9 @@ extern void frame_unwind_append_sniffer (struct gdbarch *gdbarch, frame_unwind_sniffer_ftype *sniffer); /* Iterate through the next frame's sniffers until one returns with an - unwinder implementation. */ + unwinder implementation. Possibly initialize THIS_CACHE. */ -extern const struct frame_unwind *frame_unwind_find_by_frame (struct frame_info *next_frame); +extern const struct frame_unwind *frame_unwind_find_by_frame (struct frame_info *next_frame, + void **this_cache); #endif |