gdb/ChangeLog * remote.c (remote_fetch_registers): Don't try to fetch registers from an already exited inferior. --- gdb/remote.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) Index: src/gdb/remote.c =================================================================== --- src.orig/gdb/remote.c 2007-03-19 19:52:28.000000000 +0000 +++ src/gdb/remote.c 2007-03-20 22:19:58.000000000 +0000 @@ -3684,28 +3684,34 @@ remote_fetch_registers (int regnum) struct remote_state *rs = get_remote_state (); struct remote_arch_state *rsa = get_remote_arch_state (); int i; + int exited; set_thread (PIDGET (inferior_ptid), 1); + exited = (rs->buf[0] == 'W'); + if (regnum >= 0) { struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum); gdb_assert (reg != NULL); - /* If this register might be in the 'g' packet, try that first - - we are likely to read more than one register. If this is the - first 'g' packet, we might be overly optimistic about its - contents, so fall back to 'p'. */ - if (reg->in_g_packet) + if (!exited) { - fetch_registers_using_g (); + /* If this register might be in the 'g' packet, try that first - + we are likely to read more than one register. If this is the + first 'g' packet, we might be overly optimistic about its + contents, so fall back to 'p'. */ if (reg->in_g_packet) + { + fetch_registers_using_g (); + if (reg->in_g_packet) + return; + } + + if (fetch_register_using_p (reg)) return; } - if (fetch_register_using_p (reg)) - return; - /* This register is not available. */ regcache_raw_supply (current_regcache, reg->regnum, NULL); set_register_cached (reg->regnum, -1); @@ -3713,16 +3719,18 @@ remote_fetch_registers (int regnum) return; } - fetch_registers_using_g (); + if (!exited) + fetch_registers_using_g (); for (i = 0; i < NUM_REGS; i++) - if (!rsa->regs[i].in_g_packet) - if (!fetch_register_using_p (&rsa->regs[i])) - { - /* This register is not available. */ - regcache_raw_supply (current_regcache, i, NULL); - set_register_cached (i, -1); - } + if (exited + || (!rsa->regs[i].in_g_packet + && !fetch_register_using_p (&rsa->regs[i]))) + { + /* This register is not available. */ + regcache_raw_supply (current_regcache, i, NULL); + set_register_cached (i, -1); + } } /* Prepare to store registers. Since we may send them all (using a