pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

lldb-netbsd: Detach support for watchpoint registers and *RegisterRaw



Module Name:	pkgsrc-wip
Committed By:	Kamil Rytarowski <n54%gmx.com@localhost>
Pushed By:	kamil
Date:		Wed Mar 1 22:45:34 2017 +0100
Changeset:	614e3cf38afe05f399eec7b48d818e9760e98984

Modified Files:
	lldb-netbsd/distinfo
	lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp
	lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h
	lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp
	lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h

Log Message:
lldb-netbsd: Detach support for watchpoint registers and *RegisterRaw

Remove functions for watchpoint registers.
Focus currently on GPR and FPR ones.

Remove ReadRegisterRaw() and WriteRegisterRaw(). This function is a Linux
specific way to read User Data. On NetBSD we need to call directly PT_GETREGS
PT_GETPFPREGS or PT_GETDBREGS.

Sponsored by <The NetBSD Foundation>

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=614e3cf38afe05f399eec7b48d818e9760e98984

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 lldb-netbsd/distinfo                               |   8 +-
 ..._Process_NetBSD_NativeRegisterContextNetBSD.cpp |  67 +-----
 ...ns_Process_NetBSD_NativeRegisterContextNetBSD.h |   7 +-
 ...NetBSD_NativeRegisterContextNetBSD__x86__64.cpp | 225 +--------------------
 ...s_NetBSD_NativeRegisterContextNetBSD__x86__64.h |  23 +--
 5 files changed, 12 insertions(+), 318 deletions(-)

diffs:
diff --git a/lldb-netbsd/distinfo b/lldb-netbsd/distinfo
index 91da27e77b..d13bd0fd38 100644
--- a/lldb-netbsd/distinfo
+++ b/lldb-netbsd/distinfo
@@ -25,10 +25,10 @@ SHA1 (patch-source_Plugins_Process_CMakeLists.txt) = c689ff4ec455234f8d506dc9eb8
 SHA1 (patch-source_Plugins_Process_NetBSD_CMakeLists.txt) = a77f397020ab752875813a7a93b53ccd3a130e6f
 SHA1 (patch-source_Plugins_Process_NetBSD_NativeProcessNetBSD.cpp) = 037094d3eaa832eaf2b3719833d2d3c46101e03e
 SHA1 (patch-source_Plugins_Process_NetBSD_NativeProcessNetBSD.h) = c48bb2dd45682164ab904b8b3f7664b91ac35d5b
-SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp) = ab854f2728f7dc8eee2cb7840d3f353893e5c245
-SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h) = 224983911b6cab8cd20abc3e26e1efe68cadee15
-SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp) = 367d8ec4efdca3f4d0cf76288936f3fe8923a82a
-SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h) = cafd43e1d98a2adaef41926d821bacbfa9db8614
+SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp) = 0e03b713b3b6f5aeda45ac641d20fe6f86cb85d5
+SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h) = 4ad37620c68d28d7a5a9fec99d7c64f496a1d330
+SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp) = 2410f1f6861adf9ac43320827847ec070520ed5d
+SHA1 (patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h) = 58803697f65411d1ad62e45c6af68c9271633bac
 SHA1 (patch-source_Plugins_Process_NetBSD_NativeThreadNetBSD.cpp) = 0985eaefb605c06185cc14fa1c02c0b9f8318472
 SHA1 (patch-source_Plugins_Process_NetBSD_NativeThreadNetBSD.h) = c675af8495a75f99bb60cb4ab3fa36223f1cb6f4
 SHA1 (patch-tools_lldb-server_CMakeLists.txt) = 9804b083a1aa0cb7fa06b840a71c28424ad8e01d
diff --git a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp
index 1e29c1c73e..59c8d56022 100644
--- a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp
+++ b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.cpp
@@ -2,7 +2,7 @@ $NetBSD$
 
 --- source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.cpp.orig	2017-03-01 11:04:39.184136620 +0000
 +++ source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.cpp
-@@ -0,0 +1,200 @@
+@@ -0,0 +1,135 @@
 +//===-- NativeRegisterContextNetBSD.cpp --------------------------*- C++ -*-===//
 +//
 +//                     The LLVM Compiler Infrastructure
@@ -49,71 +49,6 @@ $NetBSD$
 +  return byte_order;
 +}
 +
