From: "Pierre Muller" <pierre.muller@ics-cnrs.unistra.fr>
To: "'Pedro Alves'" <pedro@codesourcery.com>
Cc: <gdb-patches@sourceware.org>
Subject: RE: [RFA] [1/4] Mingw64 gdbserver support
Date: Mon, 19 Apr 2010 23:46:00 -0000 [thread overview]
Message-ID: <002101cae01a$82284850$8678d8f0$@muller@ics-cnrs.unistra.fr> (raw)
In-Reply-To: <201004200014.30032.pedro@codesourcery.com>
> -----Message d'origine-----
> De : Pedro Alves [mailto:pedro@codesourcery.com]
> Envoyé : Tuesday, April 20, 2010 1:14 AM
> À : Pierre Muller
> Cc : gdb-patches@sourceware.org
> Objet : Re: [RFA] [1/4] Mingw64 gdbserver support
>
> On Monday 19 April 2010 23:55:57, Pierre Muller wrote:
> > It would be nice if someone could check that this
> > patch works for mingwce targets, I cannot do this myself.
>
> Don't worry about it. I'll do that after the patch is applied, if
> noone beats me to it. It may take me a while, but I'll surely test
> on CE before the next release.
OK, great!
> > gdbserver ChangeLog entry:
> >
> > 2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr>
> >
> > * win32-low.c: Adapt to support also 64-bit architecture.
> > (child_xfer_memory): Use uintptr_t type for local variable
> `addr'.
> > (get_image_name): Use SIZE_T type for local variable `done'.
> > (psapi_get_dll_name): Use uintptr_t type for parameter
> > `BaseAddress'.
> > (toolhelp_get_dll_name): Idem.
> > (handle_load_dll): Use uintptr_t type for local variable
> > `load_addr'.
> > (handle_unload_dll): Use unitptr_t typecast to avoid warning.
>
> Typo: unitptr_t.
Fixed.
> > (handle_exception): Use phex_nz to avoid warning.
> > (win32_wait): Remove unused local variable `process'.
> >
> > Index: gdbserver/win32-low.c
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/gdbserver/win32-low.c,v
> > retrieving revision 1.46
> > diff -u -p -r1.46 win32-low.c
> > --- gdbserver/win32-low.c 16 Apr 2010 07:49:37 -0000 1.46
> > +++ gdbserver/win32-low.c 17 Apr 2010 22:08:36 -0000
> > @@ -280,7 +280,7 @@ child_xfer_memory (CORE_ADDR memaddr, ch
> > int write, struct target_ops *target)
> > {
> > SIZE_T done;
> > - long addr = (long) memaddr;
> > + uintptr_t addr = (uintptr_t) memaddr;
> >
> > if (write)
> > {
> > @@ -941,7 +941,7 @@ get_image_name (HANDLE h, void *address,
> > char *address_ptr;
> > int len = 0;
> > char b[2];
> > - DWORD done;
> > + SIZE_T done;
> >
> > /* Attempt to read the name of the dll that was detected.
> > This is documented to work only when actively debugging
> > @@ -1019,7 +1019,7 @@ load_psapi (void)
> > }
> >
> > static int
> > -psapi_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
> > +psapi_get_dll_name (uintptr_t BaseAddress, char *dll_name_ret)
>
> Make this one above,
>
> > @@ -1134,7 +1134,7 @@ load_toolhelp (void)
> > }
> >
> > static int
> > -toolhelp_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
> > +toolhelp_get_dll_name (uintptr_t BaseAddress, char *dll_name_ret)
>
> and this one, take an LPVOID/void* instead, like the
> equivalent gdb/windows-nat.c code, and most of the casts
> disappear. Again, please remember that gdb/windows-nat.c has all
> these problems fixed already. Remember to take a look there..
I used LPVOID as you suggested.
> > {
> > HANDLE snapshot_module;
> > MODULEENTRY32 modEntry = { sizeof (MODULEENTRY32) };
> > @@ -1151,7 +1151,7 @@ toolhelp_get_dll_name (DWORD BaseAddress
> > /* Ignore the first module, which is the exe. */
> > if (win32_Module32First (snapshot_module, &modEntry))
> > while (win32_Module32Next (snapshot_module, &modEntry))
> > - if ((DWORD) modEntry.modBaseAddr == BaseAddress)
> > + if ((uintptr_t) modEntry.modBaseAddr == BaseAddress)
>
> ... like this one...
>
> > {
> > #ifdef UNICODE
> > wcstombs (dll_name_ret, modEntry.szExePath, MAX_PATH + 1);
> > @@ -1176,21 +1176,21 @@ handle_load_dll (void)
> > LOAD_DLL_DEBUG_INFO *event = ¤t_event.u.LoadDll;
> > char dll_buf[MAX_PATH + 1];
> > char *dll_name = NULL;
> > - DWORD load_addr;
> > + uintptr_t load_addr;
> >
> > dll_buf[0] = dll_buf[sizeof (dll_buf) - 1] = '\0';
> >
> > /* Windows does not report the image name of the dlls in the debug
> > event on attaches. We resort to iterating over the list of
> > loaded dlls looking for a match by image base. */
> > - if (!psapi_get_dll_name ((DWORD) event->lpBaseOfDll, dll_buf))
> > + if (!psapi_get_dll_name ((uintptr_t) event->lpBaseOfDll, dll_buf))
>
> and this one...
>
> > {
> > if (!server_waiting)
> > /* On some versions of Windows and Windows CE, we can't
> create
> > toolhelp snapshots while the inferior is stopped in a
> > LOAD_DLL_DEBUG_EVENT due to a dll load, but we can while
> > Windows is reporting the already loaded dlls. */
> > - toolhelp_get_dll_name ((DWORD) event->lpBaseOfDll, dll_buf);
> > + toolhelp_get_dll_name ((uintptr_t) event->lpBaseOfDll,
> dll_buf);
>
> and this one.
>
> > }
> >
> > dll_name = dll_buf;
> > @@ -1205,7 +1205,7 @@ handle_load_dll (void)
> > the offset from 0 of the first byte in an image - because
> > of the file header and the section alignment. */
> >
> > - load_addr = (DWORD) event->lpBaseOfDll + 0x1000;
> > + load_addr = (uintptr_t) event->lpBaseOfDll + 0x1000;
> > win32_add_one_solib (dll_name, load_addr);
> > }
> >
> > @@ -1213,7 +1213,7 @@ static void
> > handle_unload_dll (void)
> > {
> > CORE_ADDR load_addr =
> > - (CORE_ADDR) (DWORD) current_event.u.UnloadDll.lpBaseOfDll;
> > + (CORE_ADDR) (uintptr_t)
> current_event.u.UnloadDll.lpBaseOfDll;
> > load_addr += 0x1000;
> > unloaded_dll (NULL, load_addr);
> > }
> > @@ -1314,10 +1314,10 @@ handle_exception (struct target_waitstat
> > ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
> > return;
> > }
> > - OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at
> 0x%08lx",
> > + OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at
> 0x%s",
> >
> current_event.u.Exception.ExceptionRecord.ExceptionCode,
> > - (DWORD) current_event.u.Exception.ExceptionRecord.
> > - ExceptionAddress));
> > + phex_nz ((uintptr_t)
> > current_event.u.Exception.ExceptionRecord.
> > + ExceptionAddress, sizeof(uintptr_t))));
>
> Missing space before parens.
Fixed.
> > ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
> > break;
> > }
> > @@ -1577,7 +1577,6 @@ get_child_debug_event (struct target_wai
> > static ptid_t
> > win32_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int
> options)
> > {
> > - struct process_info *process;
> > struct regcache *regcache;
> >
> > while (1)
> >
New version below.
Pierre
gdbserver ChangeLog entry:
2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr>
* win32-low.c: Adapt to support also 64-bit architecture.
(child_xfer_memory): Use uintptr_t type for local variable `addr'.
(get_image_name): Use SIZE_T type for local variable `done'.
(psapi_get_dll_name): Use LPVOID type for parameter `BaseAddress'.
(toolhelp_get_dll_name): Idem.
(handle_load_dll): Use CORE_ADDR type for local variable
`load_addr'.
Use uintptr_t typecast to avoid warning.
(handle_unload_dll): Use uintptr_t typecast to avoid warning.
(handle_exception): Use phex_nz to avoid warning.
(win32_wait): Remove unused local variable `process'.
Index: gdbserver/win32-low.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/win32-low.c,v
retrieving revision 1.46
diff -u -p -r1.46 win32-low.c
--- gdbserver/win32-low.c 16 Apr 2010 07:49:37 -0000 1.46
+++ gdbserver/win32-low.c 19 Apr 2010 23:30:05 -0000
@@ -280,7 +280,7 @@ child_xfer_memory (CORE_ADDR memaddr, ch
int write, struct target_ops *target)
{
SIZE_T done;
- long addr = (long) memaddr;
+ uintptr_t addr = (uintptr_t) memaddr;
if (write)
{
@@ -941,7 +941,7 @@ get_image_name (HANDLE h, void *address,
char *address_ptr;
int len = 0;
char b[2];
- DWORD done;
+ SIZE_T done;
/* Attempt to read the name of the dll that was detected.
This is documented to work only when actively debugging
@@ -1019,7 +1019,7 @@ load_psapi (void)
}
static int
-psapi_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
+psapi_get_dll_name (LPVOID BaseAddress, char *dll_name_ret)
{
DWORD len;
MODULEINFO mi;
@@ -1064,7 +1064,7 @@ psapi_get_dll_name (DWORD BaseAddress, c
(int) err, strwinerror (err));
}
- if ((DWORD) (mi.lpBaseOfDll) == BaseAddress)
+ if (mi.lpBaseOfDll == BaseAddress)
{
len = (*win32_GetModuleFileNameExA) (current_process_handle,
DllHandle[i],
@@ -1134,7 +1134,7 @@ load_toolhelp (void)
}
static int
-toolhelp_get_dll_name (DWORD BaseAddress, char *dll_name_ret)
+toolhelp_get_dll_name (LPVOID BaseAddress, char *dll_name_ret)
{
HANDLE snapshot_module;
MODULEENTRY32 modEntry = { sizeof (MODULEENTRY32) };
@@ -1151,7 +1151,7 @@ toolhelp_get_dll_name (DWORD BaseAddress
/* Ignore the first module, which is the exe. */
if (win32_Module32First (snapshot_module, &modEntry))
while (win32_Module32Next (snapshot_module, &modEntry))
- if ((DWORD) modEntry.modBaseAddr == BaseAddress)
+ if (modEntry.modBaseAddr == BaseAddress)
{
#ifdef UNICODE
wcstombs (dll_name_ret, modEntry.szExePath, MAX_PATH + 1);
@@ -1176,21 +1176,21 @@ handle_load_dll (void)
LOAD_DLL_DEBUG_INFO *event = ¤t_event.u.LoadDll;
char dll_buf[MAX_PATH + 1];
char *dll_name = NULL;
- DWORD load_addr;
+ CORE_ADDR load_addr;
dll_buf[0] = dll_buf[sizeof (dll_buf) - 1] = '\0';
/* Windows does not report the image name of the dlls in the debug
event on attaches. We resort to iterating over the list of
loaded dlls looking for a match by image base. */
- if (!psapi_get_dll_name ((DWORD) event->lpBaseOfDll, dll_buf))
+ if (!psapi_get_dll_name (event->lpBaseOfDll, dll_buf))
{
if (!server_waiting)
/* On some versions of Windows and Windows CE, we can't create
toolhelp snapshots while the inferior is stopped in a
LOAD_DLL_DEBUG_EVENT due to a dll load, but we can while
Windows is reporting the already loaded dlls. */
- toolhelp_get_dll_name ((DWORD) event->lpBaseOfDll, dll_buf);
+ toolhelp_get_dll_name (event->lpBaseOfDll, dll_buf);
}
dll_name = dll_buf;
@@ -1205,7 +1205,7 @@ handle_load_dll (void)
the offset from 0 of the first byte in an image - because
of the file header and the section alignment. */
- load_addr = (DWORD) event->lpBaseOfDll + 0x1000;
+ load_addr = (CORE_ADDR) (uintptr_t) event->lpBaseOfDll + 0x1000;
win32_add_one_solib (dll_name, load_addr);
}
@@ -1213,7 +1213,7 @@ static void
handle_unload_dll (void)
{
CORE_ADDR load_addr =
- (CORE_ADDR) (DWORD) current_event.u.UnloadDll.lpBaseOfDll;
+ (CORE_ADDR) (uintptr_t) current_event.u.UnloadDll.lpBaseOfDll;
load_addr += 0x1000;
unloaded_dll (NULL, load_addr);
}
@@ -1314,10 +1314,10 @@ handle_exception (struct target_waitstat
ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
return;
}
- OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at 0x%08lx",
+ OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at 0x%s",
current_event.u.Exception.ExceptionRecord.ExceptionCode,
- (DWORD) current_event.u.Exception.ExceptionRecord.
- ExceptionAddress));
+ phex_nz ((uintptr_t)
current_event.u.Exception.ExceptionRecord.
+ ExceptionAddress, sizeof (uintptr_t))));
ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
break;
}
@@ -1577,7 +1577,6 @@ get_child_debug_event (struct target_wai
static ptid_t
win32_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options)
{
- struct process_info *process;
struct regcache *regcache;
while (1)
next prev parent reply other threads:[~2010-04-19 23:46 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-19 22:55 Pierre Muller
2010-04-19 23:14 ` Pedro Alves
2010-04-19 23:46 ` Pierre Muller [this message]
2010-04-19 23:57 ` Pedro Alves
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='002101cae01a$82284850$8678d8f0$@muller@ics-cnrs.unistra.fr' \
--to=pierre.muller@ics-cnrs.unistra.fr \
--cc=gdb-patches@sourceware.org \
--cc=pedro@codesourcery.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