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);