1061da546Spatrick //===-- NativeRegisterContextWindows_arm.h ----------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9061da546Spatrick #if defined(__arm__) || defined(_M_ARM) 10061da546Spatrick #ifndef liblldb_NativeRegisterContextWindows_arm_h_ 11061da546Spatrick #define liblldb_NativeRegisterContextWindows_arm_h_ 12061da546Spatrick 13061da546Spatrick #include "Plugins/Process/Utility/lldb-arm-register-enums.h" 14061da546Spatrick 15061da546Spatrick #include "NativeRegisterContextWindows.h" 16061da546Spatrick 17061da546Spatrick namespace lldb_private { 18061da546Spatrick 19061da546Spatrick class NativeThreadWindows; 20061da546Spatrick 21061da546Spatrick class NativeRegisterContextWindows_arm : public NativeRegisterContextWindows { 22061da546Spatrick public: 23061da546Spatrick NativeRegisterContextWindows_arm(const ArchSpec &target_arch, 24061da546Spatrick NativeThreadProtocol &native_thread); 25061da546Spatrick 26061da546Spatrick uint32_t GetRegisterSetCount() const override; 27061da546Spatrick 28061da546Spatrick const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 29061da546Spatrick 30061da546Spatrick Status ReadRegister(const RegisterInfo *reg_info, 31061da546Spatrick RegisterValue ®_value) override; 32061da546Spatrick 33061da546Spatrick Status WriteRegister(const RegisterInfo *reg_info, 34061da546Spatrick const RegisterValue ®_value) override; 35061da546Spatrick 36*f6aab3d8Srobert Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override; 37061da546Spatrick 38061da546Spatrick Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 39061da546Spatrick 40061da546Spatrick Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override; 41061da546Spatrick 42061da546Spatrick Status GetWatchpointHitIndex(uint32_t &wp_index, 43061da546Spatrick lldb::addr_t trap_addr) override; 44061da546Spatrick 45061da546Spatrick Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override; 46061da546Spatrick 47061da546Spatrick bool ClearHardwareWatchpoint(uint32_t wp_index) override; 48061da546Spatrick 49061da546Spatrick Status ClearAllHardwareWatchpoints() override; 50061da546Spatrick 51061da546Spatrick Status SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size, 52061da546Spatrick uint32_t watch_flags, 53061da546Spatrick uint32_t wp_index); 54061da546Spatrick 55061da546Spatrick uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size, 56061da546Spatrick uint32_t watch_flags) override; 57061da546Spatrick 58061da546Spatrick lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override; 59061da546Spatrick 60061da546Spatrick uint32_t NumSupportedHardwareWatchpoints() override; 61061da546Spatrick 62061da546Spatrick protected: 63061da546Spatrick Status GPRRead(const uint32_t reg, RegisterValue ®_value); 64061da546Spatrick 65061da546Spatrick Status GPRWrite(const uint32_t reg, const RegisterValue ®_value); 66061da546Spatrick 67061da546Spatrick Status FPRRead(const uint32_t reg, RegisterValue ®_value); 68061da546Spatrick 69061da546Spatrick Status FPRWrite(const uint32_t reg, const RegisterValue ®_value); 70061da546Spatrick 71061da546Spatrick private: 72061da546Spatrick bool IsGPR(uint32_t reg_index) const; 73061da546Spatrick 74061da546Spatrick bool IsFPR(uint32_t reg_index) const; 75061da546Spatrick }; 76061da546Spatrick 77061da546Spatrick } // namespace lldb_private 78061da546Spatrick 79061da546Spatrick #endif // liblldb_NativeRegisterContextWindows_arm_h_ 80061da546Spatrick #endif // defined(__arm__) || defined(_M_ARM) 81