aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2007-01-11 17:18:22 +0000
committerDaniel Jacobowitz <drow@false.org>2007-01-11 17:18:22 +0000
commitd57df5e4d8db6b79c56666420ec87ed3360c4819 (patch)
tree6414dcc3cac8bf8c5e3332e21c3ec92d89605923 /gdb/frame.c
parentdc4503c6810ce9cca69448d2cc0a7804671ffef4 (diff)
downloadgdb-d57df5e4d8db6b79c56666420ec87ed3360c4819.zip
gdb-d57df5e4d8db6b79c56666420ec87ed3360c4819.tar.gz
gdb-d57df5e4d8db6b79c56666420ec87ed3360c4819.tar.bz2
* frame.c (get_prev_frame_1): Check PC_REGNUM before using it.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r--gdb/frame.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/gdb/frame.c b/gdb/frame.c
index 8d39305..93258d7 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1221,10 +1221,17 @@ get_prev_frame_1 (struct frame_info *this_frame)
have different frame IDs, the new frame will be bogus; two
functions can't share a register save slot for the PC. This can
happen when the prologue analyzer finds a stack adjustment, but
- no PC save. This check does assume that the "PC register" is
- roughly a traditional PC, even if the gdbarch_unwind_pc method
- frobs it. */
+ no PC save.
+
+ This check does assume that the "PC register" is roughly a
+ traditional PC, even if the gdbarch_unwind_pc method adjusts
+ it (we do not rely on the value, only on the unwound PC being
+ dependent on this value). A potential improvement would be
+ to have the frame prev_pc method and the gdbarch unwind_pc
+ method set the same lval and location information as
+ frame_register_unwind. */
if (this_frame->level > 0
+ && PC_REGNUM >= 0
&& get_frame_type (this_frame) == NORMAL_FRAME
&& get_frame_type (this_frame->next) == NORMAL_FRAME)
{