--- remote.c.old 2003-12-02 03:05:46.000000000 +0000 +++ remote.c 2003-12-04 07:19:38.000000000 +0000 @@ -3498,19 +3498,31 @@ remote_fetch_registers (int regnum) warning ("Remote reply is too short: %s", buf); } supply_them: { - int i; + int i, end_targ_regs=0; for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++) { struct packet_reg *r = &rs->regs[i]; + + if (buf[r->offset * 2] == 0) + end_targ_regs = 1; /* end of registers supplied by target */ if (r->in_g_packet) { - supply_register (r->regnum, regs + r->offset); - if (buf[r->offset * 2] == 'x') - set_register_cached (i, -1); + if (end_targ_regs) + { + /* If the target hasn't sent enough registers, set + the remainder to 0. */ + supply_register (r->regnum, 0); + } + else + { + supply_register (r->regnum, regs + r->offset); + if (buf[r->offset * 2] == 'x') + set_register_cached (i, -1); + } } } } }