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

Corinna Vinschen vinschen@redhat.com
Tue Mar 19 16:24:00 GMT 2013


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



More information about the Gdb-patches mailing list