From 5e0f933e908cdbdec03ad7b7a575d645912b9194 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Sun, 24 Nov 2002 15:06:08 +0000 Subject: 2002-11-24 Andrew Cagney * dummy-frame.c (pc_in_dummy_frame): New function. (generic_pc_in_call_dummy): Call pc_in_dummy_frame. (find_dummy_frame): Update comment. (generic_pop_current_frame): Use get_frame_type. * dummy-frame.h (pc_in_dummy_frame): Declare. * frame.c (set_unwind_by_pc): Use pc_in_dummy_frame. (create_new_frame): Use pc_in_dummy_frame. (get_prev_frame): Use pc_in_dummy_frame. (frame_saved_regs_register_unwind): Use get_prev_frame. (deprecated_generic_get_saved_register): Use get_prev_frame. --- gdb/dummy-frame.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'gdb/dummy-frame.h') diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h index d85fcfb..7f3aee8 100644 --- a/gdb/dummy-frame.h +++ b/gdb/dummy-frame.h @@ -60,6 +60,31 @@ extern void dummy_frame_register_unwind (struct frame_info *frame, extern CORE_ADDR dummy_frame_pc_unwind (struct frame_info *frame, void **unwind_cache); +/* Does the PC fall in a dummy frame? + + This function is used by "frame.c" when creating a new `struct + frame_info'. + + Note that there is also very similar code in breakpoint.c (where + the bpstat stop reason is computed). It is looking for a PC + falling on a dummy_frame breakpoint. Perhaphs this, and that code + should be combined? + + Architecture dependant code, that has access to a frame, should not + use this function. Instead (get_frame_type() == DUMMY_FRAME) + should be used. + + Hmm, but what about threads? When the dummy-frame code tries to + relocate a dummy frame's saved registers it definitly needs to + differentiate between threads (otherwize it will do things like + clean-up the wrong threads frames). However, when just trying to + identify a dummy-frame that shouldn't matter. The wost that can + happen is that a thread is marked as sitting in a dummy frame when, + in reality, its corrupted its stack, to the point that a PC is + pointing into a dummy frame. */ + +extern int pc_in_dummy_frame (CORE_ADDR pc); + /* Return the regcache that belongs to the dummy-frame identifed by PC and FP, or NULL if no such frame exists. */ /* FIXME: cagney/2002-11-08: The function only exists because of -- cgit v1.1