You are right, thanks, suppress_sigtrap() is no longer needed. Surprisingly, it even has the comment which explains why it was needed before, and since the recent changes SIGTRAP from tracehook_report_syscall_exit() pathes is just not possible with utrace.
This should also fix the compilation on s390. --- kernel/ptrace-utrace.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) --- UTRACE-PTRACE/kernel/ptrace-utrace.c~141_KILL_SUPPRESS_SIGTRAP 2009-12-04 16:19:17.000000000 +0100 +++ UTRACE-PTRACE/kernel/ptrace-utrace.c 2009-12-05 16:16:15.000000000 +0100 @@ -324,16 +324,6 @@ static void ptrace_clone_attach(struct t set_tsk_thread_flag(child, TIF_SIGPENDING); } -/* - * Prevents sending SIGTRAP after tracehook_report_syscall_exit(). - * Called when we are going to emulate the stop before SYSCALL_EXIT. - */ -static void suppress_sigtrap(struct task_struct *task) -{ - if (test_tsk_thread_flag(task, TIF_SINGLESTEP)) - user_disable_single_step(task); -} - static u32 ptrace_report_clone(enum utrace_resume_action action, struct utrace_engine *engine, struct task_struct *parent, @@ -369,8 +359,6 @@ static u32 ptrace_report_clone(enum utra if (!event) return UTRACE_RESUME; - suppress_sigtrap(parent); - set_stop_code(ctx, event); ctx->eventmsg = child->pid; /* @@ -411,11 +399,8 @@ static u32 ptrace_report_syscall_entry(u set_syscall_code(ctx); - if (unlikely(ctx->options & PTRACE_O_SYSEMU)) { - suppress_sigtrap(task); + if (unlikely(ctx->options & PTRACE_O_SYSEMU)) return UTRACE_SYSCALL_ABORT | UTRACE_REPORT; - } - /* * Stop now to report. We will get another callback after * we resume, with the UTRACE_SYSCALL_RESUMED flag set. @@ -465,9 +450,7 @@ static u32 ptrace_report_exec(enum utrac return UTRACE_RESUME; } - suppress_sigtrap(task); set_stop_code(ctx, PTRACE_EVENT_EXEC); - return UTRACE_STOP; }