-+Error NativeRegisterContextNetBSD::ReadRegisterRaw(uint32_t reg_index,
-+                                                  RegisterValue &reg_value) {
-+  const RegisterInfo *const reg_info = GetRegisterInfoAtIndex(reg_index);
-+  if (!reg_info)
-+    return Error("register %" PRIu32 " not found", reg_index);
-+
-+  return DoReadRegisterValue(reg_info->byte_offset, reg_info->name,
-+                             reg_info->byte_size, reg_value);
-+}
-+
-+Error NativeRegisterContextNetBSD::WriteRegisterRaw(
-+    uint32_t reg_index, const RegisterValue &reg_value) {
-+  uint32_t reg_to_write = reg_index;
-+  RegisterValue value_to_write = reg_value;
-+
-+  // Check if this is a subregister of a full register.
-+  const RegisterInfo *reg_info = GetRegisterInfoAtIndex(reg_index);
-+  if (reg_info->invalidate_regs &&
-+      (reg_info->invalidate_regs[0] != LLDB_INVALID_REGNUM)) {
-+    Error error;
-+
-+    RegisterValue full_value;
-+    uint32_t full_reg = reg_info->invalidate_regs[0];
-+    const RegisterInfo *full_reg_info = GetRegisterInfoAtIndex(full_reg);
-+
-+    // Read the full register.
-+    error = ReadRegister(full_reg_info, full_value);
-+    if (error.Fail())
-+      return error;
-+
-+    lldb::ByteOrder byte_order = GetByteOrder();
-+    uint8_t dst[RegisterValue::kMaxRegisterByteSize];
-+
-+    // Get the bytes for the full register.
-+    const uint32_t dest_size = full_value.GetAsMemoryData(
-+        full_reg_info, dst, sizeof(dst), byte_order, error);
-+    if (error.Success() && dest_size) {
-+      uint8_t src[RegisterValue::kMaxRegisterByteSize];
-+
-+      // Get the bytes for the source data.
-+      const uint32_t src_size = reg_value.GetAsMemoryData(
-+          reg_info, src, sizeof(src), byte_order, error);
-+      if (error.Success() && src_size && (src_size < dest_size)) {
-+        // Copy the src bytes to the destination.
-+        memcpy(dst + (reg_info->byte_offset & 0x1), src, src_size);
-+        // Set this full register as the value to write.
-+        value_to_write.SetBytes(dst, full_value.GetByteSize(), byte_order);
-+        value_to_write.SetType(full_reg_info);
-+        reg_to_write = full_reg;
-+      }
-+    }
-+  }
-+
-+  const RegisterInfo *const register_to_write_info_p =
-+      GetRegisterInfoAtIndex(reg_to_write);
-+  assert(register_to_write_info_p &&
-+         "register to write does not have valid RegisterInfo");
-+  if (!register_to_write_info_p)
-+    return Error("NativeRegisterContextNetBSD::%s failed to get RegisterInfo "
-+                 "for write register index %" PRIu32,
-+                 __FUNCTION__, reg_to_write);
-+
-+  return DoWriteRegisterValue(reg_info->byte_offset, reg_info->name, reg_value);
-+}
-+
 +Error NativeRegisterContextNetBSD::ReadGPR() {
 +  void *buf = GetGPRBuffer();
 +  if (!buf)
diff --git a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h
index 4e65b4c3fe..844a093f92 100644
--- a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h
+++ b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD.h
@@ -2,7 +2,7 @@ $NetBSD$
 
 --- source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h.orig	2017-03-01 11:04:42.048407244 +0000
 +++ source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h
-@@ -0,0 +1,86 @@
+@@ -0,0 +1,81 @@
 +//===-- NativeRegisterContextNetBSD.h ----------------------------*- C++ -*-===//
 +//
 +//                     The LLVM Compiler Infrastructure
@@ -44,11 +44,6 @@ $NetBSD$
 +protected:
 +  lldb::ByteOrder GetByteOrder() const;
 +
-+  virtual Error ReadRegisterRaw(uint32_t reg_index, RegisterValue &reg_value);
-+
-+  virtual Error WriteRegisterRaw(uint32_t reg_index,
-+                                 const RegisterValue &reg_value);
-+
 +  virtual Error ReadGPR();
 +
 +  virtual Error WriteGPR();
diff --git a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp
index 1e1834f7e4..4e6adb7b57 100644
--- a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp
+++ b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.cpp
@@ -2,7 +2,7 @@ $NetBSD$
 
 --- source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp.orig	2017-03-01 11:04:48.447830223 +0000
 +++ source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp
-@@ -0,0 +1,1227 @@
+@@ -0,0 +1,1012 @@
 +//===-- NativeRegisterContextNetBSD_x86_64.cpp ---------------*- C++ -*-===//
 +//
 +//                     The LLVM Compiler Infrastructure
@@ -214,20 +214,6 @@ $NetBSD$
 +#define REG_CONTEXT_SIZE (GetRegisterInfoInterface().GetGPRSize() + sizeof(FPR))
 +
 +// ----------------------------------------------------------------------------
-+// Required ptrace defines.
-+// ----------------------------------------------------------------------------
-+
-+// On x86_64 NT_PRFPREG is used to access the FXSAVE area. On i386, we need to
-+// use NT_PRXFPREG.
-+static inline unsigned int fxsr_regset(const ArchSpec &arch) {
-+#if 0
-+  return arch.GetAddressByteSize() == 8 ? NT_PRFPREG : NT_PRXFPREG;
-+#else
-+  return 0;
-+#endif
-+}
-+
-+// ----------------------------------------------------------------------------
 +// Required MPX define.
 +// ----------------------------------------------------------------------------
 +
@@ -423,6 +409,7 @@ $NetBSD$
 +      full_reg = reg_info->invalidate_regs[0];
 +    }
 +
