diff options
author | phk <phk@FreeBSD.org> | 1995-12-14 08:21:33 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1995-12-14 08:21:33 +0000 |
commit | f39b6a05acd582271603783421cd37553f43150d (patch) | |
tree | 21b884168d85c11441ad2fad31edd222766c450e /sys/amd64/amd64/trap.c | |
parent | 4c65cdeaf90bb3e5dc095270b746b620a7336594 (diff) | |
download | FreeBSD-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.c | 16 |
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 */ |