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
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel