summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2009-10-21 12:54:41 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2009-10-21 12:54:41 +0200
commit62525792e073a54f21e334764ddd9dcd2d47ff0c (patch)
treed0df6dad7a59b266a891628ae39cd9b9573ab53e /src
parenta02411a15f24a9e1f0ac893e631c6a520adfdab8 (diff)
downloadopenocd+libswd-62525792e073a54f21e334764ddd9dcd2d47ff0c.tar.gz
openocd+libswd-62525792e073a54f21e334764ddd9dcd2d47ff0c.tar.bz2
openocd+libswd-62525792e073a54f21e334764ddd9dcd2d47ff0c.tar.xz
openocd+libswd-62525792e073a54f21e334764ddd9dcd2d47ff0c.zip
Defined target_write_memory() to be able to handle implementing breakpoints for read only ram(e.g. MMU write protected.
Diffstat (limited to 'src')
-rw-r--r--src/target/target.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/target/target.h b/src/target/target.h
index 0f8be6f2..19d8013a 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -363,6 +363,30 @@ extern int target_write_memory(struct target_s *target,
extern int target_bulk_write_memory(struct target_s *target,
uint32_t address, uint32_t count, uint8_t *buffer);
+/*
+ * Write to target memory using the virtual address.
+ *
+ * Note that this fn is used to implement software breakpoints. Targets
+ * can implement support for software breakpoints to memory marked as read
+ * only by making this fn write to ram even if it is read only(MMU or
+ * MPUs).
+ *
+ * It is sufficient to implement for writing a single word(16 or 32 in
+ * ARM32/16 bit case) to write the breakpoint to ram.
+ *
+ * The target should also take care of "other things" to make sure that
+ * software breakpoints can be written using this function. E.g.
+ * when there is a separate instruction and data cache, this fn must
+ * make sure that the instruction cache is synced up to the potential
+ * code change that can happen as a result of the memory write(typically
+ * by invalidating the cache).
+ *
+ * The high level wrapper fn in target.c will break down this memory write
+ * request to multiple write requests to the target driver to e.g. guarantee
+ * that writing 4 bytes to an aligned address happens with a single 32 bit
+ * write operation, thus making this fn suitable to e.g. write to special
+ * peripheral registers which do not support byte operations.
+ */
extern int target_write_buffer(struct target_s *target, uint32_t address, uint32_t size, uint8_t *buffer);
extern int target_read_buffer(struct target_s *target, uint32_t address, uint32_t size, uint8_t *buffer);
extern int target_checksum_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t* crc);