No functional changes. Currently ptrace_report_syscall_exit() and ptrace_report_signal(UTRACE_SIGNAL_HANDLER) can see either UTRACE_RESUME or UTRACE_BLOCKSTEP/UTRACE_SINGLESTEP, but we are going to change this. Change the code to not assume that resume != UTRACE_RESUME means stepping. Add the trivial helper, is_step_resume(), which does the check.
Signed-off-by: Oleg Nesterov <o...@redhat.com> --- kernel/ptrace-utrace.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) --- kstub/kernel/ptrace-utrace.c~3_resume_step_helper 2010-09-20 03:53:31.000000000 +0200 +++ kstub/kernel/ptrace-utrace.c 2010-09-20 03:53:31.000000000 +0200 @@ -418,6 +418,11 @@ static u32 ptrace_report_syscall_entry(u return UTRACE_SYSCALL_RUN | UTRACE_STOP; } +static inline bool is_step_resume(enum utrace_resume_action resume) +{ + return resume == UTRACE_BLOCKSTEP || resume == UTRACE_SINGLESTEP; +} + static u32 ptrace_report_syscall_exit(u32 action, struct utrace_engine *engine, struct pt_regs *regs) { @@ -426,10 +431,7 @@ static u32 ptrace_report_syscall_exit(u3 if (ptrace_event_pending(ctx)) return UTRACE_STOP; - if (ctx->resume != UTRACE_RESUME) { - WARN_ON(ctx->resume != UTRACE_BLOCKSTEP && - ctx->resume != UTRACE_SINGLESTEP); - + if (is_step_resume(ctx->resume)) { ctx->signr = SIGTRAP; return UTRACE_INTERRUPT; } @@ -517,10 +519,7 @@ static u32 ptrace_report_signal(u32 acti if (WARN_ON(ctx->siginfo)) ctx->siginfo = NULL; - if (resume != UTRACE_RESUME) { - WARN_ON(resume != UTRACE_BLOCKSTEP && - resume != UTRACE_SINGLESTEP); - + if (is_step_resume(resume)) { set_stop_code(ctx, PTRACE_EVENT_SIGTRAP); return UTRACE_STOP | UTRACE_SIGNAL_IGN; }