From 51b5bc19557eb642a0c0e7cb4d6b570da8c019f8 Mon Sep 17 00:00:00 2001 From: Palmer Dabbelt Date: Thu, 31 May 2018 23:11:57 -0700 Subject: This code has really gone to shit --- src/target/riscv/riscv-013.c | 14 ++++++++++++-- 1 file 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. */ -- cgit v1.1