|
@@ -22,9 +22,13 @@ static void handle_signal(struct pt_regs *regs, unsigned long signr,
|
|
|
struct k_sigaction *ka, siginfo_t *info)
|
|
|
{
|
|
|
sigset_t *oldset = sigmask_to_save();
|
|
|
+ int singlestep = 0;
|
|
|
unsigned long sp;
|
|
|
int err;
|
|
|
|
|
|
+ if ((current->ptrace & PT_DTRACE) && (current->ptrace & PT_PTRACED))
|
|
|
+ singlestep = 1;
|
|
|
+
|
|
|
/* Did we come from a system call? */
|
|
|
if (PT_REGS_SYSCALL_NR(regs) >= 0) {
|
|
|
/* If so, check system call restarting.. */
|
|
@@ -61,7 +65,7 @@ static void handle_signal(struct pt_regs *regs, unsigned long signr,
|
|
|
if (err)
|
|
|
force_sigsegv(signr, current);
|
|
|
else
|
|
|
- signal_delivered(signr, info, ka, regs, 0);
|
|
|
+ signal_delivered(signr, info, ka, regs, singlestep);
|
|
|
}
|
|
|
|
|
|
static int kern_do_signal(struct pt_regs *regs)
|