Hi all!
I think i found a bug in VM86 exception handling (must be regression, i
guess).
Short Wine function flow:
On privileged instruction __wine_enter_vm86 saves vm86 registers in
CONTEXT and starts raise_segv_exception.
raise_segv_exception routes exception to the INSTR_EmulateInstruction
and then to winedos I/O emulator, then tries to use
NtSetContextThread(GetCurrentThread(), CONTEXT). NtSetContextThread
obviously fails because of VM86 segment values in CONTEXT.
My opinion is that NtSetContextThread call is wrong; __wine_enter_vm86
would restore vm86 registers correctly. I think i know what is the
problem; however, I lack experience to fix it myself :)
I need help; any hints would be appreciated.