Alexandre Julliard wrote:
What changed is that emulation of these instructions was deliberately removed ;-)
This was done for dll separation reasons, and because they are not emulated under NT either (which also means better performance for the exception handling). What happens if you run with Windows version set to NT?
Performance is not an issue. Signal handlers can simply check version info and if platform ID is VER_PLATFORM_WIN32_WINDOWS, instruction emulation is required. Another possibility is to add instruction emulation hooks to NTDLL and make KERNEL set these hooks only for some platform IDs. Actually Windows XP/2003 already does provide this kind of hooks (see AddVectoredExceptionHandler), although they are called after first chance notification which may be a bit awkward (and kernel handler should have higher priority than these have).
Anyway, even with some performance issues, it looks like instruction emulation is needed for supporting some pure Win95/98/ME programs. It would seem a bit strange we try very hard to support Win31 and WinNT based programs but not those.
Jukka Heinonen jhei@iki.fi writes:
Anyway, even with some performance issues, it looks like instruction emulation is needed for supporting some pure Win95/98/ME programs. It would seem a bit strange we try very hard to support Win31 and WinNT based programs but not those.
Sure, we'll need to put it back somehow, there are too many broken 32-bit apps out there. Part of the reason I disabled it was to find out whether we really needed it or not, but I think the answer is clear. But there are still a number of things that need to be changed in the signal handling first, so it will bit some time before we can make it work properly again.