9#if defined(__arm64__) || defined(__aarch64__)
14#include <asm/ptrace.h>
25static Status ReadHardwareDebugInfoHelper(
int regset,
::pid_t tid,
26 uint32_t &max_supported) {
28 struct user_hwdebug_state dreg_state;
31 ioVec.iov_base = &dreg_state;
32 ioVec.iov_len =
sizeof(dreg_state);
34 &ioVec, ioVec.iov_len);
39 max_supported = dreg_state.dbg_info & 0xff;
44 ::pid_t tid, uint32_t &max_hwp_supported, uint32_t &max_hbp_supported) {
46 ReadHardwareDebugInfoHelper(NT_ARM_HW_WATCH, tid, max_hwp_supported);
51 return ReadHardwareDebugInfoHelper(NT_ARM_HW_BREAK, tid, max_hbp_supported);
55 int hwbType,
::pid_t tid, uint32_t max_supported,
56 const std::array<NativeRegisterContextDBReg::DREG, 16> ®s) {
61 struct user_hwdebug_state dreg_state;
62 memset(&dreg_state, 0,
sizeof(dreg_state));
63 for (uint32_t i = 0; i < max_supported; i++) {
64 dreg_state.dbg_regs[i].addr = regs[i].address;
65 dreg_state.dbg_regs[i].ctrl = regs[i].control;
69 ioVec.iov_base = &dreg_state;
70 ioVec.iov_len =
sizeof(dreg_state.dbg_info) +
sizeof(dreg_state.pad) +
71 (
sizeof(dreg_state.dbg_regs[0]) * max_supported);
74 &ioVec, ioVec.iov_len);
static llvm::raw_ostream & error(Stream &strm)
static Status PtraceWrapper(int req, lldb::pid_t pid, void *addr=nullptr, void *data=nullptr, size_t data_size=0, long *result=nullptr)
}
Status WriteHardwareDebugRegs(int hwbType, ::pid_t tid, uint32_t max_supported, const std::array< NativeRegisterContextDBReg::DREG, 16 > ®s)
Status ReadHardwareDebugInfo(::pid_t tid, uint32_t &max_hwp_supported, uint32_t &max_hbp_supported)
A class that represents a running process on the host machine.