2008-12-07 Pedro Alves (handle_inferior_event): On a TARGET_WAITKIND_EXITED or TARGET_WAITKIND_SIGNALLED, switch inferior_ptid to the event ptid. * linux_thread_db.c (thread_db_wait): On a TARGET_WAITKIND_EXITED or TARGET_WAITKIND_SIGNALLED, return the ptid the beneath target returned. * inf-ptrace.c (inf_ptrace_wait): Return inferior_ptid instead of minus_one_ptid if the inferior disappeared. * rs6000-nat.c (rs6000_wait): Likewise. * spu-linux-nat.c (spu_child_wait): Likewise. --- gdb/inf-ptrace.c | 2 +- gdb/infrun.c | 2 ++ gdb/linux-thread-db.c | 2 +- gdb/rs6000-nat.c | 2 +- gdb/spu-linux-nat.c | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) Index: src/gdb/infrun.c =================================================================== --- src.orig/gdb/infrun.c 2008-12-07 19:34:12.000000000 +0000 +++ src/gdb/infrun.c 2008-12-07 19:39:05.000000000 +0000 @@ -2271,6 +2271,7 @@ handle_inferior_event (struct execution_ case TARGET_WAITKIND_EXITED: if (debug_infrun) fprintf_unfiltered (gdb_stdlog, "infrun: TARGET_WAITKIND_EXITED\n"); + inferior_ptid = ecs->ptid; target_terminal_ours (); /* Must do this before mourn anyway */ print_stop_reason (EXITED, ecs->ws.value.integer); @@ -2289,6 +2290,7 @@ handle_inferior_event (struct execution_ case TARGET_WAITKIND_SIGNALLED: if (debug_infrun) fprintf_unfiltered (gdb_stdlog, "infrun: TARGET_WAITKIND_SIGNALLED\n"); + inferior_ptid = ecs->ptid; stop_print_frame = 0; target_terminal_ours (); /* Must do this before mourn anyway */ Index: src/gdb/linux-thread-db.c =================================================================== --- src.orig/gdb/linux-thread-db.c 2008-12-07 19:34:30.000000000 +0000 +++ src/gdb/linux-thread-db.c 2008-12-07 19:37:33.000000000 +0000 @@ -889,7 +889,7 @@ thread_db_wait (ptid_t ptid, struct targ if (ourstatus->kind == TARGET_WAITKIND_EXITED || ourstatus->kind == TARGET_WAITKIND_SIGNALLED) - return pid_to_ptid (-1); + return ptid; if (ourstatus->kind == TARGET_WAITKIND_EXECD) { Index: src/gdb/inf-ptrace.c =================================================================== --- src.orig/gdb/inf-ptrace.c 2008-12-07 19:34:33.000000000 +0000 +++ src/gdb/inf-ptrace.c 2008-12-07 19:36:26.000000000 +0000 @@ -410,7 +410,7 @@ inf_ptrace_wait (ptid_t ptid, struct tar /* Claim it exited with unknown signal. */ ourstatus->kind = TARGET_WAITKIND_SIGNALLED; ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN; - return minus_one_ptid; + return inferior_ptid; } /* Ignore terminated detached child processes. */ Index: src/gdb/rs6000-nat.c =================================================================== --- src.orig/gdb/rs6000-nat.c 2008-12-07 19:34:36.000000000 +0000 +++ src/gdb/rs6000-nat.c 2008-12-07 19:36:43.000000000 +0000 @@ -546,7 +546,7 @@ rs6000_wait (ptid_t ptid, struct target_ /* Claim it exited with unknown signal. */ ourstatus->kind = TARGET_WAITKIND_SIGNALLED; ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN; - return minus_one_ptid; + return inferior_ptid; } /* Ignore terminated detached child processes. */ Index: src/gdb/spu-linux-nat.c =================================================================== --- src.orig/gdb/spu-linux-nat.c 2008-12-07 19:34:59.000000000 +0000 +++ src/gdb/spu-linux-nat.c 2008-12-07 19:41:33.000000000 +0000 @@ -444,7 +444,7 @@ spu_child_wait (ptid_t ptid, struct targ /* Claim it exited with unknown signal. */ ourstatus->kind = TARGET_WAITKIND_SIGNALLED; ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN; - return minus_one_ptid; + return inferior_ptid; } store_waitstatus (ourstatus, status);