Commit c45aea27617d6a1e0aacddc3b0233f704222fcbd

Authored by Roland McGrath
Committed by Linus Torvalds
1 parent fa8e26ccd4

tracehook: tracehook_signal_handler

This defines tracehook_signal_handler() as a hook for the arch signal
handling code to call.  It gives ptrace the opportunity to stop for a
pseudo-single-step trap immediately after signal handler setup is done.

Signed-off-by: Roland McGrath <roland@redhat.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 23 additions and 0 deletions Side-by-side Diff

include/linux/tracehook.h
... ... @@ -289,5 +289,28 @@
289 289 ptrace_release_task(task);
290 290 }
291 291  
  292 +/**
  293 + * tracehook_signal_handler - signal handler setup is complete
  294 + * @sig: number of signal being delivered
  295 + * @info: siginfo_t of signal being delivered
  296 + * @ka: sigaction setting that chose the handler
  297 + * @regs: user register state
  298 + * @stepping: nonzero if debugger single-step or block-step in use
  299 + *
  300 + * Called by the arch code after a signal handler has been set up.
  301 + * Register and stack state reflects the user handler about to run.
  302 + * Signal mask changes have already been made.
  303 + *
  304 + * Called without locks, shortly before returning to user mode
  305 + * (or handling more signals).
  306 + */
  307 +static inline void tracehook_signal_handler(int sig, siginfo_t *info,
  308 + const struct k_sigaction *ka,
  309 + struct pt_regs *regs, int stepping)
  310 +{
  311 + if (stepping)
  312 + ptrace_notify(SIGTRAP);
  313 +}
  314 +
292 315 #endif /* <linux/tracehook.h> */