diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2007-06-04 03:22:48 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-06-14 08:29:58 -0400 |
commit | a3f61dc0a5335334958ec3b97d0b1946b4ae5375 (patch) | |
tree | e7b151d724dca73220d8346c2a0c2a3525c5c91c /arch/powerpc/kernel/signal.h | |
parent | 5f9f375a62d3fd3d7f0d5adc23039ade523e62ba (diff) |
[POWERPC] Merge creation of signal frame
The code for creating signal frames was still duplicated and split
in strange ways between 32 and 64 bits, including the SA_ONSTACK
handling being in do_signal on 32 bits but inside handle_rt_signal
on 64 bits etc...
This moves the 64 bits get_sigframe() to the generic signal.c,
cleans it a bit, moves the access_ok() call done by all callers to
it as well, and adapts/cleanups the 3 different signal handling cases
to use that common function.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/signal.h')
-rw-r--r-- | arch/powerpc/kernel/signal.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/signal.h b/arch/powerpc/kernel/signal.h index 190d4325f974..c284f75afe77 100644 --- a/arch/powerpc/kernel/signal.h +++ b/arch/powerpc/kernel/signal.h | |||
@@ -12,15 +12,17 @@ | |||
12 | 12 | ||
13 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 13 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) |
14 | 14 | ||
15 | extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, | ||
16 | size_t frame_size); | ||
15 | extern void restore_sigmask(sigset_t *set); | 17 | extern void restore_sigmask(sigset_t *set); |
16 | 18 | ||
17 | extern int handle_signal32(unsigned long sig, struct k_sigaction *ka, | 19 | extern int handle_signal32(unsigned long sig, struct k_sigaction *ka, |
18 | siginfo_t *info, sigset_t *oldset, | 20 | siginfo_t *info, sigset_t *oldset, |
19 | struct pt_regs *regs, unsigned long newsp); | 21 | struct pt_regs *regs); |
20 | 22 | ||
21 | extern int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | 23 | extern int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, |
22 | siginfo_t *info, sigset_t *oldset, | 24 | siginfo_t *info, sigset_t *oldset, |
23 | struct pt_regs *regs, unsigned long newsp); | 25 | struct pt_regs *regs); |
24 | 26 | ||
25 | extern int handle_rt_signal64(int signr, struct k_sigaction *ka, | 27 | extern int handle_rt_signal64(int signr, struct k_sigaction *ka, |
26 | siginfo_t *info, sigset_t *set, | 28 | siginfo_t *info, sigset_t *set, |