* frame.c (get_prev_frame_1): Check PC_REGNUM before using it.
authorDaniel Jacobowitz <drow@false.org>
Thu, 11 Jan 2007 17:18:22 +0000 (17:18 +0000)
committerDaniel Jacobowitz <drow@false.org>
Thu, 11 Jan 2007 17:18:22 +0000 (17:18 +0000)
gdb/ChangeLog
gdb/frame.c

index bda8146da4d955431c3a50a4ddd7b373bf776883..bc417c18a74a41223bdd9327dae2fb8b86bcb801 100644 (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>
 
        * MAINTAINERS (Global Maintainers): Ulrich Weigand has accepted
index 8d393050c685fc5b5a02033e99aaa6fa5fe85730..93258d7720eb04bd9bba6829c6e9c04a11499b15 100644 (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
      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)
     {