diff options
author | Paul Mundt <lethal@linux-sh.org> | 2007-05-08 01:50:59 -0400 |
---|---|---|
committer | Paul Mundt <lethal@hera.kernel.org> | 2007-05-08 21:35:01 -0400 |
commit | bd0799977cb9b68aa6a39e9630aeea4778a58385 (patch) | |
tree | 125c0c923701c5b6f823a7b614c295e06370d46c /arch/sh/kernel/signal.c | |
parent | 51c8b856f5edfa45d956721aa6d6ebaa15699062 (diff) |
sh: Support for SH-2A 32-bit opcodes.
SH-2A supports both 16 and 32-bit instructions, add a simple helper
for figuring out the instruction size in the places where there are
hardcoded 16-bit assumptions.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/signal.c')
-rw-r--r-- | arch/sh/kernel/signal.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/sh/kernel/signal.c b/arch/sh/kernel/signal.c index eb0191c374b6..d7d98d691c64 100644 --- a/arch/sh/kernel/signal.c +++ b/arch/sh/kernel/signal.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/personality.h> | 23 | #include <linux/personality.h> |
24 | #include <linux/binfmts.h> | 24 | #include <linux/binfmts.h> |
25 | #include <linux/freezer.h> | 25 | #include <linux/freezer.h> |
26 | 26 | #include <asm/system.h> | |
27 | #include <asm/ucontext.h> | 27 | #include <asm/ucontext.h> |
28 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
29 | #include <asm/pgtable.h> | 29 | #include <asm/pgtable.h> |
@@ -500,7 +500,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | |||
500 | } | 500 | } |
501 | /* fallthrough */ | 501 | /* fallthrough */ |
502 | case -ERESTARTNOINTR: | 502 | case -ERESTARTNOINTR: |
503 | regs->pc -= 2; | 503 | regs->pc -= instruction_size(regs->pc); |
504 | } | 504 | } |
505 | } else { | 505 | } else { |
506 | /* gUSA handling */ | 506 | /* gUSA handling */ |
@@ -600,9 +600,9 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0) | |||
600 | regs->regs[0] == -ERESTARTSYS || | 600 | regs->regs[0] == -ERESTARTSYS || |
601 | regs->regs[0] == -ERESTARTNOINTR) { | 601 | regs->regs[0] == -ERESTARTNOINTR) { |
602 | regs->regs[0] = save_r0; | 602 | regs->regs[0] = save_r0; |
603 | regs->pc -= 2; | 603 | regs->pc -= instruction_size(regs->pc); |
604 | } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { | 604 | } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { |
605 | regs->pc -= 2; | 605 | regs->pc -= instruction_size(regs->pc); |
606 | regs->regs[3] = __NR_restart_syscall; | 606 | regs->regs[3] = __NR_restart_syscall; |
607 | } | 607 | } |
608 | } | 608 | } |