[Lldb-commits] [PATCH] D12522: AArch64 Watchpoints: Make sure we are only setting supported no of debug registers.

Muhammad Omair Javaid via lldb-commits lldb-commits at lists.llvm.org
Tue Sep 1 02:52:10 PDT 2015


omjavaid created this revision.
omjavaid added a reviewer: tberghammer.
omjavaid added a subscriber: lldb-commits.
Herald added subscribers: rengolin, aemerson.

This patch makes sure that we are setting the correct number of hardware breakpoint or watchpoint registers while setting/clearing hardware watchpoints/breakpoints.

In current implementation of AArch64 Watchpoints we try to set all debug registers present in user_hwdebug_state structure.

There are more debug registers declared by user_hwdebug_state than the one exported to ptrace for hardware watchpoints and hardware breakpoints.

We only should be setting the N number of registers supported by the target in response to read debug registers calls. 

Failure to do so results in unexpected watchpoint behavior.

http://reviews.llvm.org/D12522

Files:
  source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp

Index: source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
+++ source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
@@ -816,6 +816,9 @@
             dreg_state.dbg_regs[i].addr = m_hwp_regs[i].address;
             dreg_state.dbg_regs[i].ctrl = m_hwp_regs[i].control;
         }
+
+        ioVec.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[m_max_hwp_supported - 1])
+                        + sizeof (dreg_state.dbg_regs [m_max_hwp_supported - 1]));
     }
     else
     {
@@ -826,6 +829,8 @@
             dreg_state.dbg_regs[i].addr = m_hbr_regs[i].address;
             dreg_state.dbg_regs[i].ctrl = m_hbr_regs[i].control;
         }
+        ioVec.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[m_max_hbp_supported - 1])
+                        + sizeof (dreg_state.dbg_regs [m_max_hbp_supported - 1]));
     }
 
     return NativeProcessLinux::PtraceWrapper(PTRACE_SETREGSET, m_thread.GetID(), &hwbType, &ioVec, ioVec.iov_len);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D12522.33671.patch
Type: text/x-patch
Size: 1122 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150901/cb402302/attachment.bin>


More information about the lldb-commits mailing list