Browse Source

Add dummy custom debug registers, to test OpenOCD. (#233)

pull/235/head
Tim Newsome 8 years ago
committed by Andrew Waterman
parent
commit
176ff23c6f
  1. 15
      riscv/debug_module.cc
  2. 3
      riscv/debug_module.h

15
riscv/debug_module.cc

@ -25,6 +25,7 @@ debug_module_t::debug_module_t(sim_t *sim, unsigned progbufsize, unsigned max_bu
require_authentication(require_authentication),
debug_progbuf_start(debug_data_start - program_buffer_bytes),
debug_abstract_start(debug_progbuf_start - debug_abstract_size*4),
custom_base(0),
sim(sim)
{
D(fprintf(stderr, "debug_data_start=0x%x\n", debug_data_start));
@ -599,6 +600,20 @@ bool debug_module_t::perform_abstract_command()
}
}
} else if (regno >= 0xc000 && (regno & 1) == 1) {
// Support odd-numbered custom registers, to allow for debugger testing.
unsigned custom_number = regno - 0xc000;
abstractcs.cmderr = CMDERR_NONE;
if (write) {
// Writing V to custom register N will cause future reads of N to
// return V, reads of N-1 will return V-1, etc.
custom_base = read32(dmdata, 0) - custom_number;
} else {
write32(dmdata, 0, custom_number + custom_base);
write32(dmdata, 1, 0);
}
return true;
} else {
abstractcs.cmderr = CMDERR_NOTSUP;
return true;

3
riscv/debug_module.h

@ -115,6 +115,9 @@ class debug_module_t : public abstract_device_t
static const unsigned debug_abstract_size = 5;
unsigned debug_abstract_start;
// R/W this through custom registers, to allow debuggers to test that
// functionality.
unsigned custom_base;
// We only support 1024 harts currently. More requires at least resizing
// the arrays below, and their corresponding special memory regions.

Loading…
Cancel
Save