diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 608b18f1e65..c563f0af75d 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -1270,9 +1270,8 @@ void __wine_enter_vm86( CONTEXT *context ) case VM86_TRAP: /* return due to DOS-debugger request */ switch(VM86_ARG(res)) { - case T_TRCTRAP: /* Single-step exception */ + case T_TRCTRAP: /* Single-step exception, single step flag is cleared by raise_trap_exception */ rec.ExceptionCode = EXCEPTION_SINGLE_STEP; - context->EFlags &= ~0x100; /* clear single-step flag */ break; case T_BPTFLT: /* Breakpoint exception */ rec.ExceptionAddress = (char *)rec.ExceptionAddress - 1; /* back up over the int3 instruction */ diff --git a/dlls/winedos/dosvm.c b/dlls/winedos/dosvm.c index c6622657087..5ad49fd266b 100644 --- a/dlls/winedos/dosvm.c +++ b/dlls/winedos/dosvm.c @@ -557,6 +557,15 @@ static WINE_EXCEPTION_FILTER(exception_handler) ERR( "Protected mode STI caught by real mode handler!\n" ); DOSVM_SendQueuedEvents(context); return EXCEPTION_CONTINUE_EXECUTION; + + case EXCEPTION_SINGLE_STEP: + ret = DOSVM_EmulateInterruptRM( context, 1 ); + return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER; + + case EXCEPTION_BREAKPOINT: + ret = DOSVM_EmulateInterruptRM( context, 3 ); + return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER; + } return EXCEPTION_CONTINUE_SEARCH; }