Convert ptrace.c to use context->options.

I guess ptrace_report_clone() still needs changes... bbut hopefully
ptrace_clone_attach() is fine.

---

--- PU/kernel/ptrace.c~21_USE_CTX_OPTS  2009-09-04 18:01:09.000000000 +0200
+++ PU/kernel/ptrace.c  2009-09-04 18:33:03.000000000 +0200
@@ -204,7 +204,9 @@ static u32 ptrace_report_exec(enum utrac
                              const struct linux_binprm *bprm,
                              struct pt_regs *regs)
 {
-       if (task->ptrace & PT_TRACE_EXEC)
+       struct ptrace_context *context = ptrace_context(engine);
+
+       if (context->options & PTRACE_O_TRACEEXEC)
                return utrace_ptrace_event(task, PTRACE_EVENT_EXEC, 0);
 
        /*
@@ -264,7 +266,7 @@ static u32 ptrace_report_clone(enum utra
        int event;
 
        if ((clone_flags & CLONE_VFORK) &&
-           (parent->ptrace & PT_TRACE_VFORK_DONE)) {
+           (context->options & PTRACE_O_TRACEVFORKDONE)) {
                /*
                 * Stash the child PID for a PTRACE_EVENT_VFORK_DONE report,
                 * even if we don't report this clone event itself.  Mark
@@ -284,12 +286,12 @@ static u32 ptrace_report_clone(enum utra
 
        event = 0;
        if (clone_flags & CLONE_VFORK) {
-               if (parent->ptrace & PT_TRACE_VFORK)
+               if (context->options & PTRACE_O_TRACEVFORK)
                        event = PTRACE_EVENT_VFORK;
        } else if ((clone_flags & CSIGNAL) != SIGCHLD) {
-               if (parent->ptrace & PT_TRACE_CLONE)
+               if (context->options & PTRACE_O_TRACECLONE)
                        event = PTRACE_EVENT_CLONE;
-       } else if (parent->ptrace & PT_TRACE_FORK) {
+       } else if (context->options & PTRACE_O_TRACEFORK) {
                event = PTRACE_EVENT_FORK;
        }
 
@@ -306,10 +308,12 @@ static u32 ptrace_report_clone(enum utra
        return UTRACE_RESUME;
 }
 
-static u32 ptrace_report_syscall(u32 action, struct task_struct *task)
+static u32 ptrace_report_syscall(u32 action, struct utrace_engine *engine,
+                                       struct task_struct *task)
 {
+       struct ptrace_context *context = ptrace_context(engine);
        int code = SIGTRAP;
-       if (task->ptrace & PT_TRACESYSGOOD)
+       if (context->options & PTRACE_O_TRACESYSGOOD)
                code |= 0x80;
        return utrace_ptrace_report(action, task, PTRACE_EVENT_SYSCALL, code);
 }
@@ -326,7 +330,7 @@ static u32 ptrace_report_syscall_entry(u
        if (ptrace_syscall_action(task))
                return UTRACE_SYSCALL_ABORT | UTRACE_RESUME;
 
-       return ptrace_report_syscall(UTRACE_SYSCALL_RUN, task);
+       return ptrace_report_syscall(UTRACE_SYSCALL_RUN, engine, task);
 }
 
 /*
@@ -364,7 +368,7 @@ static u32 ptrace_report_syscall_exit(en
                 */
                user_disable_single_step(task);
 
-       return ptrace_report_syscall(0, task);
+       return ptrace_report_syscall(0, engine, task);
 }
 
 static u32 ptrace_resumed(struct task_struct *task,
@@ -970,6 +974,7 @@ static int ptrace_setsiginfo(struct task
 static int ptrace_resume(struct task_struct *child, long request, long data)
 {
        struct utrace_engine *engine;
+       struct ptrace_context *context;
        enum utrace_resume_action action;
        enum utrace_syscall_action syscall;
        int ret = 0;
@@ -982,6 +987,8 @@ static int ptrace_resume(struct task_str
        if (IS_ERR(engine))
                return -ESRCH;
 
+       context = ptrace_context(engine);
+
        syscall = UTRACE_SYSCALL_RUN;
 #ifdef PTRACE_SYSEMU
        if (request == PTRACE_SYSEMU || request == PTRACE_SYSEMU_SINGLESTEP)
@@ -1040,7 +1047,7 @@ static int ptrace_resume(struct task_str
                         */
                        if (request == PTRACE_SYSCALL) {
                                data = SIGTRAP;
-                               if (child->ptrace & PT_TRACESYSGOOD)
+                               if (context->options & PTRACE_O_TRACESYSGOOD)
                                        data |= 0x80;
                                ptrace_set_stop_event(child,
                                                      PTRACE_EVENT_SYSCALL);
@@ -1076,7 +1083,7 @@ static int ptrace_resume(struct task_str
                         */
                        data = 0;
                        event = 0;
-                       if (child->ptrace & PT_TRACE_VFORK_DONE) {
+                       if (context->options & PTRACE_O_TRACEVFORKDONE) {
                                ptrace_set_stop_event(child,
                                                      PTRACE_EVENT_VFORK);
                                action = UTRACE_REPORT;

Reply via email to