From 0d588a4a8229c590551d6254870863cb275598aa Mon Sep 17 00:00:00 2001
From: Eric Pouech <eric.pouech@wanadoo.fr>
Date: Sun, 2 Jun 2002 21:36:39 +0000
Subject: [PATCH] Fixed DebugBreakProcess (now generates EXCEPTION_BREAKPOINT
 instead of EXCEPTION_SINGLE_STEP).

---
 dlls/ntdll/signal_i386.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index fbea3e4e466..199d845c1dd 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -765,8 +765,19 @@ static void do_trap( CONTEXT *context, int trap_code )
     switch(trap_code)
     {
     case T_TRCTRAP:  /* Single-step exception */
-        rec.ExceptionCode = EXCEPTION_SINGLE_STEP;
-        context->EFlags &= ~0x100;  /* clear single-step flag */
+        if (context->EFlags & 0x100)
+        {
+            rec.ExceptionCode = EXCEPTION_SINGLE_STEP;
+            context->EFlags &= ~0x100;  /* clear single-step flag */
+        }
+        else
+        {
+            /* likely we get this because of a kill(SIGTRAP) on ourself, 
+             * so send a bp exception instead of a single step exception
+             */
+            TRACE("Spurious single step trap => breakpoint simulation\n");
+            rec.ExceptionCode = EXCEPTION_BREAKPOINT;
+        }
         break;
     case T_BPTFLT:   /* Breakpoint exception */
         rec.ExceptionAddress = (char *)rec.ExceptionAddress - 1;  /* back up over the int3 instruction */
-- 
GitLab