++#if 0
 +    error = ReadRegisterRaw(full_reg, reg_value);
 +
 +    if (error.Success()) {
@@ -438,6 +425,7 @@ $NetBSD$
 +        reg_value.SetType(reg_info);
 +    }
 +    return error;
++#endif
 +  }
 +
 +  if (reg_info->encoding == lldb::eEncodingVector) {
@@ -544,8 +532,10 @@ $NetBSD$
 +                                              ? reg_info->name
 +                                              : "<unknown register>");
 +
++#if 0
 +  if (IsGPR(reg_index))
 +    return WriteRegisterRaw(reg_index, reg_value);
++#endif
 +
 +  if (IsFPR(reg_index) || IsAVX(reg_index) || IsMPX(reg_index)) {
 +    if (reg_info->encoding == lldb::eEncodingVector) {
@@ -1024,209 +1014,4 @@ $NetBSD$
 +  return true;
 +}
 +
-+Error NativeRegisterContextNetBSD_x86_64::IsWatchpointHit(uint32_t wp_index,
-+                                                         bool &is_hit) {
-+  if (wp_index >= NumSupportedHardwareWatchpoints())
-+    return Error("Watchpoint index out of range");
-+
-+  RegisterValue reg_value;
-+  Error error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value);
-+  if (error.Fail()) {
-+    is_hit = false;
-+    return error;
-+  }
-+
-+  uint64_t status_bits = reg_value.GetAsUInt64();
-+
-+  is_hit = status_bits & (1 << wp_index);
-+
-+  return error;
-+}
-+
-+Error NativeRegisterContextNetBSD_x86_64::GetWatchpointHitIndex(
-+    uint32_t &wp_index, lldb::addr_t trap_addr) {
-+  uint32_t num_hw_wps = NumSupportedHardwareWatchpoints();
-+  for (wp_index = 0; wp_index < num_hw_wps; ++wp_index) {
-+    bool is_hit;
-+    Error error = IsWatchpointHit(wp_index, is_hit);
-+    if (error.Fail()) {
-+      wp_index = LLDB_INVALID_INDEX32;
-+      return error;
-+    } else if (is_hit) {
-+      return error;
-+    }
-+  }
-+  wp_index = LLDB_INVALID_INDEX32;
-+  return Error();
-+}
-+
-+Error NativeRegisterContextNetBSD_x86_64::IsWatchpointVacant(uint32_t wp_index,
-+                                                            bool &is_vacant) {
-+  if (wp_index >= NumSupportedHardwareWatchpoints())
-+    return Error("Watchpoint index out of range");
-+
-+  RegisterValue reg_value;
-+  Error error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value);
-+  if (error.Fail()) {
-+    is_vacant = false;
-+    return error;
-+  }
-+
-+  uint64_t control_bits = reg_value.GetAsUInt64();
-+
-+  is_vacant = !(control_bits & (1 << (2 * wp_index)));
-+
-+  return error;
-+}
-+
-+Error NativeRegisterContextNetBSD_x86_64::SetHardwareWatchpointWithIndex(
-+    lldb::addr_t addr, size_t size, uint32_t watch_flags, uint32_t wp_index) {
-+
-+  if (wp_index >= NumSupportedHardwareWatchpoints())
-+    return Error("Watchpoint index out of range");
-+
-+  // Read only watchpoints aren't supported on x86_64. Fall back to read/write
-+  // waitchpoints instead.
-+  // TODO: Add logic to detect when a write happens and ignore that watchpoint
-+  // hit.
-+  if (watch_flags == 0x2)
-+    watch_flags = 0x3;
-+
-+  if (watch_flags != 0x1 && watch_flags != 0x3)
-+    return Error("Invalid read/write bits for watchpoint");
-+
-+  if (size != 1 && size != 2 && size != 4 && size != 8)
-+    return Error("Invalid size for watchpoint");
-+
-+  bool is_vacant;
-+  Error error = IsWatchpointVacant(wp_index, is_vacant);
-+  if (error.Fail())
-+    return error;
-+  if (!is_vacant)
-+    return Error("Watchpoint index not vacant");
-+
-+  RegisterValue reg_value;
-+  error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value);
-+  if (error.Fail())
-+    return error;
-+
-+  // for watchpoints 0, 1, 2, or 3, respectively,
-+  // set bits 1, 3, 5, or 7
-+  uint64_t enable_bit = 1 << (2 * wp_index);
-+
-+  // set bits 16-17, 20-21, 24-25, or 28-29
-+  // with 0b01 for write, and 0b11 for read/write
-+  uint64_t rw_bits = watch_flags << (16 + 4 * wp_index);
-+
-+  // set bits 18-19, 22-23, 26-27, or 30-31
-+  // with 0b00, 0b01, 0b10, or 0b11
-+  // for 1, 2, 8 (if supported), or 4 bytes, respectively
-+  uint64_t size_bits = (size == 8 ? 0x2 : size - 1) << (18 + 4 * wp_index);
-+
-+  uint64_t bit_mask = (0x3 << (2 * wp_index)) | (0xF << (16 + 4 * wp_index));
-+
-+  uint64_t control_bits = reg_value.GetAsUInt64() & ~bit_mask;
-+
-+  control_bits |= enable_bit | rw_bits | size_bits;
-+
-+  error = WriteRegisterRaw(m_reg_info.first_dr + wp_index, RegisterValue(addr));
-+  if (error.Fail())
-+    return error;
-+
-+  error =
-+      WriteRegisterRaw(m_reg_info.first_dr + 7, RegisterValue(control_bits));
-+  if (error.Fail())
-+    return error;
-+
-+  error.Clear();
-+  return error;
-+}
-+
-+bool NativeRegisterContextNetBSD_x86_64::ClearHardwareWatchpoint(
-+    uint32_t wp_index) {
-+  if (wp_index >= NumSupportedHardwareWatchpoints())
-+    return false;
-+
-+  RegisterValue reg_value;
-+
-+  // for watchpoints 0, 1, 2, or 3, respectively,
-+  // clear bits 0, 1, 2, or 3 of the debug status register (DR6)
-+  Error error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value);
-+  if (error.Fail())
-+    return false;
-+  uint64_t bit_mask = 1 << wp_index;
-+  uint64_t status_bits = reg_value.GetAsUInt64() & ~bit_mask;
-+  error = WriteRegisterRaw(m_reg_info.first_dr + 6, RegisterValue(status_bits));
-+  if (error.Fail())
-+    return false;
-+
-+  // for watchpoints 0, 1, 2, or 3, respectively,
-+  // clear bits {0-1,16-19}, {2-3,20-23}, {4-5,24-27}, or {6-7,28-31}
-+  // of the debug control register (DR7)
-+  error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value);
-+  if (error.Fail())
-+    return false;
-+  bit_mask = (0x3 << (2 * wp_index)) | (0xF << (16 + 4 * wp_index));
-+  uint64_t control_bits = reg_value.GetAsUInt64() & ~bit_mask;
-+  return WriteRegisterRaw(m_reg_info.first_dr + 7, RegisterValue(control_bits))
-+      .Success();
-+}
-+
-+Error NativeRegisterContextNetBSD_x86_64::ClearAllHardwareWatchpoints() {
-+  RegisterValue reg_value;
-+
-+  // clear bits {0-4} of the debug status register (DR6)
-+  Error error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value);
-+  if (error.Fail())
-+    return error;
-+  uint64_t bit_mask = 0xF;
-+  uint64_t status_bits = reg_value.GetAsUInt64() & ~bit_mask;
-+  error = WriteRegisterRaw(m_reg_info.first_dr + 6, RegisterValue(status_bits));
-+  if (error.Fail())
-+    return error;
-+
-+  // clear bits {0-7,16-31} of the debug control register (DR7)
-+  error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value);
-+  if (error.Fail())
-+    return error;
-+  bit_mask = 0xFF | (0xFFFF << 16);
-+  uint64_t control_bits = reg_value.GetAsUInt64() & ~bit_mask;
-+  return WriteRegisterRaw(m_reg_info.first_dr + 7, RegisterValue(control_bits));
-+}
-+
-+uint32_t NativeRegisterContextNetBSD_x86_64::SetHardwareWatchpoint(
-+    lldb::addr_t addr, size_t size, uint32_t watch_flags) {
-+  Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_WATCHPOINTS));
-+  const uint32_t num_hw_watchpoints = NumSupportedHardwareWatchpoints();
-+  for (uint32_t wp_index = 0; wp_index < num_hw_watchpoints; ++wp_index) {
-+    bool is_vacant;
-+    Error error = IsWatchpointVacant(wp_index, is_vacant);
-+    if (is_vacant) {
-+      error = SetHardwareWatchpointWithIndex(addr, size, watch_flags, wp_index);
-+      if (error.Success())
-+        return wp_index;
-+    }
-+    if (error.Fail() && log) {
-+      log->Printf("NativeRegisterContextNetBSD_x86_64::%s Error: %s",
-+                  __FUNCTION__, error.AsCString());
-+    }
-+  }
-+  return LLDB_INVALID_INDEX32;
-+}
-+
-+lldb::addr_t
-+NativeRegisterContextNetBSD_x86_64::GetWatchpointAddress(uint32_t wp_index) {
-+  if (wp_index >= NumSupportedHardwareWatchpoints())
-+    return LLDB_INVALID_ADDRESS;
-+  RegisterValue reg_value;
-+  if (ReadRegisterRaw(m_reg_info.first_dr + wp_index, reg_value).Fail())
-+    return LLDB_INVALID_ADDRESS;
-+  return reg_value.GetAsUInt64();
-+}
-+
-+uint32_t NativeRegisterContextNetBSD_x86_64::NumSupportedHardwareWatchpoints() {
-+  // Available debug address registers: dr0, dr1, dr2, dr3
-+  return 4;
-+}
-+
 +#endif // defined(__i386__) || defined(__x86_64__)
