git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.3
[linux-2.6.git]
/
arch
/
ppc
/
kernel
/
signal.c
diff --git
a/arch/ppc/kernel/signal.c
b/arch/ppc/kernel/signal.c
index
20b6446
..
260716a
100644
(file)
--- a/
arch/ppc/kernel/signal.c
+++ b/
arch/ppc/kernel/signal.c
@@
-270,7
+270,7
@@
save_user_regs(struct pt_regs *regs, struct mcontext __user *frame, int sigret)
static int
restore_user_regs(struct pt_regs *regs, struct mcontext __user *sr, int sig)
{
static int
restore_user_regs(struct pt_regs *regs, struct mcontext __user *sr, int sig)
{
- unsigned long save_r2;
+ unsigned long save_r2
= 0
;
#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE)
unsigned long msr;
#endif
#if defined(CONFIG_ALTIVEC) || defined(CONFIG_SPE)
unsigned long msr;
#endif
@@
-404,9
+404,7
@@
badframe:
printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp);
#endif
printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp);
#endif
- if (sig == SIGSEGV)
- ka->sa.sa_handler = SIG_DFL;
- force_sig(SIGSEGV, current);
+ force_sigsegv(sig, current);
}
static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int sig)
}
static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int sig)
@@
-556,9
+554,7
@@
badframe:
printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp);
#endif
printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp);
#endif
- if (sig == SIGSEGV)
- ka->sa.sa_handler = SIG_DFL;
- force_sig(SIGSEGV, current);
+ force_sigsegv(sig, current);
}
/*
}
/*
@@
-604,7
+600,7
@@
badframe:
int do_signal(sigset_t *oldset, struct pt_regs *regs)
{
siginfo_t info;
int do_signal(sigset_t *oldset, struct pt_regs *regs)
{
siginfo_t info;
- struct k_sigaction
*
ka;
+ struct k_sigaction ka;
unsigned long frame, newsp;
int signr, ret;
unsigned long frame, newsp;
int signr, ret;
@@
-613,9
+609,7
@@
int do_signal(sigset_t *oldset, struct pt_regs *regs)
newsp = frame = 0;
newsp = frame = 0;
- signr = get_signal_to_deliver(&info, regs, NULL);
-
- ka = (signr == 0)? NULL: ¤t->sighand->action[signr-1];
+ signr = get_signal_to_deliver(&info, &ka, regs, NULL);
if (TRAP(regs) == 0x0C00 /* System Call! */
&& regs->ccr & 0x10000000 /* error signalled */
if (TRAP(regs) == 0x0C00 /* System Call! */
&& regs->ccr & 0x10000000 /* error signalled */
@@
-626,7
+620,7
@@
int do_signal(sigset_t *oldset, struct pt_regs *regs)
if (signr > 0
&& (ret == ERESTARTNOHAND || ret == ERESTART_RESTARTBLOCK
|| (ret == ERESTARTSYS
if (signr > 0
&& (ret == ERESTARTNOHAND || ret == ERESTART_RESTARTBLOCK
|| (ret == ERESTARTSYS
- && !(ka
->
sa.sa_flags & SA_RESTART)))) {
+ && !(ka
.
sa.sa_flags & SA_RESTART)))) {
/* make the system call return an EINTR error */
regs->result = -EINTR;
regs->gpr[3] = EINTR;
/* make the system call return an EINTR error */
regs->result = -EINTR;
regs->gpr[3] = EINTR;
@@
-645,7
+639,7
@@
int do_signal(sigset_t *oldset, struct pt_regs *regs)
if (signr == 0)
return 0; /* no signals delivered */
if (signr == 0)
return 0; /* no signals delivered */
- if ((ka
->
sa.sa_flags & SA_ONSTACK) && current->sas_ss_size
+ if ((ka
.
sa.sa_flags & SA_ONSTACK) && current->sas_ss_size
&& !on_sig_stack(regs->gpr[1]))
newsp = current->sas_ss_sp + current->sas_ss_size;
else
&& !on_sig_stack(regs->gpr[1]))
newsp = current->sas_ss_sp + current->sas_ss_size;
else
@@
-653,17
+647,14
@@
int do_signal(sigset_t *oldset, struct pt_regs *regs)
newsp &= ~0xfUL;
/* Whee! Actually deliver the signal. */
newsp &= ~0xfUL;
/* Whee! Actually deliver the signal. */
- if (ka
->
sa.sa_flags & SA_SIGINFO)
- handle_rt_signal(signr, ka, &info, oldset, regs, newsp);
+ if (ka
.
sa.sa_flags & SA_SIGINFO)
+ handle_rt_signal(signr,
&
ka, &info, oldset, regs, newsp);
else
else
- handle_signal(signr, ka, &info, oldset, regs, newsp);
-
- if (ka->sa.sa_flags & SA_ONESHOT)
- ka->sa.sa_handler = SIG_DFL;
+ handle_signal(signr, &ka, &info, oldset, regs, newsp);
- if (!(ka
->
sa.sa_flags & SA_NODEFER)) {
+ if (!(ka
.
sa.sa_flags & SA_NODEFER)) {
spin_lock_irq(¤t->sighand->siglock);
spin_lock_irq(¤t->sighand->siglock);
- sigorsets(¤t->blocked,¤t->blocked,&ka
->
sa.sa_mask);
+ sigorsets(¤t->blocked,¤t->blocked,&ka
.
sa.sa_mask);
sigaddset(¤t->blocked, signr);
recalc_sigpending();
spin_unlock_irq(¤t->sighand->siglock);
sigaddset(¤t->blocked, signr);
recalc_sigpending();
spin_unlock_irq(¤t->sighand->siglock);