Set impebreak.
authorTim Newsome <tim@sifive.com>
Thu, 12 Oct 2017 19:07:11 +0000 (12:07 -0700)
committerTim Newsome <tim@sifive.com>
Mon, 11 Dec 2017 21:21:47 +0000 (13:21 -0800)
riscv/debug_module.cc
riscv/debug_module.h

index b27fe35fd386e0c6d4fa2132b72039552bd4a049..981e9913467a9e41bbc739ca2b376aae61d4efc8 100644 (file)
@@ -26,6 +26,7 @@ debug_module_t::debug_module_t(sim_t *sim, unsigned progbufsize) :
   dmcontrol = {0};
 
   dmstatus = {0};
+  dmstatus.impebreak = true;
   dmstatus.authenticated = 1;
   dmstatus.version = 2;
 
@@ -40,7 +41,10 @@ debug_module_t::debug_module_t(sim_t *sim, unsigned progbufsize) :
   memset(debug_rom_flags, 0, sizeof(debug_rom_flags));
   memset(resumeack, 0, sizeof(resumeack));
   memset(program_buffer, 0, program_buffer_bytes);
-  program_buffer[progbufsize] = ebreak();
+  program_buffer[4*progbufsize] = ebreak();
+  program_buffer[4*progbufsize+1] = ebreak() >> 8;
+  program_buffer[4*progbufsize+2] = ebreak() >> 16;
+  program_buffer[4*progbufsize+3] = ebreak() >> 24;
   memset(dmdata, 0, sizeof(dmdata));
 
   write32(debug_rom_whereto, 0,
@@ -65,6 +69,7 @@ void debug_module_t::reset()
   dmcontrol = {0};
 
   dmstatus = {0};
+  dmstatus.impebreak = true;
   dmstatus.authenticated = 1;
   dmstatus.version = 2;
 
@@ -301,6 +306,8 @@ bool debug_module_t::dmi_read(unsigned address, uint32_t *value)
             dmstatus.allresumeack = false;
           }
 
+          result = set_field(result, DMI_DMSTATUS_IMPEBREAK,
+              dmstatus.impebreak);
          result = set_field(result, DMI_DMSTATUS_ALLNONEXISTENT, dmstatus.allnonexistant);
          result = set_field(result, DMI_DMSTATUS_ALLUNAVAIL, dmstatus.allunavail);
          result = set_field(result, DMI_DMSTATUS_ALLRUNNING, dmstatus.allrunning);
index f6f2009b7e3890240d6d779729da22349bc1c34c..00c66cc72253916c36366601ebfd2e40017fd92f 100644 (file)
@@ -18,6 +18,7 @@ typedef struct {
 } dmcontrol_t;
 
 typedef struct {
+  bool impebreak;
   bool allnonexistant;
   bool anynonexistant;
   bool allunavail;