diff --git a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h
index ecae83fd84..8627a386d6 100644
--- a/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h
+++ b/lldb-netbsd/patches/patch-source_Plugins_Process_NetBSD_NativeRegisterContextNetBSD__x86__64.h
@@ -2,7 +2,7 @@ $NetBSD$
 
 --- source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h.orig	2017-03-01 11:04:51.743978339 +0000
 +++ source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.h
-@@ -0,0 +1,146 @@
+@@ -0,0 +1,125 @@
 +//===-- NativeRegisterContextNetBSD_x86_64.h ---------------------*- C++ -*-===//
 +//
 +//                     The LLVM Compiler Infrastructure
@@ -48,27 +48,6 @@ $NetBSD$
 +
 +  Error WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
 +
-+  Error IsWatchpointHit(uint32_t wp_index, bool &is_hit) override;
-+
-+  Error GetWatchpointHitIndex(uint32_t &wp_index,
-+                              lldb::addr_t trap_addr) override;
-+
-+  Error IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override;
-+
-+  bool ClearHardwareWatchpoint(uint32_t wp_index) override;
-+
-+  Error ClearAllHardwareWatchpoints() override;
-+
-+  Error SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size,
-+                                       uint32_t watch_flags, uint32_t wp_index);
-+
-+  uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size,
-+                                 uint32_t watch_flags) override;
-+
-+  lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override;
-+
-+  uint32_t NumSupportedHardwareWatchpoints() override;
-+
 +protected:
 +  void *GetGPRBuffer() override { return &m_gpr_x86_64; }
 +


Home | Main Index | Thread Index | Old Index