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 | 4 ++-- gdb/rs6000-nat.c | 2 +- gdb/spu-linux-nat.c | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) Index: src/gdb/infrun.c =================================================================== --- src.orig/gdb/infrun.c 2008-12-07 20:26:06.000000000 +0000 +++ src/gdb/infrun.c 2008-12-07 20:26:07.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 20:26:06.000000000 +0000 +++ src/gdb/linux-thread-db.c 2008-12-07 20:26:39.000000000 +0000 @@ -888,8 +888,8 @@ thread_db_wait (ptid_t ptid, struct targ return ptid; if (ourstatus->kind == TARGET_WAITKIND_EXITED - || ourstatus->kind == TARGET_WAITKIND_SIGNALLED) - return pid_to_ptid (-1); + || ourstatus->kind == TARGET_WAITKIND_SIGNALLED) + return ptid; if (ourstatus->kind == TARGET_WAITKIND_EXECD) { Index: src/gdb/inf-ptrace.c =================================================================== --- src.orig/gdb/inf-ptrace.c 2008-12-07 20:26:06.000000000 +0000 +++ src/gdb/inf-ptrace.c 2008-12-07 20:26:07.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 20:26:06.000000000 +0000 +++ src/gdb/rs6000-nat.c 2008-12-07 20:26:07.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 20:26:06.000000000 +0000 +++ src/gdb/spu-linux-nat.c 2008-12-07 20:26:07.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);