* frame.c (get_prev_frame_1): Check PC_REGNUM before using it.

This commit is contained in:
Daniel Jacobowitz 2007-01-11 17:18:22 +00:00
parent dc4503c681
commit d57df5e4d8
2 changed files with 14 additions and 3 deletions

View file

@ -1,3 +1,7 @@
2007-01-11 Daniel Jacobowitz <dan@codesourcery.com>
* frame.c (get_prev_frame_1): Check PC_REGNUM before using it.
2007-01-10 Jim Blandy <jimb@codesourcery.com> 2007-01-10 Jim Blandy <jimb@codesourcery.com>
* MAINTAINERS (Global Maintainers): Ulrich Weigand has accepted * MAINTAINERS (Global Maintainers): Ulrich Weigand has accepted

View file

@ -1221,10 +1221,17 @@ get_prev_frame_1 (struct frame_info *this_frame)
have different frame IDs, the new frame will be bogus; two have different frame IDs, the new frame will be bogus; two
functions can't share a register save slot for the PC. This can functions can't share a register save slot for the PC. This can
happen when the prologue analyzer finds a stack adjustment, but happen when the prologue analyzer finds a stack adjustment, but
no PC save. This check does assume that the "PC register" is no PC save.
roughly a traditional PC, even if the gdbarch_unwind_pc method
frobs it. */ 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 if (this_frame->level > 0
&& PC_REGNUM >= 0
&& get_frame_type (this_frame) == NORMAL_FRAME && get_frame_type (this_frame) == NORMAL_FRAME
&& get_frame_type (this_frame->next) == NORMAL_FRAME) && get_frame_type (this_frame->next) == NORMAL_FRAME)
{ {