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
