Mark the automatically attached child with PL_FLAG_CHILD in struct
lwpinfo flags, for PT_FOLLOWFORK auto-attachment. In collaboration with: Dmitry Mikulin <dmitrym juniper net> MFC after: 1 week
This commit is contained in:
parent
3e7cc3cab3
commit
db3273398b
@ -1035,7 +1035,9 @@ fork_return(struct thread *td, struct trapframe *frame)
|
||||
p->p_oppid = p->p_pptr->p_pid;
|
||||
proc_reparent(p, dbg);
|
||||
sx_xunlock(&proctree_lock);
|
||||
td->td_dbgflags |= TDB_CHILD;
|
||||
ptracestop(td, SIGSTOP);
|
||||
td->td_dbgflags &= ~TDB_CHILD;
|
||||
} else {
|
||||
/*
|
||||
* ... otherwise clear the request.
|
||||
|
@ -1145,6 +1145,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
|
||||
pl->pl_flags |= PL_FLAG_FORKED;
|
||||
pl->pl_child_pid = td2->td_dbg_forked;
|
||||
}
|
||||
if (td2->td_dbgflags & TDB_CHILD)
|
||||
pl->pl_flags |= PL_FLAG_CHILD;
|
||||
pl->pl_sigmask = td2->td_sigmask;
|
||||
pl->pl_siglist = td2->td_siglist;
|
||||
strcpy(pl->pl_tdname, td2->td_name);
|
||||
|
@ -384,6 +384,7 @@ do { \
|
||||
process */
|
||||
#define TDB_STOPATFORK 0x00000080 /* Stop at the return from fork (child
|
||||
only) */
|
||||
#define TDB_CHILD 0x00000100 /* New child indicator for ptrace() */
|
||||
|
||||
/*
|
||||
* "Private" flags kept in td_pflags:
|
||||
|
@ -107,6 +107,7 @@ struct ptrace_lwpinfo {
|
||||
#define PL_FLAG_EXEC 0x10 /* exec(2) succeeded */
|
||||
#define PL_FLAG_SI 0x20 /* siginfo is valid */
|
||||
#define PL_FLAG_FORKED 0x40 /* new child */
|
||||
#define PL_FLAG_CHILD 0x80 /* I am from child */
|
||||
sigset_t pl_sigmask; /* LWP signal mask */
|
||||
sigset_t pl_siglist; /* LWP pending signal */
|
||||
struct __siginfo pl_siginfo; /* siginfo for signal */
|
||||
|
Loading…
Reference in New Issue
Block a user