mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-29 20:00:19 +02:00
* 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 -
This commit is contained in:
parent
a200cae8af
commit
aab785d0fc
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user