summaryrefslogtreecommitdiffstats
path: root/sys/amd64/amd64/trap.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-12-14 08:21:33 +0000
committerphk <phk@FreeBSD.org>1995-12-14 08:21:33 +0000
commitf39b6a05acd582271603783421cd37553f43150d (patch)
tree21b884168d85c11441ad2fad31edd222766c450e /sys/amd64/amd64/trap.c
parent4c65cdeaf90bb3e5dc095270b746b620a7336594 (diff)
downloadFreeBSD-src-f39b6a05acd582271603783421cd37553f43150d.zip
FreeBSD-src-f39b6a05acd582271603783421cd37553f43150d.tar.gz
Make math_emulators LKMable.
Diffstat (limited to 'sys/amd64/amd64/trap.c')
-rw-r--r--sys/amd64/amd64/trap.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 28c78d2..29de5a6 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.63 1995/12/07 12:45:39 davidg Exp $
+ * $Id: trap.c,v 1.64 1995/12/09 20:40:43 phk Exp $
*/
/*
@@ -82,6 +82,8 @@
#include "isa.h"
#include "npx.h"
+int (*pmath_emulate) __P((struct trapframe *));
+
extern void trap __P((struct trapframe frame));
extern int trapwrite __P((unsigned addr));
extern void syscall __P((struct trapframe frame));
@@ -286,8 +288,12 @@ trap(frame)
return;
#endif /* NNPX > 0 */
-#if defined(MATH_EMULATE) || defined(GPL_MATH_EMULATE)
- i = math_emulate(&frame);
+ if (!pmath_emulate) {
+ i = SIGFPE;
+ ucode = FPE_FPU_NP_TRAP;
+ break;
+ }
+ i = (*pmath_emulate)(&frame);
if (i == 0) {
if (!(frame.tf_eflags & PSL_T))
return;
@@ -295,10 +301,6 @@ trap(frame)
i = SIGTRAP;
}
/* else ucode = emulator_only_knows() XXX */
-#else /* MATH_EMULATE || GPL_MATH_EMULATE */
- i = SIGFPE;
- ucode = FPE_FPU_NP_TRAP;
-#endif /* MATH_EMULATE || GPL_MATH_EMULATE */
break;
case T_FPOPFLT: /* FPU operand fetch fault */
OpenPOWER on IntegriCloud