ptrace_resume(data) should process "data" in case of
PTRACE_EVENT_SYSCALL and PTRACE_EVENT_SIGNAL events.

---

 kernel/ptrace.c |   30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

--- PU/kernel/ptrace.c~54_RESUME_USE_DATA       2009-10-01 21:53:01.000000000 
+0200
+++ PU/kernel/ptrace.c  2009-10-01 23:06:36.000000000 +0200
@@ -205,18 +205,6 @@ static u32 ptrace_report_clone(enum utra
        return ret;
 }
 
-static void ptrace_resume_syscall(struct utrace_engine *engine,
-                               struct task_struct *tracee, long data)
-{
-       if (data) {
-               // XXX: until do_send_sig_info()
-               read_lock(&tasklist_lock);
-               if (tracee->signal)
-                       send_sig(data, tracee, 1);
-               read_unlock(&tasklist_lock);
-       }
-}
-
 static u32 ptrace_report_syscall_entry(u32 action,
                                       struct utrace_engine *engine,
                                       struct task_struct *task,
@@ -276,10 +264,9 @@ static u32 ptrace_report_exec(enum utrac
 /*
  * XXX: This all is wrong/racy/crashable
  */
-static void ptrace_resume_signal(struct utrace_engine *engine,
-                                       struct task_struct *tracee, long data)
+static void ptrace_resume_signal(struct ptrace_context* context, int data)
 {
-       siginfo_t *info = ptrace_context(engine)->siginfo;
+       siginfo_t *info = context->siginfo;
 
        if (WARN_ON(!info))
                return;
@@ -891,6 +878,19 @@ static void do_ptrace_resume(struct utra
 {
        struct ptrace_context *context = ptrace_context(engine);
 
+       switch (context->ev_name) {
+       case 0:
+               // XXX: JCTL stop
+               break;
+       case PTRACE_EVENT_SYSCALL:
+               if (data)
+                       send_sig_info(data, SEND_SIG_PRIV, tracee);
+               break;
+       case PTRACE_EVENT_SIGNAL:
+               ptrace_resume_signal(context, data);
+               break;
+       }
+
        context->ev_name = 0;
        context->resume = action;
        ptrace_wake_up(engine, tracee, action);

Reply via email to