support PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK, PTRACE_O_TRACEVFORKDONE.

to start with a SIGSTOP, do not set proc->ftn->status to PS_RUNNING in __runq_add_proc().
  change vfork() set CLONE_VFORK.

refs #266
refs #267
refs #372

support PTRACE_GETEVENTMSG.
  to store ptrace event, add 'unsigned long ptrace_eventmsg;' member in struct fork_tree_node.

refs #273
This commit is contained in:
Susumu Komae
2015-01-14 10:43:18 +09:00
committed by postpeta
parent d46110b4d9
commit 765de119dc
4 changed files with 161 additions and 18 deletions

View File

@@ -349,7 +349,7 @@ int ptrace_traceme(void){
struct fork_tree_node *child, *next;
dkprintf("ptrace_traceme,pid=%d,proc->ftn->parent=%p\n", proc->ftn->pid, proc->ftn->parent);
if (proc->ftn->parent == NULL) {
if (proc->ftn->parent == NULL || proc->ftn->ptrace) {
error = -EPERM;
goto out;
}
@@ -2183,7 +2183,7 @@ void __runq_add_proc(struct process *proc, int cpu_id)
list_add_tail(&proc->sched_list, &v->runq);
++v->runq_len;
proc->cpu_id = cpu_id;
proc->ftn->status = PS_RUNNING;
//proc->ftn->status = PS_RUNNING; /* not set here */
get_cpu_local_var(cpu_id)->status = CPU_STATUS_RUNNING;
dkprintf("runq_add_proc(): tid %d added to CPU[%d]'s runq\n",