diff options
Diffstat (limited to 'gdb/inf-ptrace.c')
-rw-r--r-- | gdb/inf-ptrace.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index 301d59d..797a70a 100644 --- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -89,11 +89,14 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child) if (ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0) == -1) perror_with_name (("ptrace")); + /* Switch inferior_ptid out of the parent's way. */ + inferior_ptid = pid_to_ptid (fpid); + /* Delete the parent. */ - delete_thread_silent (last_tp->ptid); + detach_inferior (pid); /* Add the child. */ - inferior_ptid = pid_to_ptid (fpid); + add_inferior (fpid); tp = add_thread_silent (inferior_ptid); tp->step_resume_breakpoint = step_resume_breakpoint; @@ -111,6 +114,7 @@ inf_ptrace_follow_fork (struct target_ops *ops, int follow_child) if (ptrace (PT_DETACH, fpid, (PTRACE_TYPE_ARG3)1, 0) == -1) perror_with_name (("ptrace")); + detach_inferior (pid); } return 0; @@ -247,6 +251,8 @@ inf_ptrace_attach (char *args, int from_tty) inferior_ptid = pid_to_ptid (pid); + add_inferior (pid); + /* Always add a main thread. If some target extends the ptrace target, it should decorate the ptid later with more info. */ add_thread_silent (inferior_ptid); @@ -307,6 +313,7 @@ inf_ptrace_detach (char *args, int from_tty) #endif inferior_ptid = null_ptid; + detach_inferior (pid); unpush_target (ptrace_ops_hack); } |