From aab785d0fc91733d00f9187cacde241e09d4e50b Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Wed, 1 Nov 2006 00:08:10 +0000 Subject: [PATCH] * return RTE 207 for fpu inexact exceptions (so we get a sensible exception from sysutils) * some cleanup in the i386 sighandler code git-svn-id: trunk@5137 - --- rtl/darwin/i386/sighnd.inc | 14 ++------------ rtl/darwin/powerpc/sighnd.inc | 11 ++++++----- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/rtl/darwin/i386/sighnd.inc b/rtl/darwin/i386/sighnd.inc index 023bc1371b..b038007225 100644 --- a/rtl/darwin/i386/sighnd.inc +++ b/rtl/darwin/i386/sighnd.inc @@ -28,12 +28,12 @@ begin FPE_FLTDIV : Res:=200; { floating point divide by zero } FPE_FLTOVF : Res:=205; { floating point overflow } FPE_FLTUND : Res:=206; { floating point underflow } - FPE_FLTRES : Res:=208; { floating point inexact result } + FPE_FLTRES, { floating point inexact result } FPE_FLTINV : Res:=207; { invalid floating point operation } Else Res:=207; { coprocessor error } end; - { the following is true on ppc, hopefully not on x86 as well } + { the following is true on ppc, but fortunately not on x86 } { FPU exceptions are completely disabled by the kernel if one occurred, it } { seems this is necessary to be able to return to user mode. They can be } { enabled by executing a sigreturn, however then the exception is triggered } @@ -52,15 +52,5 @@ begin if (res <> 0) then HandleErrorAddrFrame(res,pointer(sigcontext.ts.eip),pointer(sigcontext.ts.ebp)); -(* - { return to trampoline } - if res <> 0 then - begin - SigContext.uc_mcontext^.ss.r3 := res; - SigContext.uc_mcontext^.ss.r4 := SigContext.uc_mcontext^.ss.srr0; - SigContext.uc_mcontext^.ss.r5 := SigContext.uc_mcontext^.ss.r1; - pointer(SigContext.uc_mcontext^.ss.srr0) := @HandleErrorAddrFrame; - end; -*) end; diff --git a/rtl/darwin/powerpc/sighnd.inc b/rtl/darwin/powerpc/sighnd.inc index 02fe1b80ea..2650dac79b 100644 --- a/rtl/darwin/powerpc/sighnd.inc +++ b/rtl/darwin/powerpc/sighnd.inc @@ -24,11 +24,12 @@ begin SIGFPE : begin Case Info.si_code Of - FPE_INTDIV : Res:=200; {integer divide fault. Div0?} - FPE_FLTOVF : Res:=205; {Overflow trap} - FPE_FLTUND : Res:=206; {Stack over/underflow} - FPE_FLTRES : Res:=208; {Device not available} - FPE_FLTINV : Res:=207; {Invalid floating point operation} + FPE_FLTDIV, + FPE_INTDIV : Res:=200; { floating point divide by zero } + FPE_FLTOVF : Res:=205; { floating point overflow } + FPE_FLTUND : Res:=206; { floating point underflow } + FPE_FLTRES, { floating point inexact result } + FPE_FLTINV : Res:=207; { invalid floating point operation } Else Res:=207; {coprocessor error} end;