2004-11-10 msnyder <msnyder@redhat.com>
authorMichael Snyder <msnyder@vmware.com>
Thu, 11 Nov 2004 19:21:01 +0000 (19:21 +0000)
committerMichael Snyder <msnyder@vmware.com>
Thu, 11 Nov 2004 19:21:01 +0000 (19:21 +0000)
* rs6000-tdep.c (skip_prologue): After saving lr_offset,
must invalidate lr_reg (so we don't try to save it again).
Ditto for cr_offset and cr_reg.

gdb/ChangeLog
gdb/rs6000-tdep.c

index 82ccc9f8e02ea355b69da2189775be5a6d225799..31b05675f9274d81b13990055099f68b69ad6a16 100644 (file)
@@ -1,3 +1,9 @@
+2004-11-10  msnyder  <msnyder@redhat.com>
+
+       * rs6000-tdep.c (skip_prologue): After saving lr_offset, 
+       must invalidate lr_reg (so we don't try to save it again).  
+       Ditto for cr_offset and cr_reg.
+
 2004-11-05  Jon Beniston <jon@beniston.com>
 
        * remote.c (putpkt_binary) Fix PR gdb/1806. Send an ACK 
index 37988a37f64c260e2653672a1a81efaeafd0f655..b5bb1108f90cce266cc4ce11b7f82c5dc9187714 100644 (file)
@@ -981,7 +981,7 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
          continue;
 
        }
-      else if (lr_reg != -1 &&
+      else if (lr_reg >= 0 &&
               /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
               (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
                /* stw Rx, NUM(r1) */
@@ -991,7 +991,9 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
        {       /* where Rx == lr */
          fdata->lr_offset = offset;
          fdata->nosavedpc = 0;
-         lr_reg = 0;
+         /* Invalidate lr_reg, but don't set it to -1.
+            That would mean that it had never been set.  */
+         lr_reg = -2;
          if ((op & 0xfc000003) == 0xf8000000 ||        /* std */
              (op & 0xfc000000) == 0x90000000)          /* stw */
            {
@@ -1001,7 +1003,7 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
          continue;
 
        }
-      else if (cr_reg != -1 &&
+      else if (cr_reg >= 0 &&
               /* std Rx, NUM(r1) || stdu Rx, NUM(r1) */
               (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
                /* stw Rx, NUM(r1) */
@@ -1010,7 +1012,9 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
                ((op & 0xffff0000) == (cr_reg | 0x94010000))))
        {       /* where Rx == cr */
          fdata->cr_offset = offset;
-         cr_reg = 0;
+         /* Invalidate cr_reg, but don't set it to -1.
+            That would mean that it had never been set.  */
+         cr_reg = -2;
          if ((op & 0xfc000003) == 0xf8000000 ||
              (op & 0xfc000000) == 0x90000000)
            {