[Lldb-commits] [PATCH] D29669: Hardware breakpoints implementation for AArch64 targets

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 7 14:40:17 PST 2017

labath added a comment.

Don't be intimidated by the number of comments :) - I think the change looks reasonable as a whole - most of them are just about style and come from the fact you were probably working on the patch while I was refactoring this code. As for tests, what I'd definitely want to see is a lldb-server-style test, which tests just the server changes without the client part (maybe you we're already talking about those - I just want to make sure we're on the same page).

As for the stepping speed, do you have any data which shows that this is actually a bottleneck in those operations? (I'm not against doing that, I'm just curious).

Comment at: include/lldb/Host/common/HardwareBreakpointList.h:24
+class HardwareBreakpointList {
What's the benefit of this class over using `std::map<lldb::addr_t, HardwareBreakpoint>` directly?

Comment at: source/Host/common/NativeProcessProtocol.cpp:142
-uint32_t NativeProcessProtocol::GetMaxWatchpoints() const {
+bool NativeProcessProtocol::GetHardwareDebugSupportInfo(
+    uint32_t &breakpoints, uint32_t &watchpoints) const {
`llvm::Optional<std::pair<uint32_t, uint32_t>> GetHardwareDebugSupportInfo()`

Comment at: source/Host/common/NativeProcessProtocol.cpp:145
   // This default implementation will return the number of
   // *hardware* breakpoints available.  MacOSX and other OS
   // implementations that support software breakpoints will want to
This comment needs update

Comment at: source/Plugins/Process/Linux/NativeProcessLinux.cpp:875
+    error = thread.GetRegisterContext()->GetHardwareBreakHitIndex(
+        wp_index, (uintptr_t)info.si_addr);
+    if (error.Fail())
Please rename the wp_index variable to something more generic if you're going to use it here.

Comment at: source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp:367
+  if (log)
+    log->Printf("NativeRegisterContextLinux_arm64::%s()", __FUNCTION__);
Please use LLDB_LOG here.

Comment at: source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp:384
                                                         size_t size) {
-  Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_WATCHPOINTS));
+  Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
   LLDB_LOG(log, "addr: {0:x}, size: {1:x}", addr, size);
Please use POSIX_LOG_BREAKPOINTS here (the code in the NativeProcessLinux plugin was using a combination of posix and lldb log channels, so i've standardized it on posix).

Comment at: source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp:414
+    } else if (m_hbr_regs[i].address == addr) {
+      return LLDB_INVALID_INDEX32; // We do not support duplicate watchpoints.
s/watchpoints/breakpoints/ ?

Comment at: source/Plugins/Process/Linux/NativeThreadLinux.cpp:246
+  // Set all active hardware breakpoint on all threads.
+  if (m_hw_break_index_map.empty()) {
This doesn't appear to be setting the breakpoint on *all* threads (and it probably shouldnt)


More information about the lldb-commits mailing list