Treat synchronous VFP exception just like aynchronous: as an FP exception,
not as illegal instruction
This commit is contained in:
parent
bb3d23fd35
commit
0265aa0a15
@ -179,12 +179,12 @@ vfp_bounce(u_int addr, u_int insn, struct trapframe *frame, int code)
|
||||
fpexc = fmrx(fpexc);
|
||||
if (fpexc & VFPEXC_EN) {
|
||||
/* Clear any exceptions */
|
||||
fmxr(fpexc, fpexc & ~(VFPEXC_EX | VFPEXC_FP2V));
|
||||
fmxr(fpexc, fpexc & ~(VFPEXC_EX | VFPEXC_DEX | VFPEXC_FP2V));
|
||||
|
||||
/* kill the process - we do not handle emulation */
|
||||
critical_exit();
|
||||
|
||||
if (fpexc & VFPEXC_EX) {
|
||||
if (fpexc & (VFPEXC_EX | VFPEXC_DEX)) {
|
||||
/* We have an exception, signal a SIGFPE */
|
||||
ksiginfo_init_trap(&ksi);
|
||||
ksi.ksi_signo = SIGFPE;
|
||||
|
@ -92,6 +92,7 @@
|
||||
/* VFPEXC */
|
||||
#define VFPEXC_EX (0x80000000) /* exception v1 v2 */
|
||||
#define VFPEXC_EN (0x40000000) /* vfp enable */
|
||||
#define VFPEXC_DEX (0x20000000) /* Synchronous exception */
|
||||
#define VFPEXC_FP2V (0x10000000) /* FPINST2 valid */
|
||||
#define VFPEXC_INV (0x00000080) /* Input exception */
|
||||
#define VFPEXC_UFC (0x00000008) /* Underflow exception */
|
||||
|
Loading…
x
Reference in New Issue
Block a user