server: Don't report LOAD_DLL debug event for exe module (try 2)

Michael Karcher wine at mkarcher.dialup.fu-berlin.de
Mon Aug 17 02:19:53 CDT 2009


LOAD_DLL must only be reported for additional DLLs. Delphi's single
stepping chokes on getting the main exe module enumerated here. The
included test passes on Windows XP, SP3.

try 2: Don't check each module's base; just skip the first one
---
 dlls/kernel32/tests/process.c |    9 +++++++++
 server/debugger.c             |    2 +-
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index d8087a6..21f3c52 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -1241,6 +1241,7 @@ static  void    test_SuspendFlag(void)
 static  void    test_DebuggingFlag(void)
 {
     char                buffer[MAX_PATH];
+    void               *processbase = NULL;
     PROCESS_INFORMATION	info;
     STARTUPINFOA       startup, us;
     DEBUG_EVENT         de;
@@ -1261,7 +1262,15 @@ static  void    test_DebuggingFlag(void)
     {
         ok(WaitForDebugEvent(&de, INFINITE), "reading debug event\n");
         ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
+        if (!dbg)
+        {
+            ok(de.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT,
+               "first event: %d\n", de.dwDebugEventCode);
+            processbase = de.u.CreateProcessInfo.lpBaseOfImage;
+        }
         if (de.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) dbg++;
+        ok(de.dwDebugEventCode != LOAD_DLL_DEBUG_EVENT ||
+           de.u.LoadDll.lpBaseOfDll != processbase, "got LOAD_DLL for main module\n");
     } while (de.dwDebugEventCode != EXIT_PROCESS_DEBUG_EVENT);
 
     ok(dbg, "I have seen a debug event\n");
diff --git a/server/debugger.c b/server/debugger.c
index c01ab45..faade98 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -514,7 +514,7 @@ void generate_startup_debug_events( struct process *process, client_ptr_t entry
 
     /* generate dll events (in loading order, i.e. reverse list order) */
     ptr = list_tail( &process->dlls );
-    while (ptr)
+    while (ptr != list_head( &process->dlls ))
     {
         struct process_dll *dll = LIST_ENTRY( ptr, struct process_dll, entry );
         generate_debug_event( first_thread, LOAD_DLL_DEBUG_EVENT, dll );
-- 
1.6.3.3




More information about the wine-patches mailing list