aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2021-01-14 13:52:50 -0800
committerTim Newsome <tim@sifive.com>2021-01-14 13:53:43 -0800
commitfcdecd88aecb98507e5e97926cdbbb84c36ce3b0 (patch)
tree86c1c6c2116ab9c9e06f146b65665fa341e934bd /src/target
parentd7db23c6fcda69e22b23e64b65b10c637f8ddb9e (diff)
downloadriscv-openocd-fcdecd88aecb98507e5e97926cdbbb84c36ce3b0.zip
riscv-openocd-fcdecd88aecb98507e5e97926cdbbb84c36ce3b0.tar.gz
riscv-openocd-fcdecd88aecb98507e5e97926cdbbb84c36ce3b0.tar.bz2
Don't write to zero.
It doesn't have any effect on real hardware, and by caching the value we pretended it did. Fixes #564 Change-Id: I9f4e2cc8abddee61435bbd8d992cbff971a0c28d Signed-off-by: Tim Newsome <tim@sifive.com>
Diffstat (limited to 'src/target')
-rw-r--r--src/target/riscv/riscv.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index 9978931..9a56561 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -4165,6 +4165,11 @@ static int register_set(struct reg *reg, uint8_t *buf)
riscv_current_hartid(target), str, reg->name, reg->valid);
free(str);
+ /* Exit early for writing x0, which on the hardware would be ignored, and we
+ * don't want to update our cache. */
+ if (reg->number == GDB_REGNO_ZERO)
+ return ERROR_OK;
+
memcpy(reg->value, buf, DIV_ROUND_UP(reg->size, 8));
reg->valid = gdb_regno_cacheable(reg->number, true);