From: Pedro Alves <pedro_alves@portugalmail.pt>
To: gdb-patches@sourceware.org
Subject: [gdbserver] Fix toolhelp usage on Windows CE
Date: Mon, 30 Jul 2007 23:34:00 -0000 [thread overview]
Message-ID: <46AE7420.2020300@portugalmail.pt> (raw)
[-- Attachment #1: Type: text/plain, Size: 518 bytes --]
Hi,
On Windows CE, the toolhelp functionality is implemented on
its own dll. Additionally, (and because of the former), the snapshots
must be closed with a special close
function - CloseToolhelp32Snapshot - unlike the "desktop" Windows
versions, which use the standard CloseHandle. The current code isn't
doing it right. This patch fixes it.
(in case the toolhelp_get_dll_name hunk isn't clear in
the diff, I'm just 'reorganizing a bit'/'removing the goto'
to minimize the #ifdefery.)
OK?
Cheers,
Pedro Alves
[-- Attachment #2: toolhelp_wince.diff --]
[-- Type: text/x-diff, Size: 3270 bytes --]
2007-07-31 Pedro Alves <pedro_alves@portugalmail.pt>
* 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/win32-low.c | 44 +++++++++++++++++++++++++++++---------------
1 file changed, 29 insertions(+), 15 deletions(-)
Index: src/gdb/gdbserver/win32-low.c
===================================================================
--- src.orig/gdb/gdbserver/win32-low.c 2007-07-18 13:47:14.000000000 +0100
+++ src/gdb/gdbserver/win32-low.c 2007-07-18 13:56:44.000000000 +0100
@@ -980,6 +980,10 @@ typedef BOOL (WINAPI *winapi_Module32Nex
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
{
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
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
next reply other threads:[~2007-07-30 23:34 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-30 23:34 Pedro Alves [this message]
2007-07-31 3:01 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46AE7420.2020300@portugalmail.pt \
--to=pedro_alves@portugalmail.pt \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox