Index: gdb/rs6000-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v retrieving revision 1.318 diff -u -p -r1.318 rs6000-tdep.c --- gdb/rs6000-tdep.c 15 Jul 2008 18:32:06 -0000 1.318 +++ gdb/rs6000-tdep.c 28 Jul 2008 20:49:24 -0000 @@ -117,6 +117,7 @@ struct rs6000_framedata by which we decrement sp to allocate the frame */ int saved_gpr; /* smallest # of saved gpr */ + int saved_gpr_max; /* Largest # of saved gpr */ int saved_fpr; /* smallest # of saved fpr */ int saved_vr; /* smallest # of saved vr */ int saved_ev; /* smallest # of saved ev */ @@ -1197,6 +1198,7 @@ skip_prologue (struct gdbarch *gdbarch, memset (fdata, 0, sizeof (struct rs6000_framedata)); fdata->saved_gpr = -1; + fdata->saved_gpr_max = -1; fdata->saved_fpr = -1; fdata->saved_vr = -1; fdata->saved_ev = -1; @@ -1282,6 +1284,8 @@ skip_prologue (struct gdbarch *gdbarch, op &= ~3UL; fdata->gpr_offset = SIGNED_SHORT (op) + offset; } + if (fdata->saved_gpr_max < reg) + fdata->saved_gpr_max = reg; continue; } @@ -2571,7 +2575,7 @@ rs6000_frame_cache (struct frame_info *t { int i; CORE_ADDR gpr_addr = cache->base + fdata.gpr_offset; - for (i = fdata.saved_gpr; i < ppc_num_gprs; i++) + for (i = fdata.saved_gpr; i <= fdata.saved_gpr_max; i++) { cache->saved_regs[tdep->ppc_gp0_regnum + i].addr = gpr_addr; gpr_addr += wordsize;