|
@@ -273,6 +273,18 @@ static inline void user_enable_block_step(struct task_struct *task)
|
|
|
}
|
|
|
#endif /* arch_has_block_step */
|
|
|
|
|
|
+#ifdef ARCH_HAS_USER_SINGLE_STEP_INFO
|
|
|
+extern void user_single_step_siginfo(struct task_struct *tsk,
|
|
|
+ struct pt_regs *regs, siginfo_t *info);
|
|
|
+#else
|
|
|
+static inline void user_single_step_siginfo(struct task_struct *tsk,
|
|
|
+ struct pt_regs *regs, siginfo_t *info)
|
|
|
+{
|
|
|
+ memset(info, 0, sizeof(*info));
|
|
|
+ info->si_signo = SIGTRAP;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#ifndef arch_ptrace_stop_needed
|
|
|
/**
|
|
|
* arch_ptrace_stop_needed - Decide whether arch_ptrace_stop() should be called
|