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 | d2b3737ca379c0fe3621cd79a1a6b8186adcf1f3 (patch) | |
tree | 7b4b5328cb9ef1cd11c9f0378a77b52b2dff9cce /gdb/dummy-frame.h | |
parent | fc64c93ce47ac1cfd0ca29d448b4cf15277ab77d (diff) | |
download | gdb-d2b3737ca379c0fe3621cd79a1a6b8186adcf1f3.tar.gz |
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 d85fcfbe10a..7f3aee8baac 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 |