patch-2.3.16 linux/arch/ppc/kernel/traps.c
Next file: linux/arch/ppc/lib/locks.c
Previous file: linux/arch/ppc/kernel/totalmp.c
Back to the patch index
Back to the overall index
- Lines: 52
- Date:
Tue Aug 31 11:36:43 1999
- Orig file:
v2.3.15/linux/arch/ppc/kernel/traps.c
- Orig date:
Sat May 22 13:03:00 1999
diff -u --recursive --new-file v2.3.15/linux/arch/ppc/kernel/traps.c linux/arch/ppc/kernel/traps.c
@@ -229,26 +229,26 @@
void
SoftwareEmulation(struct pt_regs *regs)
{
- int errcode;
- extern int Soft_emulate_8xx (struct pt_regs *regs);
- extern void print_8xx_pte(struct mm_struct *, unsigned long);
+ extern int do_mathemu(struct pt_regs *);
+ int errcode;
- if (user_mode(regs))
- {
- if ((errcode = Soft_emulate_8xx(regs))) {
-printk("Software Emulation %s/%d NIP: %lx *NIP: 0x%x code: %x",
- current->comm,current->pid,
- regs->nip, *((uint *)regs->nip), errcode);
-/*print_8xx_pte(current->mm, regs->nip);*/
- if (errcode == EFAULT)
- _exception(SIGBUS, regs);
- else
- _exception(SIGILL, regs);
- }
- }
- else {
+ if (!user_mode(regs)) {
+ show_regs(regs);
+#if defined(CONFIG_XMON) || defined(CONFIG_KGDB)
+ debugger(regs);
+#endif
+ print_backtrace((unsigned long *)regs->gpr[1]);
panic("Kernel Mode Software FPU Emulation");
}
+
+ if ((errcode = do_mathemu(regs))) {
+ if (errcode > 0)
+ _exception(SIGFPE, regs);
+ else if (errcode == -EFAULT;
+ _exception(SIGSEGV, regs);
+ else
+ _exception(SIGILL, regs);
+ }
}
#endif
@@ -259,6 +259,6 @@
regs->nip, regs->msr, regs->trap);
}
-__initfunc(void trap_init(void))
+void __init trap_init(void)
{
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)