Browse Source

* 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 -

Jonas Maebe 19 years ago
parent
commit
aab785d0fc
2 changed files with 8 additions and 17 deletions
  1. 2 12
      rtl/darwin/i386/sighnd.inc
  2. 6 5
      rtl/darwin/powerpc/sighnd.inc

+ 2 - 12
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;
 

+ 6 - 5
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;