summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2019-09-09 05:06:17 +0000
committermidipix <writeonce@midipix.org>2019-09-09 05:07:27 +0000
commitf8ee0138e4c3b517d6cfe42cd34287835dc98a45 (patch)
treeea33d95906726952a3856cc3151862d529f1a58c
parentb095cb097904fbebb7ce8879f46dbe34988bfcc8 (diff)
downloadchainport-f8ee0138e4c3b517d6cfe42cd34287835dc98a45.tar.bz2
chainport-f8ee0138e4c3b517d6cfe42cd34287835dc98a45.tar.xz
mgdb: winnt_xfer_partial((): initial implementation.
-rw-r--r--overlay/mgdb/gdb/winnt-nat.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/overlay/mgdb/gdb/winnt-nat.c b/overlay/mgdb/gdb/winnt-nat.c
index 4458878..bcb4c5b 100644
--- a/overlay/mgdb/gdb/winnt-nat.c
+++ b/overlay/mgdb/gdb/winnt-nat.c
@@ -191,8 +191,15 @@ static enum target_xfer_status winnt_xfer_partial(
(void)t;
(void)object;
(void)annex;
- (void)offset;
- (void)len;
+
+ ssize_t ret;
+ pid_t pid;
+ struct winnt_process * pidinfo;
+
+ pid = inferior_ptid.pid;
+
+ if (!(pidinfo = winnt_process_record(pid)))
+ winnt_perror("internal error: record not found",pid);
if (readbuf && writebuf)
winnt_error("internal error: both readbuf and writebuf are non-null.");
@@ -203,7 +210,16 @@ static enum target_xfer_status winnt_xfer_partial(
if (!nxfered)
winnt_error("internal error: nxfered is null.");
- return TARGET_XFER_E_IO;
+ ret = (readbuf)
+ ? __dbg_vm_read(pidinfo->pfd,readbuf,len,offset)
+ : __dbg_vm_write(pidinfo->pfd,writebuf,len,offset);
+
+ if (ret < 0)
+ return TARGET_XFER_E_IO;
+
+ *nxfered = ret;
+
+ return TARGET_XFER_OK;
}
static int winnt_thread_alive (struct target_ops * t, ptid_t ptid)