|
@@ -1,4 +1,4 @@
|
|
-/*
|
|
|
|
|
|
+/*
|
|
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
|
|
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
|
|
* Licensed under the GPL
|
|
* Licensed under the GPL
|
|
*/
|
|
*/
|
|
@@ -36,7 +36,7 @@ EXPORT_SYMBOL(unblock_signals);
|
|
|
|
|
|
/*
|
|
/*
|
|
* OK, we're invoking a handler
|
|
* OK, we're invoking a handler
|
|
- */
|
|
|
|
|
|
+ */
|
|
static int handle_signal(struct pt_regs *regs, unsigned long signr,
|
|
static int handle_signal(struct pt_regs *regs, unsigned long signr,
|
|
struct k_sigaction *ka, siginfo_t *info,
|
|
struct k_sigaction *ka, siginfo_t *info,
|
|
sigset_t *oldset)
|
|
sigset_t *oldset)
|
|
@@ -88,7 +88,7 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr,
|
|
force_sigsegv(signr, current);
|
|
force_sigsegv(signr, current);
|
|
} else {
|
|
} else {
|
|
spin_lock_irq(¤t->sighand->siglock);
|
|
spin_lock_irq(¤t->sighand->siglock);
|
|
- sigorsets(¤t->blocked, ¤t->blocked,
|
|
|
|
|
|
+ sigorsets(¤t->blocked, ¤t->blocked,
|
|
&ka->sa.sa_mask);
|
|
&ka->sa.sa_mask);
|
|
if(!(ka->sa.sa_flags & SA_NODEFER))
|
|
if(!(ka->sa.sa_flags & SA_NODEFER))
|
|
sigaddset(¤t->blocked, signr);
|
|
sigaddset(¤t->blocked, signr);
|
|
@@ -136,7 +136,7 @@ static int kern_do_signal(struct pt_regs *regs)
|
|
PT_REGS_RESTART_SYSCALL(regs);
|
|
PT_REGS_RESTART_SYSCALL(regs);
|
|
break;
|
|
break;
|
|
case -ERESTART_RESTARTBLOCK:
|
|
case -ERESTART_RESTARTBLOCK:
|
|
- PT_REGS_SYSCALL_RET(regs) = __NR_restart_syscall;
|
|
|
|
|
|
+ PT_REGS_ORIG_SYSCALL(regs) = __NR_restart_syscall;
|
|
PT_REGS_RESTART_SYSCALL(regs);
|
|
PT_REGS_RESTART_SYSCALL(regs);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -146,7 +146,7 @@ static int kern_do_signal(struct pt_regs *regs)
|
|
* you set a breakpoint on a system call instruction and singlestep
|
|
* you set a breakpoint on a system call instruction and singlestep
|
|
* from it, the tracing thread used to PTRACE_SINGLESTEP the process
|
|
* from it, the tracing thread used to PTRACE_SINGLESTEP the process
|
|
* rather than PTRACE_SYSCALL it, allowing the system call to execute
|
|
* rather than PTRACE_SYSCALL it, allowing the system call to execute
|
|
- * on the host. The tracing thread will check this flag and
|
|
|
|
|
|
+ * on the host. The tracing thread will check this flag and
|
|
* PTRACE_SYSCALL if necessary.
|
|
* PTRACE_SYSCALL if necessary.
|
|
*/
|
|
*/
|
|
if(current->ptrace & PT_DTRACE)
|
|
if(current->ptrace & PT_DTRACE)
|