aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame-unwind.h
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2004-04-08 20:03:52 +0000
committerAndrew Cagney <cagney@redhat.com>2004-04-08 20:03:52 +0000
commitfb2be677dcb440b001df7739bda229295910a7c8 (patch)
tree343dee28c6245e56eabcebd5fb77ac965c7ab071 /gdb/frame-unwind.h
parent67faf007637dbb56ab9efb68af7a800a29bf3141 (diff)
downloadgdb-fb2be677dcb440b001df7739bda229295910a7c8.zip
gdb-fb2be677dcb440b001df7739bda229295910a7c8.tar.gz
gdb-fb2be677dcb440b001df7739bda229295910a7c8.tar.bz2
2004-04-08 Andrew Cagney <cagney@redhat.com>
* frame-unwind.c (struct frame_unwind_table, frame_unwind_init) (frame_unwind_prepend_unwinder, frame_unwind_append_sniffer) (frame_unwind_find_by_frame): Re-implement the unwind code so that it can both prepend and append sniffers. Replace frame_unwind_register_unwinder with frame_unwind_prepend_unwinder. * tramp-frame.c (tramp_frame_append): Use frame_unwind_prepend_unwinder. * frame-unwind.h (frame_unwind_prepend_unwinder): Replace frame_unwind_register_unwinder. * tramp-frame.h (tramp_frame_prepend_unwinder): Rename tramp_frame_append. * tramp-frame.c (tramp_frame_prepend_unwinder): Update. * mips-linux-tdep.c (mips_linux_init_abi, mips_linux_init_abi) (mips_linux_init_abi): Update.
Diffstat (limited to 'gdb/frame-unwind.h')
-rw-r--r--gdb/frame-unwind.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/gdb/frame-unwind.h b/gdb/frame-unwind.h
index 49f2889..12d6dd2 100644
--- a/gdb/frame-unwind.h
+++ b/gdb/frame-unwind.h
@@ -131,11 +131,14 @@ struct frame_unwind
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);
-
+/* Register a frame unwinder, _prepending_ it to the front of the
+ search list (so it is sniffed before previously registered
+ unwinders). By using a prepend, later calls can install unwinders
+ that override earlier calls. This allows, for instance, an OSABI
+ to install a a more specific sigtramp unwinder that overrides the
+ traditional brute-force unwinder. */
+extern void frame_unwind_prepend_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