diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2015-06-12 17:02:44 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2015-06-12 17:03:19 -0400 |
commit | d309493c38fcef624f6f85aee4aa37f4f9e3e62a (patch) | |
tree | ba4610e81e6553b93f5d75bd9b54962b421b2acf /gdb/target.h | |
parent | 3374165f51fa3cc3ce1b1bf8c72293464da9d511 (diff) | |
download | gdb-d309493c38fcef624f6f85aee4aa37f4f9e3e62a.zip gdb-d309493c38fcef624f6f85aee4aa37f4f9e3e62a.tar.gz gdb-d309493c38fcef624f6f85aee4aa37f4f9e3e62a.tar.bz2 |
target: consider addressable unit size when reading/writing memory
If we are reading/writing from a memory object, the length represents
the number of "addresses" to read/write, so the addressable unit size
needs to be taken into account when allocating memory on gdb's side.
gdb/ChangeLog:
* target.c (target_read): Consider addressable unit size when
reading from a memory object.
(read_memory_robust): Same.
(read_whatever_is_readable): Same.
(target_write_with_progress): Consider addressable unit size
when writing to a memory object.
* target.h (target_read): Update documentation.
(target_write): Add documentation.
Diffstat (limited to 'gdb/target.h')
-rw-r--r-- | gdb/target.h | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/gdb/target.h b/gdb/target.h index c7046be..32234f7 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -265,13 +265,17 @@ typedef enum target_xfer_status ULONGEST len, ULONGEST *xfered_len); -/* Request that OPS transfer up to LEN 8-bit bytes of the target's - OBJECT. The OFFSET, for a seekable object, specifies the - starting point. The ANNEX can be used to provide additional - data-specific information to the target. - - Return the number of bytes actually transfered, or a negative error - code (an 'enum target_xfer_error' value) if the transfer is not +/* Request that OPS transfer up to LEN addressable units of the target's + OBJECT. When reading from a memory object, the size of an addressable unit + is architecture dependent and can be found using + gdbarch_addressable_memory_unit_size. Otherwise, an addressable unit is 1 + byte long. BUF should point to a buffer large enough to hold the read data, + taking into account the addressable unit size. The OFFSET, for a seekable + object, specifies the starting point. The ANNEX can be used to provide + additional data-specific information to the target. + + Return the number of addressable units actually transferred, or a negative + error code (an 'enum target_xfer_error' value) if the transfer is not supported or otherwise fails. Return of a positive value less than LEN indicates that no further transfer is possible. Unlike the raw to_xfer_partial interface, callers of these functions do not need @@ -300,6 +304,21 @@ extern VEC(memory_read_result_s)* read_memory_robust (struct target_ops *ops, const ULONGEST offset, const LONGEST len); +/* Request that OPS transfer up to LEN addressable units from BUF to the + target's OBJECT. When writing to a memory object, the addressable unit + size is architecture dependent and can be found using + gdbarch_addressable_memory_unit_size. Otherwise, an addressable unit is 1 + byte long. The OFFSET, for a seekable object, specifies the starting point. + The ANNEX can be used to provide additional data-specific information to + the target. + + Return the number of addressable units actually transferred, or a negative + error code (an 'enum target_xfer_status' value) if the transfer is not + supported or otherwise fails. Return of a positive value less than + LEN indicates that no further transfer is possible. Unlike the raw + to_xfer_partial interface, callers of these functions do not need to + retry partial transfers. */ + extern LONGEST target_write (struct target_ops *ops, enum target_object object, const char *annex, const gdb_byte *buf, |