2002-09-26 Andrew Cagney <ac131313@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Thu, 26 Sep 2002 22:34:07 +0000 (22:34 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 26 Sep 2002 22:34:07 +0000 (22:34 +0000)
* rs6000-tdep.c (rs6000_frame_chain): Don't chain past the dummy
frame.

gdb/ChangeLog
gdb/rs6000-tdep.c

index 2a87dc62ede6e426d21edaffe9bc0e32b8d38950..9d17e40a557f41e82f55fb07f0b8f7a87be24311 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-26  Andrew Cagney  <ac131313@redhat.com>
+
+       * rs6000-tdep.c (rs6000_frame_chain): Don't chain past the dummy
+       frame.
+
 2002-09-26  Andrew Cagney  <ac131313@redhat.com>
 
        * rs6000-tdep.c (rs6000_extract_struct_value_address): Return 0.
index ee5305e8b7725bc2bdf3c457596e1c1b8bf9aa04..e6a68ef202b7d079983895b3946277597ae1757b 100644 (file)
@@ -1741,7 +1741,9 @@ rs6000_frame_chain (struct frame_info *thisframe)
   int wordsize = gdbarch_tdep (current_gdbarch)->wordsize;
 
   if (PC_IN_CALL_DUMMY (thisframe->pc, thisframe->frame, thisframe->frame))
-    return thisframe->frame;   /* dummy frame same as caller's frame */
+    /* A dummy frame always correctly chains back to the previous
+       frame.  */
+    return read_memory_addr ((thisframe)->frame, wordsize);
 
   if (inside_entry_file (thisframe->pc) ||
       thisframe->pc == entry_point_address ())
@@ -1758,13 +1760,6 @@ rs6000_frame_chain (struct frame_info *thisframe)
     fp = FRAME_FP (thisframe);
   else
     fp = read_memory_addr ((thisframe)->frame, wordsize);
-
-  lr = read_register (gdbarch_tdep (current_gdbarch)->ppc_lr_regnum);
-  if (lr == entry_point_address ())
-    if (fp != 0 && (fpp = read_memory_addr (fp, wordsize)) != 0)
-      if (PC_IN_CALL_DUMMY (lr, fpp, fpp))
-       return fpp;
-
   return fp;
 }