Rémi Bernon : winedbg: Store the current debug event in gdbctx.

Alexandre Julliard julliard at winehq.org
Wed Apr 1 15:51:00 CDT 2020


Module: wine
Branch: master
Commit: 7af486075a6be689307c5fae1c2876fa0d969875
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7af486075a6be689307c5fae1c2876fa0d969875

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Wed Apr  1 17:03:26 2020 +0200

winedbg: Store the current debug event in gdbctx.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/winedbg/gdbproxy.c | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index a2a6df91f3..078a140a61 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -87,6 +87,7 @@ struct gdb_context
     int                         exec_tid; /* tid used in step & continue */
     int                         other_tid; /* tid to be used in any other operation */
     /* current Win32 trap env */
+    DEBUG_EVENT                 de;
     unsigned                    last_sig;
     BOOL                        in_trap;
     /* Win32 information */
@@ -393,8 +394,10 @@ static BOOL handle_exception(struct gdb_context* gdbctx, EXCEPTION_DEBUG_INFO* e
     return ret;
 }
 
-static	void	handle_debug_event(struct gdb_context* gdbctx, DEBUG_EVENT* de)
+static void handle_debug_event(struct gdb_context* gdbctx)
 {
+    DEBUG_EVENT *de = &gdbctx->de;
+
     union {
         char                bufferA[256];
         WCHAR               buffer[256];
@@ -575,12 +578,10 @@ static BOOL	check_for_interrupt(struct gdb_context* gdbctx)
 
 static void    wait_for_debuggee(struct gdb_context* gdbctx)
 {
-    DEBUG_EVENT         de;
-
     gdbctx->in_trap = FALSE;
     for (;;)
     {
-		if (!WaitForDebugEvent(&de, 10))
+		if (!WaitForDebugEvent(&gdbctx->de, 10))
 		{
 			if (GetLastError() == ERROR_SEM_TIMEOUT)
 			{
@@ -589,7 +590,7 @@ static void    wait_for_debuggee(struct gdb_context* gdbctx)
 						ERR("Failed to break into debuggee\n");
 						break;
 					}
-					WaitForDebugEvent(&de, INFINITE);	
+					WaitForDebugEvent(&gdbctx->de, INFINITE);
 				} else {
 					continue;
 				} 
@@ -597,13 +598,13 @@ static void    wait_for_debuggee(struct gdb_context* gdbctx)
 				break;
 			} 
 		}
-        handle_debug_event(gdbctx, &de);
+        handle_debug_event(gdbctx);
         assert(!gdbctx->process ||
                gdbctx->process->pid == 0 ||
-               de.dwProcessId == gdbctx->process->pid);
-        assert(!dbg_curr_thread || de.dwThreadId == dbg_curr_thread->tid);
+               gdbctx->de.dwProcessId == gdbctx->process->pid);
+        assert(!dbg_curr_thread || gdbctx->de.dwThreadId == dbg_curr_thread->tid);
         if (gdbctx->in_trap) break;
-        ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
+        ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE);
     }
 }
 
@@ -1880,7 +1881,7 @@ static BOOL gdb_exec(const char* wine_path, unsigned port, unsigned flags)
     return TRUE;
 }
 
-static BOOL gdb_startup(struct gdb_context* gdbctx, DEBUG_EVENT* de, unsigned flags, unsigned port)
+static BOOL gdb_startup(struct gdb_context* gdbctx, unsigned flags, unsigned port)
 {
     int                 sock;
     struct sockaddr_in  s_addrs = {0};
@@ -1906,7 +1907,7 @@ static BOOL gdb_startup(struct gdb_context* gdbctx, DEBUG_EVENT* de, unsigned fl
         goto cleanup;
 
     /* step 2: do the process internal creation */
-    handle_debug_event(gdbctx, de);
+    handle_debug_event(gdbctx);
 
     /* step3: get the wine loader name */
     if (!dbg_get_debuggee_info(gdbctx->process->handle, &imh_mod))
@@ -1969,7 +1970,6 @@ cleanup:
 
 static BOOL gdb_init_context(struct gdb_context* gdbctx, unsigned flags, unsigned port)
 {
-    DEBUG_EVENT         de;
     int                 i;
 
     gdbctx->sock = -1;
@@ -1991,23 +1991,23 @@ static BOOL gdb_init_context(struct gdb_context* gdbctx, unsigned flags, unsigne
         gdbctx->wine_segs[i] = 0;
 
     /* wait for first trap */
-    while (WaitForDebugEvent(&de, INFINITE))
+    while (WaitForDebugEvent(&gdbctx->de, INFINITE))
     {
-        if (de.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT)
+        if (gdbctx->de.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT)
         {
             /* this should be the first event we get,
              * and the only one of this type  */
-            assert(gdbctx->process == NULL && de.dwProcessId == dbg_curr_pid);
+            assert(gdbctx->process == NULL && gdbctx->de.dwProcessId == dbg_curr_pid);
             /* gdbctx->dwProcessId = pid; */
-            if (!gdb_startup(gdbctx, &de, flags, port)) return FALSE;
+            if (!gdb_startup(gdbctx, flags, port)) return FALSE;
             assert(!gdbctx->in_trap);
         }
         else
         {
-            handle_debug_event(gdbctx, &de);
+            handle_debug_event(gdbctx);
             if (gdbctx->in_trap) break;
         }
-        ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
+        ContinueDebugEvent(gdbctx->de.dwProcessId, gdbctx->de.dwThreadId, DBG_CONTINUE);
     }
     return TRUE;
 }




More information about the wine-cvs mailing list