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

or WriteProcessMemory complete successfully and handle
	ERROR_PARTIAL_COPY error.
This commit is contained in:
Pierre Muller 2013-09-02 14:32:19 +00:00
parent 9a13b2fa01
commit cee83bcb49
2 changed files with 21 additions and 6 deletions

View File

@ -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

View File

@ -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