diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2005-06-15 09:00:12 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2005-10-29 14:31:23 -0400 |
commit | 02416dcf5a94af34bcd28b4baf25bbbf399d8136 (patch) | |
tree | 1906c4266d4e28ef0b13d0579a145603dcbcff1b /arch/mips/kernel/signal32.c | |
parent | aac8aa7717a23a9bf8740dbfb59755b1d62f04bf (diff) |
Redo RM9000 workaround which along with other DSP ASE changes was
causing some headache for debuggers knowing about signal frames.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/signal32.c')
-rw-r--r-- | arch/mips/kernel/signal32.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c index 8639e24732a5..806ed073e54d 100644 --- a/arch/mips/kernel/signal32.c +++ b/arch/mips/kernel/signal32.c | |||
@@ -7,6 +7,7 @@ | |||
7 | * Copyright (C) 1994 - 2000 Ralf Baechle | 7 | * Copyright (C) 1994 - 2000 Ralf Baechle |
8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | 8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. |
9 | */ | 9 | */ |
10 | #include <linux/cache.h> | ||
10 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
11 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
12 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
@@ -30,6 +31,7 @@ | |||
30 | #include <asm/ucontext.h> | 31 | #include <asm/ucontext.h> |
31 | #include <asm/system.h> | 32 | #include <asm/system.h> |
32 | #include <asm/fpu.h> | 33 | #include <asm/fpu.h> |
34 | #include <asm/war.h> | ||
33 | 35 | ||
34 | #define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3) | 36 | #define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3) |
35 | 37 | ||
@@ -392,16 +394,30 @@ static int restore_sigcontext32(struct pt_regs *regs, struct sigcontext32 *sc) | |||
392 | 394 | ||
393 | struct sigframe { | 395 | struct sigframe { |
394 | u32 sf_ass[4]; /* argument save space for o32 */ | 396 | u32 sf_ass[4]; /* argument save space for o32 */ |
397 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
398 | u32 sf_pad[2]; | ||
399 | #else | ||
395 | u32 sf_code[2]; /* signal trampoline */ | 400 | u32 sf_code[2]; /* signal trampoline */ |
401 | #endif | ||
396 | struct sigcontext32 sf_sc; | 402 | struct sigcontext32 sf_sc; |
397 | sigset_t sf_mask; | 403 | sigset_t sf_mask; |
404 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
405 | u32 sf_code[8] ____cacheline_aligned; /* signal trampoline */ | ||
406 | #endif | ||
398 | }; | 407 | }; |
399 | 408 | ||
400 | struct rt_sigframe32 { | 409 | struct rt_sigframe32 { |
401 | u32 rs_ass[4]; /* argument save space for o32 */ | 410 | u32 rs_ass[4]; /* argument save space for o32 */ |
411 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
412 | u32 rs_pad[2]; | ||
413 | #else | ||
402 | u32 rs_code[2]; /* signal trampoline */ | 414 | u32 rs_code[2]; /* signal trampoline */ |
415 | #endif | ||
403 | compat_siginfo_t rs_info; | 416 | compat_siginfo_t rs_info; |
404 | struct ucontext32 rs_uc; | 417 | struct ucontext32 rs_uc; |
418 | #if ICACHE_REFILLS_WORKAROUND_WAR | ||
419 | u32 rs_code[8] __attribute__((aligned(32))); /* signal trampoline */ | ||
420 | #endif | ||
405 | }; | 421 | }; |
406 | 422 | ||
407 | int copy_siginfo_to_user32(compat_siginfo_t *to, siginfo_t *from) | 423 | int copy_siginfo_to_user32(compat_siginfo_t *to, siginfo_t *from) |