Browse Source

* win32-low.c (child_xfer_memory): Check if ReadProcessMemory

or WriteProcessMemory complete successfully and handle
	ERROR_PARTIAL_COPY error.
binutils-2_24-branch
Pierre Muller 13 years ago
parent
commit
cee83bcb49
  1. 6
      gdb/gdbserver/ChangeLog
  2. 21
      gdb/gdbserver/win32-low.c

6
gdb/gdbserver/ChangeLog

@ -1,3 +1,9 @@
2013-09-02 Pierre Muller <muller@sourceware.org>
* win32-low.c (child_xfer_memory): Check if ReadProcessMemory
or WriteProcessMemory complete successfully and handle
ERROR_PARTIAL_COPY error.
2013-09-02 Pedro Alves <palves@redhat.com>
* server.c (gdb_read_memory): Return -1 on traceframe memory read

21
gdb/gdbserver/win32-low.c

@ -278,21 +278,30 @@ static int
child_xfer_memory (CORE_ADDR memaddr, char *our, int len,
int write, struct target_ops *target)
{
SIZE_T done;
BOOL success;
SIZE_T done = 0;
DWORD lasterror = 0;
uintptr_t addr = (uintptr_t) memaddr;
if (write)
{
WriteProcessMemory (current_process_handle, (LPVOID) addr,
(LPCVOID) our, len, &done);
success = WriteProcessMemory (current_process_handle, (LPVOID) addr,
(LPCVOID) our, len, &done);
if (!success)
lasterror = GetLastError ();
FlushInstructionCache (current_process_handle, (LPCVOID) addr, len);
}
else
{
ReadProcessMemory (current_process_handle, (LPCVOID) addr, (LPVOID) our,
len, &done);
success = ReadProcessMemory (current_process_handle, (LPCVOID) addr,
(LPVOID) our, len, &done);
if (!success)
lasterror = GetLastError ();
}
return done;
if (!success && lasterror == ERROR_PARTIAL_COPY && done > 0)
return done;
else
return success ? done : -1;
}
/* Clear out any old thread list and reinitialize it to a pristine

Loading…
Cancel
Save