Continue works well enough for DebugTest.test_exit
authorTim Newsome <tim@sifive.com>
Fri, 29 Apr 2016 18:17:58 +0000 (11:17 -0700)
committerTim Newsome <tim@sifive.com>
Mon, 23 May 2016 19:12:11 +0000 (12:12 -0700)
riscv/gdbserver.cc
riscv/processor.cc

index 629dc279de24cf72dd139ee32a9dc1da298d3050..189a1eaabfec0d01b4baf24a880cf8e240dcdd6f 100644 (file)
@@ -72,6 +72,12 @@ static uint32_t csrsi(unsigned int csr, uint8_t imm) {
     MATCH_CSRRSI;
 }
 
+static uint32_t csrci(unsigned int csr, uint8_t imm) {
+  return (csr << 20) |
+    (bits(imm, 4, 0) << 15) |
+    MATCH_CSRRCI;
+}
+
 static uint32_t csrr(unsigned int rd, unsigned int csr) {
   return (csr << 20) | (rd << 7) | MATCH_CSRRS;
 }
@@ -696,6 +702,10 @@ void gdbserver_t::handle_continue(const std::vector<uint8_t> &packet)
       return send_packet("E30");
   }
 
+  write_debug_ram(0, csrci(DCSR_ADDRESS, DCSR_HALT_MASK));
+  write_debug_ram(1, jal(0, (uint32_t) (DEBUG_ROM_RESUME - (DEBUG_RAM_START + 1*5))));
+  set_interrupt(0);
+
   // TODO p->set_halted(false, HR_NONE);
   // TODO running = true;
 }
index ad84b6e0a19b633ef6e6710335d522f3ae9fcd30..d937f2e481293cb7cceafdcffbaafb885e93e271 100644 (file)
@@ -487,7 +487,6 @@ reg_t processor_t::get_csr(int which)
           (state.dcsr.ebreaku << DCSR_EBREAKU_OFFSET) |
           (state.dcsr.halt << DCSR_HALT_OFFSET) |
           (state.dcsr.cause << DCSR_CAUSE_OFFSET);
-        fprintf(stderr, "DCSR: 0x%x\n", value);
         return value;
       }
     case DPC_ADDRESS: