Fixes some issues with respect to breakpoints and disassembly

PiperOrigin-RevId: 805867893
Change-Id: I1d753bf589ec867fd278c90b90a97c4bfcd80a69
diff --git a/riscv/debug_command_shell.cc b/riscv/debug_command_shell.cc
index c05ce16..0893446 100644
--- a/riscv/debug_command_shell.cc
+++ b/riscv/debug_command_shell.cc
@@ -185,37 +185,33 @@
   std::string previous_line;
   current_core_ = 0;
   absl::string_view line_view;
-  bool halt_reason = false;
   while (true) {
     // Prompt and read in the next command.
     auto pc_result =
         core_access_[current_core_].debug_interface->ReadRegister("pc");
     std::string prompt;
-    if (halt_reason) {
-      halt_reason = false;
-      auto result =
-          core_access_[current_core_].debug_interface->GetLastHaltReason();
-      if (result.ok()) {
-        switch (result.value()) {
-          case *HaltReason::kSoftwareBreakpoint:
-            absl::StrAppend(&prompt, "Stopped at software breakpoint\n");
-            break;
-          case *HaltReason::kUserRequest:
-            absl::StrAppend(&prompt, "Stopped at user request\n");
-            break;
-          case *HaltReason::kDataWatchPoint:
-            absl::StrAppend(&prompt, "Stopped at data watchpoint\n");
-            break;
-          case *HaltReason::kProgramDone:
-            absl::StrAppend(&prompt, "Program done\n");
-            break;
-          default:
-            if ((result.value() >= *HaltReason::kUserSpecifiedMin) &&
-                (result.value() <= *HaltReason::kUserSpecifiedMax)) {
-              absl::StrAppend(&prompt, "Stopped for custom halt reason\n");
-            }
-            break;
-        }
+    auto result =
+        core_access_[current_core_].debug_interface->GetLastHaltReason();
+    if (result.ok()) {
+      switch (result.value()) {
+        case *HaltReason::kSoftwareBreakpoint:
+          absl::StrAppend(&prompt, "Stopped at software breakpoint\n");
+          break;
+        case *HaltReason::kUserRequest:
+          absl::StrAppend(&prompt, "Stopped at user request\n");
+          break;
+        case *HaltReason::kDataWatchPoint:
+          absl::StrAppend(&prompt, "Stopped at data watchpoint\n");
+          break;
+        case *HaltReason::kProgramDone:
+          absl::StrAppend(&prompt, "Program done\n");
+          break;
+        default:
+          if ((result.value() >= *HaltReason::kUserSpecifiedMin) &&
+              (result.value() <= *HaltReason::kUserSpecifiedMax)) {
+            absl::StrAppend(&prompt, "Stopped for custom halt reason\n");
+          }
+          break;
       }
     }
     if (pc_result.ok()) {
diff --git a/riscv/riscv_top.cc b/riscv/riscv_top.cc
index 3f6dbf1..4b90c44 100644
--- a/riscv/riscv_top.cc
+++ b/riscv/riscv_top.cc
@@ -434,6 +434,7 @@
         // Reset the halt reason and continue;
         halted_ = false;
         halt_reason_ = *HaltReason::kNone;
+        need_to_step_over_ = false;
         continue;
       }
       break;
@@ -766,6 +767,8 @@
   if (inst_swap) {
     (void)rv_action_point_manager_->ap_memory_interface()
         ->WriteOriginalInstruction(address);
+    // Invalidate the cache entry so that the original instruction is used.
+    rv_decode_cache_->Invalidate(address);
   }
   // Get the decoded instruction.
   Instruction* inst = rv_decode_cache_->GetDecodedInstruction(address);