[fpc-devel] about bug 0016668 (-gt -O2)

Martin fpc at mfriebe.de
Wed Jun 9 19:44:44 CEST 2010


On 09/06/2010 18:42, Martin wrote:
>
> I am one tiny step forward..
>
> The SigSegV happens in fpc_ReRaise; => but the actual error must have 
> been introduced further up.
>
> Procedure fpc_ReRaise;[Public, Alias : 'FPC_RERAISE']; compilerproc;
> var
>   _ExceptAddrStack : PExceptAddr;
> begin
> {$ifdef excdebug}
>   writeln ('In reraise');
> {$endif}
>   _ExceptAddrStack:=ExceptAddrStack;
>   If _ExceptAddrStack=Nil then
>     DoUnHandledException;
>   ExceptObjectStack^.refcount := 0; // <<<<<<<<<<<<<<<<<
>   longjmp(_ExceptAddrStack^.Buf^,FPC_Exception);
> end;
>
>
> This is RTL (and compiled with -O1 => it doesn't use regvar), so I 
> should be able to trust variables here. (I also checked the assembler 
> view, and memory/registers...)
>
> - ExceptObjectStack is nil => So the line marked raises a SigSegV.
> - ExceptAddrStack is not nil => so DoUnHandledException was not called
>
> The question is, any hints where to concentrate looking, in order to 
> find out, how this can end up with a nil pointer there?

The content of ExceptAddrStack

record TEXCEPTADDR {
   BUF = $a3ef728,
   NEXT = $a3ef768,
   FRAMETYPE = 1}



More information about the fpc-devel mailing list