From: Øyvind Harboe Date: Wed, 21 Oct 2009 10:54:41 +0000 (+0200) Subject: Defined target_write_memory() to be able to handle implementing breakpoints for read... X-Git-Tag: v0.3.0-rc0~53 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=62525792e073a54f21e334764ddd9dcd2d47ff0c;hp=a02411a15f24a9e1f0ac893e631c6a520adfdab8 Defined target_write_memory() to be able to handle implementing breakpoints for read only ram(e.g. MMU write protected. --- diff --git a/src/target/target.h b/src/target/target.h index 0f8be6f2cb..19d8013ab7 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);