Jonas Maebe wrote:

OBones wrote on Wed, 22 Aug 2012:

Jonas Maebe wrote:

You can try debugging syswin32_i386_exception_handler in rtl/win32/system.pp to see what exception Win32 reports instead.
Thanks for the confirmation as I was heading that way when I posted the message, without much hope. But now that I have put that idea to full length, it became clear that the problem is not (entirely) with Win32 but because the exception handler does not handle the STATUS_FLOAT_MULTIPLE_FAULTS and STATUS_FLOAT_MULTIPLE_TRAPS cases.

I guess you mean "a division by zero using an SSE instruction results in STATUS_FLOAT_MULTIPLE_FAULTS and/or STATUS_FLOAT_MULTIPLE_TRAPS"?
Yes, that's it, sorry for not making it clearer.

And as you said, when it does not know what to do, it gives 217 that gets later translated to Control C, which to me is a bit misleading. I'd rather have a 202, External Exception.

202 is "stack overflow". 217 is also used in the RTL as "unhandled exception". I don't know how come that this code is used both for ctrl-c and unhandled exception. Probably a simple error from a long time ago that never got corrected.
Woops, typo, I meant 212, as can be found in RunErrorToExcept from sysutils.inc. That's where the Control C is coming from by the way.


So right, now, using this I'm getting the appropriate exception, I'm just left wondering if this code (or a similar one) should be added to FreePascal so that other people are not having the same issue as I'm having.

Probably. At least a quick web search seems to indicate this is a fairly well-known problem with SSE exceptions and Win32.
Well, once one knows about the multiple traps/multiple faults, yes, it's easy to find it. But when starting from just a control C, it's much more complex.

Once again, thanks for your help.

Olivier
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to