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);