1 //===-- RegisterContextPOSIX_arm64.h ----------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_ARM64_H 10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_ARM64_H 11 12 #include "RegisterInfoInterface.h" 13 #include "RegisterInfoPOSIX_arm64.h" 14 #include "lldb-arm64-register-enums.h" 15 #include "lldb/Target/RegisterContext.h" 16 #include "lldb/Utility/Log.h" 17 18 class ProcessMonitor; 19 20 class RegisterContextPOSIX_arm64 : public lldb_private::RegisterContext { 21 public: 22 RegisterContextPOSIX_arm64( 23 lldb_private::Thread &thread, 24 std::unique_ptr<RegisterInfoPOSIX_arm64> register_info); 25 26 ~RegisterContextPOSIX_arm64() override; 27 28 void Invalidate(); 29 30 void InvalidateAllRegisters() override; 31 32 size_t GetRegisterCount() override; 33 34 virtual size_t GetGPRSize(); 35 36 virtual unsigned GetRegisterSize(unsigned reg); 37 38 virtual unsigned GetRegisterOffset(unsigned reg); 39 40 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override; 41 42 size_t GetRegisterSetCount() override; 43 44 const lldb_private::RegisterSet *GetRegisterSet(size_t set) override; 45 46 const char *GetRegisterName(unsigned reg); 47 48 protected: 49 uint64_t m_gpr_arm64[lldb_private::k_num_gpr_registers_arm64]; // 64-bit 50 // general 51 // purpose 52 // registers. 53 54 struct RegisterInfoPOSIX_arm64::FPU 55 m_fpr; // floating-point registers including extended register sets. 56 std::unique_ptr<RegisterInfoPOSIX_arm64> m_register_info_up; 57 58 virtual const lldb_private::RegisterInfo *GetRegisterInfo(); 59 60 bool IsGPR(unsigned reg); 61 62 bool IsFPR(unsigned reg); 63 64 size_t GetFPUSize() { return sizeof(RegisterInfoPOSIX_arm64::FPU); } 65 66 virtual bool ReadGPR() = 0; 67 virtual bool ReadFPR() = 0; 68 virtual bool WriteGPR() = 0; 69 virtual bool WriteFPR() = 0; 70 }; 71 72 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_ARM64_H 73