From 6b3d9b8313db583e6b6ba5d897bced21f01d81db Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 31 Jul 2007 13:58:19 +0000 Subject: [PATCH] * win32-low.c (winapi_CloseToolhelp32Snapshot) [_WIN32_WCE]: New typedef. (win32_CloseToolhelp32Snapshot) [_WIN32_WCE]: New global var. (load_toolhelp) [_WIN32_WCE]: Load TOOLHELP.DLL. Get CloseToolhelp32Snapshot. (toolhelp_get_dll_name) [_WIN32_WCE]: Close the snapshot with CloseToolhelp32Snapshot. --- gdb/gdbserver/ChangeLog | 10 +++++++++ gdb/gdbserver/win32-low.c | 44 ++++++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 9e04c040227..cd12c4f03c9 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,13 @@ +2007-07-31 Pedro Alves + + * win32-low.c (winapi_CloseToolhelp32Snapshot) [_WIN32_WCE]: New + typedef. + (win32_CloseToolhelp32Snapshot) [_WIN32_WCE]: New global var. + (load_toolhelp) [_WIN32_WCE]: Load TOOLHELP.DLL. Get + CloseToolhelp32Snapshot. + (toolhelp_get_dll_name) [_WIN32_WCE]: Close the snapshot with + CloseToolhelp32Snapshot. + 2007-07-27 Michael Snyder * server.c (main): Check for inferior exit before main loop. diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c index 1382cb83a95..11c5dbe78db 100644 --- a/gdb/gdbserver/win32-low.c +++ b/gdb/gdbserver/win32-low.c @@ -980,6 +980,10 @@ typedef BOOL (WINAPI *winapi_Module32Next) (HANDLE, LPMODULEENTRY32); static winapi_CreateToolhelp32Snapshot win32_CreateToolhelp32Snapshot; static winapi_Module32First win32_Module32First; static winapi_Module32Next win32_Module32Next; +#ifdef _WIN32_WCE +typedef BOOL (WINAPI *winapi_CloseToolhelp32Snapshot) (HANDLE); +static winapi_CloseToolhelp32Snapshot win32_CloseToolhelp32Snapshot; +#endif static BOOL load_toolhelp (void) @@ -993,7 +997,7 @@ load_toolhelp (void) #ifndef _WIN32_WCE dll = GetModuleHandle (_T("KERNEL32.DLL")); #else - dll = GetModuleHandle (_T("COREDLL.DLL")); + dll = LoadLibrary (L"TOOLHELP.DLL"); #endif if (!dll) return FALSE; @@ -1002,11 +1006,19 @@ load_toolhelp (void) GETPROCADDRESS (dll, CreateToolhelp32Snapshot); win32_Module32First = GETPROCADDRESS (dll, Module32First); win32_Module32Next = GETPROCADDRESS (dll, Module32Next); +#ifdef _WIN32_WCE + win32_CloseToolhelp32Snapshot = + GETPROCADDRESS (dll, CloseToolhelp32Snapshot); +#endif } return (win32_CreateToolhelp32Snapshot != NULL && win32_Module32First != NULL - && win32_Module32Next != NULL); + && win32_Module32Next != NULL +#ifdef _WIN32_WCE + && win32_CloseToolhelp32Snapshot != NULL +#endif + ); } static int @@ -1014,6 +1026,7 @@ toolhelp_get_dll_name (DWORD BaseAddress, char *dll_name_ret) { HANDLE snapshot_module; MODULEENTRY32 modEntry = { sizeof (MODULEENTRY32) }; + int found = 0; if (!load_toolhelp ()) return 0; @@ -1024,24 +1037,25 @@ toolhelp_get_dll_name (DWORD BaseAddress, char *dll_name_ret) return 0; /* Ignore the first module, which is the exe. */ - if (!win32_Module32First (snapshot_module, &modEntry)) - goto failed; - - while (win32_Module32Next (snapshot_module, &modEntry)) - if ((DWORD) modEntry.modBaseAddr == BaseAddress) - { + if (win32_Module32First (snapshot_module, &modEntry)) + while (win32_Module32Next (snapshot_module, &modEntry)) + if ((DWORD) modEntry.modBaseAddr == BaseAddress) + { #ifdef UNICODE - wcstombs (dll_name_ret, modEntry.szExePath, MAX_PATH + 1); + wcstombs (dll_name_ret, modEntry.szExePath, MAX_PATH + 1); #else - strcpy (dll_name_ret, modEntry.szExePath); + strcpy (dll_name_ret, modEntry.szExePath); #endif - CloseHandle (snapshot_module); - return 1; - } + found = 1; + break; + } -failed: +#ifdef _WIN32_WCE + win32_CloseToolhelp32Snapshot (snapshot_module); +#else CloseHandle (snapshot_module); - return 0; +#endif + return found; } static void -- 2.30.2