aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPalmer Dabbelt <palmer@dabbelt.com>2018-05-31 23:11:57 -0700
committerPalmer Dabbelt <palmer@dabbelt.com>2018-05-31 23:11:57 -0700
commit51b5bc19557eb642a0c0e7cb4d6b570da8c019f8 (patch)
treeb0f42630c3c91a1fd93df72de014535857326ccd
parentb5c0f70aa8540355ae0db512245a2076f3f8c0e7 (diff)
downloadriscv-openocd-51b5bc19557eb642a0c0e7cb4d6b570da8c019f8.zip
riscv-openocd-51b5bc19557eb642a0c0e7cb4d6b570da8c019f8.tar.gz
riscv-openocd-51b5bc19557eb642a0c0e7cb4d6b570da8c019f8.tar.bz2
This code has really gone to shit
-rw-r--r--src/target/riscv/riscv-013.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/target/riscv/riscv-013.c b/src/target/riscv/riscv-013.c
index cc0b501..746d164 100644
--- a/src/target/riscv/riscv-013.c
+++ b/src/target/riscv/riscv-013.c
@@ -2186,11 +2186,21 @@ static int read_memory_progbuf(struct target *target, target_addr_t address,
1 << DMI_ABSTRACTAUTO_AUTOEXECDATA_OFFSET);
break;
default:
- LOG_ERROR("error when reading memory, abstractcs=0x%08lx", (long)abstractcs);
+ LOG_DEBUG("error when reading memory, abstractcs=0x%08lx", (long)abstractcs);
riscv013_clear_abstract_error(target);
riscv_batch_free(batch);
result = ERROR_FAIL;
- goto error;
+ /* Eclipse attempts to pre-buffer some data
+ * before an address, so here we retry on
+ * failing reads by just moving on to the next
+ * address. */
+ dmi_write(target, DMI_ABSTRACTAUTO, 0);
+ next_read_addr = next_read_addr + size;
+ register_write_direct(target, &next_write_addr, GDB_REGNO_S0);
+ dmi_write(target, DMI_COMMAND, command);
+ dmi_write(target, DMI_ABSTRACTAUTO,
+ 1 << DMI_ABSTRACTAUTO_AUTOEXECDATA_OFFSET);
+ break;
}
/* Now read whatever we got out of the batch. */