1061da546Spatrick //===-- RegisterContextPOSIX_arm64.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 9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_ARM64_H 10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_ARM64_H 11061da546Spatrick 12061da546Spatrick #include "RegisterInfoInterface.h" 13dda28197Spatrick #include "RegisterInfoPOSIX_arm64.h" 14061da546Spatrick #include "lldb/Target/RegisterContext.h" 15061da546Spatrick #include "lldb/Utility/Log.h" 16061da546Spatrick 17061da546Spatrick class RegisterContextPOSIX_arm64 : public lldb_private::RegisterContext { 18061da546Spatrick public: 19061da546Spatrick RegisterContextPOSIX_arm64( 20dda28197Spatrick lldb_private::Thread &thread, 21dda28197Spatrick std::unique_ptr<RegisterInfoPOSIX_arm64> register_info); 22061da546Spatrick 23061da546Spatrick ~RegisterContextPOSIX_arm64() override; 24061da546Spatrick 25061da546Spatrick void Invalidate(); 26061da546Spatrick 27061da546Spatrick void InvalidateAllRegisters() override; 28061da546Spatrick 29061da546Spatrick size_t GetRegisterCount() override; 30061da546Spatrick 31061da546Spatrick virtual size_t GetGPRSize(); 32061da546Spatrick 33061da546Spatrick virtual unsigned GetRegisterSize(unsigned reg); 34061da546Spatrick 35061da546Spatrick virtual unsigned GetRegisterOffset(unsigned reg); 36061da546Spatrick 37061da546Spatrick const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override; 38061da546Spatrick 39061da546Spatrick size_t GetRegisterSetCount() override; 40061da546Spatrick 41061da546Spatrick const lldb_private::RegisterSet *GetRegisterSet(size_t set) override; 42061da546Spatrick 43061da546Spatrick const char *GetRegisterName(unsigned reg); 44061da546Spatrick 45061da546Spatrick protected: 46dda28197Spatrick std::unique_ptr<RegisterInfoPOSIX_arm64> m_register_info_up; 47061da546Spatrick 48061da546Spatrick virtual const lldb_private::RegisterInfo *GetRegisterInfo(); 49061da546Spatrick 50061da546Spatrick bool IsGPR(unsigned reg); 51061da546Spatrick 52061da546Spatrick bool IsFPR(unsigned reg); 53061da546Spatrick GetFPUSize()54dda28197Spatrick size_t GetFPUSize() { return sizeof(RegisterInfoPOSIX_arm64::FPU); } 55061da546Spatrick 56*be691f3bSpatrick bool IsSVE(unsigned reg) const; 57*be691f3bSpatrick bool IsPAuth(unsigned reg) const; 58*be691f3bSpatrick IsSVEZ(unsigned reg)59*be691f3bSpatrick bool IsSVEZ(unsigned reg) const { return m_register_info_up->IsSVEZReg(reg); } IsSVEP(unsigned reg)60*be691f3bSpatrick bool IsSVEP(unsigned reg) const { return m_register_info_up->IsSVEPReg(reg); } IsSVEVG(unsigned reg)61*be691f3bSpatrick bool IsSVEVG(unsigned reg) const { 62*be691f3bSpatrick return m_register_info_up->IsSVERegVG(reg); 63*be691f3bSpatrick } 64*be691f3bSpatrick GetRegNumSVEZ0()65*be691f3bSpatrick uint32_t GetRegNumSVEZ0() const { 66*be691f3bSpatrick return m_register_info_up->GetRegNumSVEZ0(); 67*be691f3bSpatrick } GetRegNumSVEFFR()68*be691f3bSpatrick uint32_t GetRegNumSVEFFR() const { 69*be691f3bSpatrick return m_register_info_up->GetRegNumSVEFFR(); 70*be691f3bSpatrick } GetRegNumFPCR()71*be691f3bSpatrick uint32_t GetRegNumFPCR() const { return m_register_info_up->GetRegNumFPCR(); } GetRegNumFPSR()72*be691f3bSpatrick uint32_t GetRegNumFPSR() const { return m_register_info_up->GetRegNumFPSR(); } 73*be691f3bSpatrick 74061da546Spatrick virtual bool ReadGPR() = 0; 75061da546Spatrick virtual bool ReadFPR() = 0; 76061da546Spatrick virtual bool WriteGPR() = 0; 77061da546Spatrick virtual bool WriteFPR() = 0; 78061da546Spatrick }; 79061da546Spatrick 80dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_ARM64_H 81