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.
This commit is contained in:
Andrew Cagney
2004-04-08 20:03:52 +00:00
parent 67faf00763
commit fb2be677dc
6 changed files with 58 additions and 28 deletions

View File

@@ -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