aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2014-01-29 11:48:40 +0800
committerYao Qi <yao@codesourcery.com>2014-02-07 11:19:58 +0800
commitce6d08922f2875544f9ba461a849726ceff84528 (patch)
tree275b7ccc499426f17f5a3758ecfab5d10c4ade86 /gdb
parent2ed4b5488f68c63da0713dc008ba8b688a742386 (diff)
downloadgdb-ce6d08922f2875544f9ba461a849726ceff84528.zip
gdb-ce6d08922f2875544f9ba461a849726ceff84528.tar.gz
gdb-ce6d08922f2875544f9ba461a849726ceff84528.tar.bz2
Return early in target_xfer_partial when LEN is zero.
Nowadays, argument LEN of to_xfer_partial can be zero in some cases, and each implementation may do nothing and return zero, indicating transfer is done. That is fine. However, when we change to_xfer_partial to return target_xfer_status, we have to check every return value of most of to_xfer_partial implementations, return TARGET_XFER_DONE if return value is zero. This patch simplifies this by checking LEN in target_xfer_partial, and return 0 if LEN is zero. Regression tested on x86_84-linux. Is it OK? gdb: 2014-02-07 Yao Qi <yao@codesourcery.com> * target.c (target_xfer_partial): Return zero if LEN is zero.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/target.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6601b48..6bcc205 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
2014-02-07 Yao Qi <yao@codesourcery.com>
+ * target.c (target_xfer_partial): Return zero if LEN is zero.
+
+2014-02-07 Yao Qi <yao@codesourcery.com>
+
* auxv.c (procfs_xfer_auxv): Replace -1 with TARGET_XFER_E_IO.
(ld_so_xfer_auxv): Likewise.
* bfd-target.c (target_bfd_xfer_partial): Likewise.
diff --git a/gdb/target.c b/gdb/target.c
index 3ca3e71..65a226e 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -1697,6 +1697,10 @@ target_xfer_partial (struct target_ops *ops,
gdb_assert (ops->to_xfer_partial != NULL);
+ /* Transfer is done when LEN is zero. */
+ if (len == 0)
+ return 0;
+
if (writebuf && !may_write_memory)
error (_("Writing to memory is not allowed (addr %s, len %s)"),
core_addr_to_string_nz (offset), plongest (len));