diff options
author | Joel Brobecker <brobecker@adacore.com> | 2014-02-25 09:58:25 -0500 |
---|---|---|
committer | Joel Brobecker <brobecker@adacore.com> | 2014-02-25 11:21:55 -0500 |
commit | 475109d8708bdc9c9a4667c0e460a1c395fdd8fd (patch) | |
tree | ee8deab8ea776a9d44055c4057274bc723ad4145 /gdb/ia64-linux-nat.c | |
parent | 041ab8b4843764204e660aefdb006da397e2d8ac (diff) | |
download | gdb-475109d8708bdc9c9a4667c0e460a1c395fdd8fd.zip gdb-475109d8708bdc9c9a4667c0e460a1c395fdd8fd.tar.gz gdb-475109d8708bdc9c9a4667c0e460a1c395fdd8fd.tar.bz2 |
Adjust ia64_linux_xfer_partial following to_xfer_partial API change.
ia64-linux-nat.c no longer compiles because ia64_linux_xfer_partial
no longer matches the to_xfer_partial prototype. This patch fixes
the problem by adjusting it accordingly.
gdb/ChangeLog:
* ia64-linux-nat.c (ia64_linux_xfer_partial): Add function
documentation. Adjust prototype to match the target_ops
to_xfer_partial method. Adjust implementation accordingly.
Diffstat (limited to 'gdb/ia64-linux-nat.c')
-rw-r--r-- | gdb/ia64-linux-nat.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/gdb/ia64-linux-nat.c b/gdb/ia64-linux-nat.c index ccd55b2..c057b55 100644 --- a/gdb/ia64-linux-nat.c +++ b/gdb/ia64-linux-nat.c @@ -838,18 +838,36 @@ ia64_linux_store_registers (struct target_ops *ops, static target_xfer_partial_ftype *super_xfer_partial; -static LONGEST +/* Implement the to_xfer_partial target_ops method. */ + +static enum target_xfer_status ia64_linux_xfer_partial (struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, ULONGEST len) + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) { - if (object == TARGET_OBJECT_UNWIND_TABLE && writebuf == NULL && offset == 0) - return syscall (__NR_getunwind, readbuf, len); + if (object == TARGET_OBJECT_UNWIND_TABLE && readbuf != NULL) + { + gdb_byte *tmp_buf = alloca (offset + len); + ULONGEST xfered; + + xfered = syscall (__NR_getunwind, readbuf, offset + len); + if (xfered <= 0) + return TARGET_XFER_E_IO; + else if (xfered <= offset) + return TARGET_XFER_EOF; + else + { + memcpy (readbuf, tmp_buf + offset, xfered - offset); + *xfered_len = xfered - offset; + return TARGET_XFER_OK; + } + } return super_xfer_partial (ops, object, annex, readbuf, writebuf, - offset, len); + offset, len, xfered_len); } /* For break.b instruction ia64 CPU forgets the immediate value and generates |