[fpc-devel] unwinding stack from within ExceptProc?
Lukas Zeller
luz_info at synthesis.ch
Sat Sep 26 21:40:23 CEST 2009
Thanks, Jonas for the quick response (again)!
On Sep 26, 2009, at 15:31 , Jonas Maebe wrote:
> On 25 Sep 2009, at 18:09, Lukas Zeller wrote:
>
>> The longjmp itself works, but after this has happened once, further
>> exceptions crash the program. I wonder if there is some (FPC)
>> cleanup routine I could or should call before the longjmp that
>> would make the scenario work, or if there is technical evidence
>> that it can't work at all.
>
> There is no "technical evidence" that it can't work at all, but you
> would have to call internal RTL routines [...]
I hope I read that correctly as: "just longjump can't work and leaves
a mess behind that might explain crashes on subsequent exceptions"
> [...] which are not for public use, so
> a) this is not documented or supported in any way (I can't tell you
> the names by heart either)
> b) if you manage to figure it out, then your code can break with any
> future FPC version
Yes - if it was "my code", I'd try to avoid the situation. It
unfortunately isn't, the calling environment only provides that
routine which longjmps to handle a exception situation. So making it
work with the current FPC version and risking it'll break in a future
version would be better than nothing.
Maybe there's a better solution, but what are the official options I
have in ExceptProc other than halt? If I just return from it, how does
the call flow continue? At that time the stack must be already
unwound, but how far? While I understand ExceptProc is called when a
exception falls through all the way down to a pascal main program, I
can't really imagine at what point the same happens in a pascal shared
lib.
Thanks for any explanations!
Lukas
More information about the fpc-devel
mailing list