X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fframe-unwind.h;h=e4cf3201c091d9bda08c38a35b01502e80e18abf;hb=809df4465f01277ab689fb82b3f16ff79f9a2606;hp=35eeebf56cc96351ee0ab113648166822497170a;hpb=0fb0cc7590113e9b459dfcc48dc71c9d419d9580;p=binutils-gdb.git diff --git a/gdb/frame-unwind.h b/gdb/frame-unwind.h index 35eeebf56cc..e4cf3201c09 100644 --- a/gdb/frame-unwind.h +++ b/gdb/frame-unwind.h @@ -1,6 +1,7 @@ /* Definitions for a frame unwinder, for GDB, the GNU debugger. - Copyright (C) 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. This file is part of GDB. @@ -121,6 +122,13 @@ typedef struct value * (frame_prev_register_ftype) typedef void (frame_dealloc_cache_ftype) (struct frame_info *self, void *this_cache); +/* Assuming the frame chain: (outer) prev <-> this <-> next (inner); + use THIS frame, and implicitly the NEXT frame's register unwind + method, return PREV frame's architecture. */ + +typedef struct gdbarch *(frame_prev_arch_ftype) (struct frame_info *this_frame, + void **this_prologue_cache); + struct frame_unwind { /* The frame's type. Should this instead be a collection of @@ -133,6 +141,7 @@ struct frame_unwind const struct frame_data *unwind_data; frame_sniffer_ftype *sniffer; frame_dealloc_cache_ftype *dealloc_cache; + frame_prev_arch_ftype *prev_arch; }; /* Register a frame unwinder, _prepending_ it to the front of the @@ -151,11 +160,12 @@ extern void frame_unwind_prepend_unwinder (struct gdbarch *gdbarch, extern void frame_unwind_append_unwinder (struct gdbarch *gdbarch, const struct frame_unwind *unwinder); -/* Iterate through sniffers for THIS frame until one returns with an - unwinder implementation. Possibly initialize THIS_CACHE. */ +/* Iterate through sniffers for THIS_FRAME frame until one returns with an + unwinder implementation. THIS_FRAME->UNWIND must be NULL, it will get set + by this function. Possibly initialize THIS_CACHE. */ -extern const struct frame_unwind *frame_unwind_find_by_frame (struct frame_info *this_frame, - void **this_cache); +extern void frame_unwind_find_by_frame (struct frame_info *this_frame, + void **this_cache); /* Helper functions for value-based register unwinding. These return a (possibly lazy) value of the appropriate type. */