9#if defined(__arm64__) || defined(__aarch64__)
15#include <asm/ptrace.h>
17#include <sys/ptrace.h>
20#ifndef PTRACE_GETREGSET
21#define PTRACE_GETREGSET 0x4204
24#ifndef PTRACE_SETREGSET
25#define PTRACE_SETREGSET 0x4205
32static Status ReadHardwareDebugInfoHelper(
int regset,
::pid_t tid,
33 uint32_t &max_supported) {
35 struct user_hwdebug_state dreg_state;
38 ioVec.iov_base = &dreg_state;
39 ioVec.iov_len =
sizeof(dreg_state);
41 &ioVec, ioVec.iov_len);
46 max_supported = dreg_state.dbg_info & 0xff;
51 ::pid_t tid, uint32_t &max_hwp_supported, uint32_t &max_hbp_supported) {
53 ReadHardwareDebugInfoHelper(NT_ARM_HW_WATCH, tid, max_hwp_supported);
58 return ReadHardwareDebugInfoHelper(NT_ARM_HW_BREAK, tid, max_hbp_supported);
62 int hwbType,
::pid_t tid, uint32_t max_supported,
63 const std::array<NativeRegisterContextDBReg::DREG, 16> ®s) {
68 struct user_hwdebug_state dreg_state;
69 memset(&dreg_state, 0,
sizeof(dreg_state));
70 for (uint32_t i = 0; i < max_supported; i++) {
71 dreg_state.dbg_regs[i].addr = regs[i].address;
72 dreg_state.dbg_regs[i].ctrl = regs[i].control;
76 ioVec.iov_base = &dreg_state;
77 ioVec.iov_len =
sizeof(dreg_state.dbg_info) +
sizeof(dreg_state.pad) +
78 (
sizeof(dreg_state.dbg_regs[0]) * max_supported);
81 &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.