13#include "DebugServer2/Core/BreakpointManager.h"
14#include "DebugServer2/Core/ErrorCodes.h"
15#include "DebugServer2/Types.h"
38constexpr uint32_t kARM64WatchpointEnable = 1u << 0;
39constexpr uint32_t kARM64WatchpointPAC = 0x2u << 1;
40constexpr uint32_t kARM64WatchpointLSCShift = 3;
41constexpr uint32_t kARM64WatchpointBASShift = 5;
48inline ErrorCode ComputeARM64WatchpointControl(Address
const &address,
50 BreakpointManager::Mode mode,
51 uint64_t &wvr, uint32_t &wcr) {
53 switch (
static_cast<int>(mode)) {
54 case BreakpointManager::kModeWrite:
57 case BreakpointManager::kModeRead:
60 case BreakpointManager::kModeRead | BreakpointManager::kModeWrite:
64 return kErrorInvalidArgument;
67 uint64_t addr = address;
68 unsigned offset =
static_cast<unsigned>(addr & 0x7);
69 unsigned span = offset +
static_cast<unsigned>(size);
72 return kErrorInvalidArgument;
82 uint32_t bas =
static_cast<uint32_t
>((1u << size) - 1) << offset;
84 wvr = addr & ~static_cast<uint64_t>(0x7);
85 wcr = kARM64WatchpointEnable | kARM64WatchpointPAC |
86 (lsc << kARM64WatchpointLSCShift) | (bas << kARM64WatchpointBASShift);