[patch] windows-nat.c: Fix offset problem in signal string handling

Corinna Vinschen
2013-03-19T15:14:40Z

Hi,

another problem I found when trying the Cygwin signal handling on 64 bit
is that the address string of the context information can't be fetched,
because the pointer `p' points to the space in front of the address
string, but string_to_core_addr doesn't handle leading spaces.

The easiest way to fix this is to change the call to string_to_core_addr(p)
in handle_output_debug_string to `string_to_core_addr (p + 1)'.

Alternatively the call to string_to_core_addr could be replaced with a
call to `strtoull (p, NULL, 0)'. Since this code is only supported on
Cygwin, it's safe to assume that the strtoull function exists.

So I have two variations of the patch, I apply whatever you think is best.

Thanks,
Corinna

Version 1:

* windows-nat.c (handle_output_debug_string): Fix offset in
call to string_to_core_addr.

Index: windows-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/windows-nat.c,v
retrieving revision 1.242
diff -u -p -r1.242 windows-nat.c
--- windows-nat.c 19 Mar 2013 15:06:26 -0000 1.242
+++ windows-nat.c 19 Mar 2013 15:11:55 -0000
@@ -978,7 +978,7 @@ handle_output_debug_string (struct targe
retval = strtoul (p, &p, 0);
if (!retval)
retval = main_thread_id;
- else if ((x = (LPCVOID) string_to_core_addr (p))
+ else if ((x = (LPCVOID) string_to_core_addr (p + 1))
&& ReadProcessMemory (current_process_handle, x,
&saved_context,
__COPY_CONTEXT_SIZE, &n)

Version 2:

* windows-nat.c (handle_output_debug_string): Replace call
to string_to_core_addr with call to strtoull.

Index: windows-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/windows-nat.c,v
retrieving revision 1.242
diff -u -p -r1.242 windows-nat.c
--- windows-nat.c 19 Mar 2013 15:06:26 -0000 1.242
+++ windows-nat.c 19 Mar 2013 15:13:10 -0000
@@ -978,7 +978,7 @@ handle_output_debug_string (struct targe
retval = strtoul (p, &p, 0);
if (!retval)
retval = main_thread_id;
- else if ((x = (LPCVOID) string_to_core_addr (p))
+ else if ((x = (LPCVOID) strtoull (p, NULL, 0))
&& ReadProcessMemory (current_process_handle, x,
&saved_context,
__COPY_CONTEXT_SIZE, &n)

--
Corinna Vinschen
Cygwin Maintainer
Red Hat