2002-09-24 Andrew Cagney * rs6000-tdep.c (rs6000_frame_saved_pc): If the link register wasn't saved, and the next innermost frame is a dummy, return the dummy frame's link register. Index: rs6000-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v retrieving revision 1.82 diff -u -r1.82 rs6000-tdep.c --- rs6000-tdep.c 17 Sep 2002 20:42:01 -0000 1.82 +++ rs6000-tdep.c 24 Sep 2002 14:06:50 -0000 @@ -1527,6 +1527,16 @@ if (fi->next->signal_handler_caller) return read_memory_addr (fi->next->frame + SIG_FRAME_LR_OFFSET, wordsize); + else if (PC_IN_CALL_DUMMY (get_next_frame (fi)->pc, 0, 0)) + /* The link register wasn't saved by this frame and the next + (inner, newer) frame is a dummy. Get the link register + value by unwinding it from that [dummy] frame. */ + { + ULONGEST lr; + frame_unwind_unsigned_register (get_next_frame (fi), + tdep->ppc_lr_regnum, &lr); + return lr; + } else return read_memory_addr (FRAME_CHAIN (fi) + tdep->lr_frame_offset, wordsize);