Don't waste time spinning in place in debug mode
authorTim Newsome <tim@sifive.com>
Wed, 22 Feb 2017 03:32:24 +0000 (19:32 -0800)
committerTim Newsome <tim@sifive.com>
Wed, 22 Feb 2017 03:32:24 +0000 (19:32 -0800)
riscv/execute.cc

index eb9fe4bd9ac109929ca5784905c6adb21e45f778..1e63cf02ec51b40a849b5342aa965e7d9e7e0b0b 100644 (file)
@@ -69,10 +69,6 @@ void processor_t::step(size_t n)
     } else if (state.dcsr.halt) {
       enter_debug_mode(DCSR_CAUSE_HALT);
     }
-  } else {
-    // In Debug Mode, just do 11 steps at a time. Otherwise we're going to be
-    // spinning the rest of the time anyway.
-    n = std::min(n, (size_t) 11);
   }
 
   while (n > 0) {
@@ -120,6 +116,13 @@ void processor_t::step(size_t n)
             // enter_debug_mode changed state.pc, so we can't just continue.
             break;
           }
+
+          if (unlikely(state.pc >= DEBUG_ROM_ENTRY &&
+                state.pc < DEBUG_ROM_ENTRY + DEBUG_ROM_ENTRY_SIZE)) {
+            // We're spinning waiting for the debugger to tell us something.
+            // Let's go talk to the debugger.
+            return;
+          }
         }
       }
       else while (instret < n)