From f8a8bf24d34155b16b7e1319112db8747cf5c2f7 Mon Sep 17 00:00:00 2001 From: palves Date: Mon, 3 Dec 2007 01:30:59 +0000 Subject: [PATCH] * win32-low.c (win32_attach): Call OpenProcess before DebugActiveProcess, not after. Add last error output to error call. --- gdb/gdbserver/ChangeLog | 6 ++++++ gdb/gdbserver/win32-low.c | 36 +++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 2e9530a0e7..645db3076b 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,5 +1,11 @@ 2007-12-03 Pedro Alves + * win32-low.c (win32_attach): Call OpenProcess before + DebugActiveProcess, not after. Add last error output to error + call. + +2007-12-03 Pedro Alves + * win32-low.c (win32_get_thread_context) (win32_set_thread_context): New functions. (thread_rec): Use win32_get_thread_context. diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c index e0fb7772bf..3ff7c17e2b 100644 --- a/gdb/gdbserver/win32-low.c +++ b/gdb/gdbserver/win32-low.c @@ -582,34 +582,36 @@ win32_create_inferior (char *program, char **program_args) static int win32_attach (unsigned long pid) { - winapi_DebugActiveProcessStop DebugActiveProcessStop = NULL; + HANDLE h; winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL; + DWORD err; #ifdef _WIN32_WCE HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); #else HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); #endif - DebugActiveProcessStop = GETPROCADDRESS (dll, DebugActiveProcessStop); DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit); - if (DebugActiveProcess (pid)) + h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); + if (h != NULL) { - if (DebugSetProcessKillOnExit != NULL) - DebugSetProcessKillOnExit (FALSE); - - current_process_handle = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); - - if (current_process_handle != NULL) - { - current_process_id = pid; - do_initial_child_stuff (pid); - return 0; - } - if (DebugActiveProcessStop != NULL) - DebugActiveProcessStop (current_process_id); + if (DebugActiveProcess (pid)) + { + if (DebugSetProcessKillOnExit != NULL) + DebugSetProcessKillOnExit (FALSE); + + current_process_handle = h; + current_process_id = pid; + do_initial_child_stuff (pid); + return 0; + } + + CloseHandle (h); } - error ("Attach to process failed."); + err = GetLastError (); + error ("Attach to process failed (error %d): %s\n", + (int) err, strwinerror (err)); } /* Handle OUTPUT_DEBUG_STRING_EVENT from child process. */ -- 2.11.0