[lldb] [llvm] [lldb][Windows] WoA HW Watchpoint support in LLDB (PR #108072)
David Spickett via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 27 03:39:29 PST 2025
================
@@ -492,23 +492,40 @@ NativeProcessWindows::OnDebugException(bool first_chance,
}
case DWORD(STATUS_BREAKPOINT):
case STATUS_WX86_BREAKPOINT:
- if (FindSoftwareBreakpoint(record.GetExceptionAddress())) {
- LLDB_LOG(log, "Hit non-loader breakpoint at address {0:x}.",
- record.GetExceptionAddress());
- StopThread(record.GetThreadID(), StopReason::eStopReasonBreakpoint);
+ if (NativeThreadWindows *stop_thread =
+ GetThreadByID(record.GetThreadID())) {
+ auto ®_ctx = stop_thread->GetRegisterContext();
+ const auto exception_addr = record.GetExceptionAddress();
+ const auto thread_id = record.GetThreadID();
- if (NativeThreadWindows *stop_thread =
- GetThreadByID(record.GetThreadID())) {
- auto ®ister_context = stop_thread->GetRegisterContext();
- uint32_t breakpoint_size = GetSoftwareBreakpointPCOffset();
+ if (FindSoftwareBreakpoint(exception_addr)) {
+ LLDB_LOG(log, "Hit non-loader breakpoint at address {0:x}.",
+ exception_addr);
// The current PC is AFTER the BP opcode, on all architectures.
- uint64_t pc = register_context.GetPC() - breakpoint_size;
- register_context.SetPC(pc);
+ reg_ctx.SetPC(reg_ctx.GetPC() - GetSoftwareBreakpointPCOffset());
+ StopThread(thread_id, StopReason::eStopReasonBreakpoint);
+ SetState(eStateStopped, true);
+ return ExceptionResult::MaskException;
+ } else {
+ const std::vector<ULONG_PTR> &args = record.GetExceptionArguments();
----------------
DavidSpickett wrote:
We know that once we're in this else, it's a hardware break or watch point. But given we don't support hardware breakpoints yet, it can only be a hardware watchpoint.
Assuming that's correct, I would add a comment just after the else to say that.
https://github.com/llvm/llvm-project/pull/108072
More information about the llvm-commits
mailing list