diff options
author | Andrew Cagney <cagney@redhat.com> | 2002-11-24 15:06:08 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2002-11-24 15:06:08 +0000 |
commit | 5e0f933e908cdbdec03ad7b7a575d645912b9194 (patch) | |
tree | da44d14e03d31c728cd0e26c21953c450bf12f1b /gdb/dummy-frame.h | |
parent | 7d8547c9602def946b932d1416593b8c44456d65 (diff) | |
download | gdb-5e0f933e908cdbdec03ad7b7a575d645912b9194.zip gdb-5e0f933e908cdbdec03ad7b7a575d645912b9194.tar.gz gdb-5e0f933e908cdbdec03ad7b7a575d645912b9194.tar.bz2 |
2002-11-24 Andrew Cagney <ac131313@redhat.com>
* 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.
Diffstat (limited to 'gdb/dummy-frame.h')
-rw-r--r-- | gdb/dummy-frame.h | 25 |
1 files changed, 25 insertions, 0 deletions
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 |