1a59444a3SMartin Storsjo //===-- NativeRegisterContextWindows_arm.h ----------------------*- C++ -*-===// 2a59444a3SMartin Storsjo // 3a59444a3SMartin Storsjo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4a59444a3SMartin Storsjo // See https://llvm.org/LICENSE.txt for license information. 5a59444a3SMartin Storsjo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6a59444a3SMartin Storsjo // 7a59444a3SMartin Storsjo //===----------------------------------------------------------------------===// 8a59444a3SMartin Storsjo 9a59444a3SMartin Storsjo #if defined(__arm__) || defined(_M_ARM) 10a59444a3SMartin Storsjo #ifndef liblldb_NativeRegisterContextWindows_arm_h_ 11a59444a3SMartin Storsjo #define liblldb_NativeRegisterContextWindows_arm_h_ 12a59444a3SMartin Storsjo 13a59444a3SMartin Storsjo #include "Plugins/Process/Utility/lldb-arm-register-enums.h" 14a59444a3SMartin Storsjo 15a59444a3SMartin Storsjo #include "NativeRegisterContextWindows.h" 16a59444a3SMartin Storsjo 17a59444a3SMartin Storsjo namespace lldb_private { 18a59444a3SMartin Storsjo 19a59444a3SMartin Storsjo class NativeThreadWindows; 20a59444a3SMartin Storsjo 21a59444a3SMartin Storsjo class NativeRegisterContextWindows_arm : public NativeRegisterContextWindows { 22a59444a3SMartin Storsjo public: 23a59444a3SMartin Storsjo NativeRegisterContextWindows_arm(const ArchSpec &target_arch, 24a59444a3SMartin Storsjo NativeThreadProtocol &native_thread); 25a59444a3SMartin Storsjo 26a59444a3SMartin Storsjo uint32_t GetRegisterSetCount() const override; 27a59444a3SMartin Storsjo 28a59444a3SMartin Storsjo const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 29a59444a3SMartin Storsjo 30a59444a3SMartin Storsjo Status ReadRegister(const RegisterInfo *reg_info, 31a59444a3SMartin Storsjo RegisterValue ®_value) override; 32a59444a3SMartin Storsjo 33a59444a3SMartin Storsjo Status WriteRegister(const RegisterInfo *reg_info, 34a59444a3SMartin Storsjo const RegisterValue ®_value) override; 35a59444a3SMartin Storsjo 36*c2f64601SJonas Devlieghere Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override; 37a59444a3SMartin Storsjo 38a59444a3SMartin Storsjo Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 39a59444a3SMartin Storsjo 40a59444a3SMartin Storsjo Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override; 41a59444a3SMartin Storsjo 42a59444a3SMartin Storsjo Status GetWatchpointHitIndex(uint32_t &wp_index, 43a59444a3SMartin Storsjo lldb::addr_t trap_addr) override; 44a59444a3SMartin Storsjo 45a59444a3SMartin Storsjo Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override; 46a59444a3SMartin Storsjo 47a59444a3SMartin Storsjo bool ClearHardwareWatchpoint(uint32_t wp_index) override; 48a59444a3SMartin Storsjo 49a59444a3SMartin Storsjo Status ClearAllHardwareWatchpoints() override; 50a59444a3SMartin Storsjo 51a59444a3SMartin Storsjo Status SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size, 52a59444a3SMartin Storsjo uint32_t watch_flags, 53a59444a3SMartin Storsjo uint32_t wp_index); 54a59444a3SMartin Storsjo 55a59444a3SMartin Storsjo uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size, 56a59444a3SMartin Storsjo uint32_t watch_flags) override; 57a59444a3SMartin Storsjo 58a59444a3SMartin Storsjo lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override; 59a59444a3SMartin Storsjo 60a59444a3SMartin Storsjo uint32_t NumSupportedHardwareWatchpoints() override; 61a59444a3SMartin Storsjo 62a59444a3SMartin Storsjo protected: 63a59444a3SMartin Storsjo Status GPRRead(const uint32_t reg, RegisterValue ®_value); 64a59444a3SMartin Storsjo 65a59444a3SMartin Storsjo Status GPRWrite(const uint32_t reg, const RegisterValue ®_value); 66a59444a3SMartin Storsjo 67a59444a3SMartin Storsjo Status FPRRead(const uint32_t reg, RegisterValue ®_value); 68a59444a3SMartin Storsjo 69a59444a3SMartin Storsjo Status FPRWrite(const uint32_t reg, const RegisterValue ®_value); 70a59444a3SMartin Storsjo 71a59444a3SMartin Storsjo private: 72a59444a3SMartin Storsjo bool IsGPR(uint32_t reg_index) const; 73a59444a3SMartin Storsjo 74a59444a3SMartin Storsjo bool IsFPR(uint32_t reg_index) const; 75a59444a3SMartin Storsjo }; 76a59444a3SMartin Storsjo 77a59444a3SMartin Storsjo } // namespace lldb_private 78a59444a3SMartin Storsjo 79a59444a3SMartin Storsjo #endif // liblldb_NativeRegisterContextWindows_arm_h_ 80a59444a3SMartin Storsjo #endif // defined(__arm__) || defined(_M_ARM) 81