|
|
|
@ -2324,6 +2324,7 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf, |
|
|
|
{ |
|
|
|
SIZE_T done = 0; |
|
|
|
BOOL success; |
|
|
|
DWORD lasterror = 0; |
|
|
|
|
|
|
|
if (writebuf != NULL) |
|
|
|
{ |
|
|
|
@ -2332,6 +2333,8 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf, |
|
|
|
success = WriteProcessMemory (current_process_handle, |
|
|
|
(LPVOID) (uintptr_t) memaddr, writebuf, |
|
|
|
len, &done); |
|
|
|
if (!success) |
|
|
|
lasterror = GetLastError (); |
|
|
|
FlushInstructionCache (current_process_handle, |
|
|
|
(LPCVOID) (uintptr_t) memaddr, len); |
|
|
|
} |
|
|
|
@ -2342,8 +2345,13 @@ windows_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf, |
|
|
|
success = ReadProcessMemory (current_process_handle, |
|
|
|
(LPCVOID) (uintptr_t) memaddr, readbuf, |
|
|
|
len, &done); |
|
|
|
if (!success) |
|
|
|
lasterror = GetLastError (); |
|
|
|
} |
|
|
|
return success ? done : TARGET_XFER_E_IO; |
|
|
|
if (!success && lasterror == ERROR_PARTIAL_COPY && done > 0) |
|
|
|
return done; |
|
|
|
else |
|
|
|
return success ? done : TARGET_XFER_E_IO; |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
|