From cee83bcb4927035bcdc60a9e3daba2e1ee8eb0f0 Mon Sep 17 00:00:00 2001 From: Pierre Muller Date: Mon, 2 Sep 2013 14:32:19 +0000 Subject: [PATCH] * win32-low.c (child_xfer_memory): Check if ReadProcessMemory or WriteProcessMemory complete successfully and handle ERROR_PARTIAL_COPY error. --- gdb/gdbserver/ChangeLog | 6 ++++++ gdb/gdbserver/win32-low.c | 21 +++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 1e15f77c4c..54348e5a73 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2013-09-02 Pierre Muller + + * win32-low.c (child_xfer_memory): Check if ReadProcessMemory + or WriteProcessMemory complete successfully and handle + ERROR_PARTIAL_COPY error. + 2013-09-02 Pedro Alves * server.c (gdb_read_memory): Return -1 on traceframe memory read diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c index 4e87a43a4c..549c29f082 100644 --- a/gdb/gdbserver/win32-low.c +++ b/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 -- 2.34.1