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));
}
}
+ } 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;
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.