diff options
Diffstat (limited to 'arch/mips/kernel/signal.c')
-rw-r--r-- | arch/mips/kernel/signal.c | 56 |
1 files changed, 21 insertions, 35 deletions
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c index 7d5a631d6cab..4a7071863065 100644 --- a/arch/mips/kernel/signal.c +++ b/arch/mips/kernel/signal.c | |||
@@ -38,6 +38,27 @@ | |||
38 | 38 | ||
39 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | 39 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) |
40 | 40 | ||
41 | #if ICACHE_REFILLS_WORKAROUND_WAR == 0 | ||
42 | |||
43 | struct rt_sigframe { | ||
44 | u32 rs_ass[4]; /* argument save space for o32 */ | ||
45 | u32 rs_code[2]; /* signal trampoline */ | ||
46 | struct siginfo rs_info; | ||
47 | struct ucontext rs_uc; | ||
48 | }; | ||
49 | |||
50 | #else | ||
51 | |||
52 | struct rt_sigframe { | ||
53 | u32 rs_ass[4]; /* argument save space for o32 */ | ||
54 | u32 rs_pad[2]; | ||
55 | struct siginfo rs_info; | ||
56 | struct ucontext rs_uc; | ||
57 | u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */ | ||
58 | }; | ||
59 | |||
60 | #endif | ||
61 | |||
41 | /* | 62 | /* |
42 | * Helper routines | 63 | * Helper routines |
43 | */ | 64 | */ |
@@ -287,41 +308,6 @@ asmlinkage int sys_sigaltstack(nabi_no_regargs struct pt_regs regs) | |||
287 | return do_sigaltstack(uss, uoss, usp); | 308 | return do_sigaltstack(uss, uoss, usp); |
288 | } | 309 | } |
289 | 310 | ||
290 | /* | ||
291 | * Horribly complicated - with the bloody RM9000 workarounds enabled | ||
292 | * the signal trampolines is moving to the end of the structure so we can | ||
293 | * increase the alignment without breaking software compatibility. | ||
294 | */ | ||
295 | #ifdef CONFIG_TRAD_SIGNALS | ||
296 | struct sigframe { | ||
297 | u32 sf_ass[4]; /* argument save space for o32 */ | ||
298 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
299 | u32 sf_pad[2]; | ||
300 | #else | ||
301 | u32 sf_code[2]; /* signal trampoline */ | ||
302 | #endif | ||
303 | struct sigcontext sf_sc; | ||
304 | sigset_t sf_mask; | ||
305 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
306 | u32 sf_code[8] ____cacheline_aligned; /* signal trampoline */ | ||
307 | #endif | ||
308 | }; | ||
309 | #endif | ||
310 | |||
311 | struct rt_sigframe { | ||
312 | u32 rs_ass[4]; /* argument save space for o32 */ | ||
313 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
314 | u32 rs_pad[2]; | ||
315 | #else | ||
316 | u32 rs_code[2]; /* signal trampoline */ | ||
317 | #endif | ||
318 | struct siginfo rs_info; | ||
319 | struct ucontext rs_uc; | ||
320 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
321 | u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */ | ||
322 | #endif | ||
323 | }; | ||
324 | |||
325 | #ifdef CONFIG_TRAD_SIGNALS | 311 | #ifdef CONFIG_TRAD_SIGNALS |
326 | save_static_function(sys_sigreturn); | 312 | save_static_function(sys_sigreturn); |
327 | __attribute_used__ noinline static void | 313 | __attribute_used__ noinline static void |