From: Eli Zaretskii via Gdb-patches <gdb-patches@sourceware.org>
To: Tom Tromey <tom@tromey.com>
Cc: gdb-patches@sourceware.org
Subject: Re: Subtle problems with "info sharedlibrary" on MS-Windows
Date: Sat, 10 Apr 2021 21:07:31 +0300 [thread overview]
Message-ID: <834kge57z0.fsf@gnu.org> (raw)
In-Reply-To: <87sg3ygp1d.fsf@tromey.com> (message from Tom Tromey on Sat, 10 Apr 2021 09:03:26 -0600)
> From: Tom Tromey <tom@tromey.com>
> Cc: ssbssa@yahoo.de, Eli Zaretskii <eliz@gnu.org>
> Date: Sat, 10 Apr 2021 09:03:26 -0600
>
> I suppose a patch similar to this is needed for gdbserver as well?
Is the below okay?
--- gdbserver/win32-low.cc~ 2021-03-25 03:47:10.000000000 +0200
+++ gdbserver/win32-low.cc 2021-04-10 21:05:48.677425000 +0300
@@ -1165,11 +1165,13 @@ load_psapi (void)
#ifndef _WIN32_WCE
-/* Iterate over all DLLs currently mapped by our inferior, and
- add them to our list of solibs. */
+/* Iterate over all DLLs currently mapped by our inferior, looking for
+ a DLL loaded at LOAD_ADDR; if found, return its file name,
+ otherwise return NULL. If LOAD_ADDR is NULL, add all mapped DLLs
+ to our list of solibs. */
-static void
-win32_add_all_dlls (void)
+static char *
+win32_add_dll (LPVOID load_addr)
{
size_t i;
HMODULE dh_buf[1];
@@ -1178,7 +1180,7 @@ win32_add_all_dlls (void)
BOOL ok;
if (!load_psapi ())
- return;
+ return NULL;
cbNeeded = 0;
#ifdef __x86_64__
@@ -1196,11 +1198,11 @@ win32_add_all_dlls (void)
&cbNeeded);
if (!ok || !cbNeeded)
- return;
+ return NULL;
DllHandle = (HMODULE *) alloca (cbNeeded);
if (!DllHandle)
- return;
+ return NULL;
#ifdef __x86_64__
if (wow64_process)
@@ -1216,7 +1218,7 @@ win32_add_all_dlls (void)
cbNeeded,
&cbNeeded);
if (!ok)
- return;
+ return NULL;
char system_dir[MAX_PATH];
char syswow_dir[MAX_PATH];
@@ -1252,7 +1254,7 @@ win32_add_all_dlls (void)
for (i = 1; i < ((size_t) cbNeeded / sizeof (HMODULE)); i++)
{
MODULEINFO mi;
- char dll_name[MAX_PATH];
+ static char dll_name[MAX_PATH];
if (!(*win32_GetModuleInformation) (current_process_handle,
DllHandle[i],
@@ -1265,6 +1267,9 @@ win32_add_all_dlls (void)
MAX_PATH) == 0)
continue;
+ if (load_addr != nullptr && mi.lpBaseOfDll != load_addr)
+ continue;
+
const char *name = dll_name;
/* Convert the DLL path of 32bit processes returned by
GetModuleFileNameEx from the 64bit system directory to the
@@ -1280,9 +1285,24 @@ win32_add_all_dlls (void)
}
win32_add_one_solib (name, (CORE_ADDR) (uintptr_t) mi.lpBaseOfDll);
+ if (load_addr != nullptr)
+ {
+ strcpy (dll_name, name);
+ return dll_name;
+ }
}
+ return NULL;
}
-#endif
+
+/* Iterate over all DLLs currently mapped by our inferior, and
+ add them to our list of solibs. */
+
+static void
+win32_add_all_dlls (void)
+{
+ win32_add_dll (NULL);
+}
+#endif /* !_WIN32_WCE */
typedef HANDLE (WINAPI *winapi_CreateToolhelp32Snapshot) (DWORD, DWORD);
typedef BOOL (WINAPI *winapi_Module32First) (HANDLE, LPMODULEENTRY32);
@@ -1298,7 +1318,12 @@ windows_nat::handle_load_dll ()
dll_name = get_image_name (current_process_handle,
event->lpImageName, event->fUnicode);
- if (!dll_name)
+#ifndef _WIN32_WCE
+ if (dll_name == nullptr
+ && event->lpBaseOfDll != nullptr)
+ dll_name = win32_add_dll (event->lpBaseOfDll);
+#endif
+ if (dll_name == nullptr)
return;
win32_add_one_solib (dll_name, (CORE_ADDR) (uintptr_t) event->lpBaseOfDll);
next prev parent reply other threads:[~2021-04-10 18:07 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-10 12:36 Eli Zaretskii via Gdb-patches
2021-03-10 16:30 ` Hannes Domani via Gdb-patches
2021-03-10 16:51 ` Eli Zaretskii via Gdb-patches
2021-03-10 17:35 ` Hannes Domani via Gdb-patches
2021-04-05 17:51 ` Eli Zaretskii via Gdb-patches
2021-04-06 13:16 ` Eli Zaretskii via Gdb-patches
2021-04-07 21:18 ` Simon Marchi via Gdb-patches
2021-04-08 7:06 ` Eli Zaretskii via Gdb-patches
2021-04-08 13:57 ` Simon Marchi via Gdb-patches
2021-04-10 8:46 ` Eli Zaretskii via Gdb-patches
2021-04-10 15:03 ` Tom Tromey
2021-04-10 18:07 ` Eli Zaretskii via Gdb-patches [this message]
2021-04-10 22:56 ` Simon Marchi via Gdb-patches
2021-04-10 23:11 ` Simon Marchi via Gdb-patches
2021-04-11 7:10 ` Eli Zaretskii via Gdb-patches
2021-04-11 12:27 ` Simon Marchi via Gdb-patches
2021-04-11 18:43 ` Eli Zaretskii via Gdb-patches
2021-04-12 19:03 ` Tom Tromey
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=834kge57z0.fsf@gnu.org \
--to=gdb-patches@sourceware.org \
--cc=eliz@gnu.org \
--cc=tom@tromey.com \
/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