Fix for multiple exception troubles

git-svn-id: trunk@14218 -
This commit is contained in:
pierre 2009-11-19 21:25:04 +00:00
parent 08350fcc9a
commit 79ec403774
2 changed files with 29 additions and 5 deletions

View File

@ -60,8 +60,18 @@ begin
else
res:=207;
end;
with sigcontext^.uc_mcontext.fpregs.fpchip_state do
status:=status and not FPU_ExceptionMask;
end;
SIGILL,
SIGILL:
if sse_check then
begin
os_supports_sse:=false;
res:=0;
inc(sigcontext^.uc_mcontext.gregs[REG_EIP],3);
end
else
res:=216;
SIGSEGV :
begin
res:=216;
@ -77,8 +87,17 @@ begin
end;
reenable_signal(sig);
{ give runtime error at the position where the signal was raised }
{if res<>0 then
HandleErrorAddrFrame(res,addr,frame);}
{ give runtime error at the position where the signal was raised }
if res<>0 then
HandleErrorAddrFrame(res,addr,frame);
begin
sigcontext^.uc_mcontext.gregs[REG_EAX] := res;
sigcontext^.uc_mcontext.gregs[REG_EDX] := sigcontext^.uc_mcontext.gregs[REG_EIP];
sigcontext^.uc_mcontext.gregs[REG_ECX] := sigcontext^.uc_mcontext.gregs[REG_EBP];
sigcontext^.uc_mcontext.gregs[REG_EIP] := ptruint(@HandleErrorAddrFrame);
end;
end;

View File

@ -245,6 +245,11 @@ Begin
{ Setup heap }
InitHeap;
SysInitExceptions;
{$if defined(cpui386) or defined(cpuarm)}
fpc_cpucodeinit;
{$endif cpui386}
{ Setup stdin, stdout and stderr }
SysInitStdIO;
{ Reset IO Error }