void gdbserver_t::halt()
{
processor_t *p = sim->get_core(0);
- write_debug_ram(0, csrsi(DCSR_ADDRESS, DCSR_HALT_OFFSET));
+ write_debug_ram(0, csrsi(DCSR_ADDRESS, DCSR_HALT_MASK));
write_debug_ram(1, csrr(S0, DPC_ADDRESS));
write_debug_ram(2, sw(S0, 0, (uint16_t) DEBUG_RAM_START));
write_debug_ram(3, csrr(S0, DCSR_ADDRESS));
write_debug_ram(4, sw(S0, 0, (uint16_t) DEBUG_RAM_START + 8));
write_debug_ram(5, jal(0, (uint32_t) (DEBUG_ROM_RESUME - (DEBUG_RAM_START + 4*5))));
- sim->debug_module.set_interrupt(p->id);
+ sim->debug_module.set_interrupt(0);
state = STATE_HALTING;
}
send_packet("S00");
}
+void die(const char* msg)
+{
+ fprintf(stderr, "%s\n", msg);
+ abort();
+}
+
void gdbserver_t::handle_general_registers_read(const std::vector<uint8_t> &packet)
{
// Register order that gdb expects is:
running_checksum = 0;
processor_t *p = sim->get_core(0);
for (int r = 0; r < 32; r++) {
- send(p->state.XPR[r]);
+ die("handle_general_registers_read");
+ // send(p->state.XPR[r]);
}
send_running_checksum();
expect_ack = true;
send("$");
running_checksum = 0;
+ die("handle_register_read");
+ /*
if (n >= REG_XPR0 && n <= REG_XPR31) {
send(p->state.XPR[n - REG_XPR0]);
} else if (n == REG_PC) {
} else {
return send_packet("E02");
}
+ */
send_running_checksum();
expect_ack = true;
processor_t *p = sim->get_core(0);
+ die("handle_register_write");
+ /*
if (n >= REG_XPR0 && n <= REG_XPR31) {
p->state.XPR.write(n - REG_XPR0, value);
} else if (n == REG_PC) {
} else {
return send_packet("E07");
}
+ */
return send_packet("OK");
}
processor_t *p = sim->get_core(0);
if (packet[2] != '#') {
std::vector<uint8_t>::const_iterator iter = packet.begin() + 2;
- p->state.pc = consume_hex_number(iter, packet.end());
+ die("handle_continue");
+ // p->state.pc = consume_hex_number(iter, packet.end());
if (*iter != '#')
return send_packet("E30");
}
processor_t *p = sim->get_core(0);
if (packet[2] != '#') {
std::vector<uint8_t>::const_iterator iter = packet.begin() + 2;
- p->state.pc = consume_hex_number(iter, packet.end());
+ die("handle_step");
+ //p->state.pc = consume_hex_number(iter, packet.end());
if (*iter != '#')
return send_packet("E40");
}
}
processor_t *p = sim->get_core(0);
+ die("handle_breakpoint");
+ /*
mmu_t* mmu = p->mmu;
if (insert) {
bp.insert(mmu);
}
mmu->flush_icache();
sim->debug_mmu->flush_icache();
+ */
return send_packet("OK");
}
if (client_fd > 0) {
processor_t *p = sim->get_core(0);
- if (state == STATE_HALTING && sim->debug_module.get_interrupt(p->id) == 0) {
+ if (state == STATE_HALTING && sim->debug_module.get_interrupt(0) == 0) {
// gdb requested a halt and now it's done.
send_packet("T05");
fprintf(stderr, "DPC: 0x%x\n", read_debug_ram(0));
fprintf(stderr, "DCSR: 0x%x\n", read_debug_ram(2));
state = STATE_HALTED;
+ p->debug = false;
}
/* TODO