aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbserver/server.c')
-rw-r--r--gdb/gdbserver/server.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 9c06443..96e3a18 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -285,11 +285,15 @@ start_inferior (char **argv)
(assuming success). */
last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
- target_post_create_inferior ();
-
+ /* The last_status.kind was set by the call to ptrace(PTRACE_TRACEME, ...).
+ At this point, the target process, if it exits, is stopped. Do not call
+ the function target_post_create_inferior if the process has already
+ exited, as the target implementation of the routine may rely on the
+ process being live. */
if (last_status.kind != TARGET_WAITKIND_EXITED
&& last_status.kind != TARGET_WAITKIND_SIGNALLED)
{
+ target_post_create_inferior ();
current_thread->last_resume_kind = resume_stop;
current_thread->last_status = last_status;
}