[fpc-devel] assert, and the frame/addr for the exception.
Martin
lazarus at mfriebe.de
Sat May 7 01:18:04 CEST 2011
I was looking at http://bugs.freepascal.org/view.php?id=19113
And also http://bugs.freepascal.org/view.php?id=12528
Looking at the assembler code of assert (without utrace), it seems that
the "assert" statement, pushes ebp (the current frame) on the argument list.
assert(false, 'xxx');
004286A8 55 push %ebp // TheAddr
004286A9 b92a000000 mov $0x2a,%ecx // LineNo
004286AE ba00455600 mov $0x564500,%edx // FN
004286B3 b80c455600 mov $0x56450c,%eax // Msg
004286B8 e8834afeff call 0x40d140 <fpc_assert>
but then
Procedure AssertErrorHandler (Const Msg,FN :
ShortString;LineNo:longint; TheAddr : pointer);
Var S : String;
begin
If Msg='' then S:=SAssertionFailed else S:=Msg;
Raise EAssertionFailed.Createfmt(SAssertError,[S,Fn,LineNo]) at
Pointer(theAddr);
end;
Seems to hand that over as the address pointer to the code?
So the exception will have a frame of 0x0, and a code pointer to some
none executable part?
Maybe I am wrong, but something does seem to be incorrect?
Martin
More information about the fpc-devel
mailing list