diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-07-15 17:35:00 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-07-15 17:35:00 +0000 |
commit | e8a89fe2788ee8bbcc84d7fb13d28f8b924318c4 (patch) | |
tree | 2e7708db39b39c8f99f93b031c6663f6a872015b /gdb/frame-base.h | |
parent | 0714963c79d71c6a88e14cfb855043566ec149bf (diff) | |
download | gdb-e8a89fe2788ee8bbcc84d7fb13d28f8b924318c4.zip gdb-e8a89fe2788ee8bbcc84d7fb13d28f8b924318c4.tar.gz gdb-e8a89fe2788ee8bbcc84d7fb13d28f8b924318c4.tar.bz2 |
2003-07-15 Andrew Cagney <cagney@redhat.com>
* frame.c (get_frame_id): Use frame_unwind_find_by_frame.
(frame_register_unwind, create_new_frame): Ditto.
(legacy_get_prev_frame, get_frame_type): Ditto.
(get_frame_base_address): Use frame_base_find_by_frame.
(get_frame_locals_address): Use frame_base_find_by_frame.
(get_frame_args_address): Use frame_base_find_by_frame.
* frame-base.h (frame_base_sniffer_ftype): Declare.
(frame_base_append_sniffer): Declare.
(frame_base_find_by_frame): Replace frame_base_find_by_pc.
* frame-base.c (append_predicate): Add a "sniffer" parameter.
(frame_base_append_sniffer): New function.
(frame_base_append_predicate): Add a NULL sniffer.
(frame_base_find_by_frame): Replace "frame_base_find_by_pc".
(struct frame_base_table): Add "sniffer".
(frame_base_free): Free the "sniffer" table.
* frame-unwind.h (frame_unwind_sniffer_ftype): Define.
(frame_unwind_append_sniffer): Declare.
(frame_unwind_find_by_frame): Replace frame_unwind_find_by_pc.
* frame-unwind.c (frame_unwind_free): Free the "sniffer" table.
(struct frame_unwind_table): Add "sniffer", delete "middle".
(append_predicate): Add "sniffer" parameter, append the sniffer.
(frame_unwind_init): Update append_predicate call.
(frame_unwind_append_sniffer): New function.
(frame_unwind_append_predicate): Update append_predicate call.
(frame_unwind_find_by_frame): Replace frame_unwind_find_by_pc.
Diffstat (limited to 'gdb/frame-base.h')
-rw-r--r-- | gdb/frame-base.h | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/gdb/frame-base.h b/gdb/frame-base.h index 5e0d5db..7433c54 100644 --- a/gdb/frame-base.h +++ b/gdb/frame-base.h @@ -29,30 +29,12 @@ struct frame_base; struct gdbarch; struct regcache; -/* Return the frame base methods for the function that contains PC, or - NULL if it can't handle this frame. */ +/* For compatibility. */ typedef const struct frame_base *(frame_base_p_ftype) (CORE_ADDR pc); - -/* Add a frame base handler to the list. The predicates are polled in - the order that they are appended. */ - extern void frame_base_append_predicate (struct gdbarch *gdbarch, frame_base_p_ftype *p); -/* Set the default frame base. If all else fails, this one is - returned. If this isn't set, the default is to use legacy code - that uses things like the frame ID's base (ulgh!). */ - -extern void frame_base_set_default (struct gdbarch *gdbarch, - const struct frame_base *def); - -/* Iterate through the list of frame base handlers until one returns - an implementation. */ - -extern const struct frame_base *frame_base_find_by_pc (struct gdbarch *gdbarch, - CORE_ADDR pc); - /* Assuming the frame chain: (outer) prev <-> this <-> next (inner); and that this is a `normal frame'; use the NEXT frame, and its register unwind method, to determine the address of THIS frame's @@ -91,4 +73,27 @@ struct frame_base frame_this_args_ftype *this_args; }; +/* Given the NEXT frame, return the frame base methods for THIS frame, + or NULL if it can't handle THIS frame. */ + +typedef const struct frame_base *(frame_base_sniffer_ftype) (struct frame_info *next_frame); + +/* Append a frame base sniffer to the list. The sniffers are polled + in the order that they are appended. */ + +extern void frame_base_append_sniffer (struct gdbarch *gdbarch, + frame_base_sniffer_ftype *sniffer); + +/* Set the default frame base. If all else fails, this one is + returned. If this isn't set, the default is to use legacy code + that uses things like the frame ID's base (ulgh!). */ + +extern void frame_base_set_default (struct gdbarch *gdbarch, + const struct frame_base *def); + +/* Iterate through the list of frame base handlers until one returns + an implementation. */ + +extern const struct frame_base *frame_base_find_by_frame (struct frame_info *next_frame); + #endif |