DavidSpickett added a comment. > Change lldb from depending on the remote gdb stub to tell it whether > watchpoints are received before or after the instruction, to knowing the > architectures where watchpoint exceptions are received before the instruction > executes, and allow the remote gdb stub to override this behavior in its > qHostInfo response.
Sounds good to me. Can you simplify the commit message some now that you've got the changes you want? Seems like the main things are: - Split up querying watchpoint reporting style, and number of watchpoint slots. - Have process determine the reporting style by target, with the option for the remote to override. Meaning this query never fails. - Only conclude that watchpoints are unsupported if the remote tells us that it has 0 slots. (the last one I think we always did but good for context) ================ Comment at: lldb/source/Target/Process.cpp:2360 + std::optional<bool> subclass_override = DoGetWatchpointReportedAfter(); + if (subclass_override) { + return *subclass_override; ---------------- Can do `if (std::optional<bool> subclass....) {...` here. Also no `{}` for single line if. ================ Comment at: lldb/source/Target/Process.cpp:2367 + return reported_after; + } + llvm::Triple triple = arch.GetTriple(); ---------------- No `{}` needed here too. ================ Comment at: lldb/source/Target/Process.cpp:2373 + reported_after = false; + return reported_after; +} ---------------- Would this be any clearer with multiple returns? Or one giant return, but the logic is a bit cryptic then. ``` const ArchSpec &arch = GetTarget().GetArchitecture(); if (!arch.IsValid()) return true; llvm::Triple triple = arch.GetTriple(); return !(triple.isMIPS() || triple.isPPC64() || triple.isAArch64() || triple.isArmMClass() || triple.isARM()); ``` Better as: ``` const ArchSpec &arch = GetTarget().GetArchitecture(); if (!arch.IsValid()) return false; llvm::Triple triple = arch.GetTriple(); if (triple.isMIPS() || triple.isPPC64() || triple.isAArch64() || triple.isArmMClass() || triple.isARM()) return false; return true; ``` Also, do we know what RISC-V does? ================ Comment at: lldb/source/Target/StopInfo.cpp:833 - m_should_stop = true; - return m_should_stop; - } ---------------- This is no longer needed because `GetWatchpointReportedAfter` will fall back to the process' defaults if the GDB layer does not/can not provide a value, correct? ================ Comment at: lldb/source/Target/Target.cpp:804 "Target supports (%u) hardware watchpoint slots.\n", - num_supported_hardware_watchpoints); + *num_supported_hardware_watchpoints); return false; ---------------- This should just append "Target supports 0 hardware...". In theory a compiler could figure that out but also it's a bit confusing because it makes the reader wonder what value other than 0 is supposed to end up here. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143215/new/ https://reviews.llvm.org/D143215 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits