aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/kernel/traps_32.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index 862667a341fd..35b901ed6de3 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -742,15 +742,13 @@ asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,
742 struct pt_regs __regs) 742 struct pt_regs __regs)
743{ 743{
744 struct pt_regs *regs = RELOC_HIDE(&__regs, 0); 744 struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
745 unsigned long error_code; 745 unsigned long inst;
746 struct task_struct *tsk = current; 746 struct task_struct *tsk = current;
747 747
748 if (kprobe_handle_illslot(regs->pc) == 0) 748 if (kprobe_handle_illslot(regs->pc) == 0)
749 return; 749 return;
750 750
751#ifdef CONFIG_SH_FPU_EMU 751#ifdef CONFIG_SH_FPU_EMU
752 unsigned short inst = 0;
753
754 get_user(inst, (unsigned short *)regs->pc + 1); 752 get_user(inst, (unsigned short *)regs->pc + 1);
755 if (!do_fpu_inst(inst, regs)) { 753 if (!do_fpu_inst(inst, regs)) {
756 get_user(inst, (unsigned short *)regs->pc); 754 get_user(inst, (unsigned short *)regs->pc);
@@ -761,12 +759,12 @@ asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,
761 /* not a FPU inst. */ 759 /* not a FPU inst. */
762#endif 760#endif
763 761
764 lookup_exception_vector(error_code); 762 lookup_exception_vector(inst);
765 763
766 local_irq_enable(); 764 local_irq_enable();
767 CHK_REMOTE_DEBUG(regs); 765 CHK_REMOTE_DEBUG(regs);
768 force_sig(SIGILL, tsk); 766 force_sig(SIGILL, tsk);
769 die_if_no_fixup("illegal slot instruction", regs, error_code); 767 die_if_no_fixup("illegal slot instruction", regs, inst);
770} 768}
771 769
772asmlinkage void do_exception_error(unsigned long r4, unsigned long r5, 770asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,