FPC, overrides random memory / Re: [fpc-devel] about bug 0016668 (-gt -O2)

Martin fpc at mfriebe.de
Fri Jun 18 17:14:03 CEST 2010


Ok, unfortunately I haven't got instruction for reproductions.

The bug does no longer happen in todays lazarus svn code. => I'll try to 
work out a revision where it happens. (likely laz svn 25937)

I found the fo9llowing assembler (disassembled by gdb) was generated for

mov    $0x55,%al
movl   $0x55555555,(%ecx)
movl   $0x55555555,(%eax)

function TThemeServices.GetStockImage(StockID: LongInt; out Image, Mask: 
HBitmap): Boolean;
var
   img : TBitmap;
begin

if lazarus was compiled with
  -gh   -g  -gl  -gw -godwarfsets    -CX -XX -Xs  -gt -O2   -OpPENTIUMM


since "al" is trashed first, and then the content of the address pointed 
to by eax => eax is no longer correct => some random memory is trashed.

al seems to be the result, eax must be one of the params

svn rev 15398


Martin



On 09/06/2010 18:44, Martin wrote:
> 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}
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel




More information about the fpc-devel mailing list