1*bdd1243dSDimitry Andric //===-- RegisterContextPOSIX_riscv64.h --------------------------*- C++ -*-===// 2*bdd1243dSDimitry Andric // 3*bdd1243dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*bdd1243dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*bdd1243dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*bdd1243dSDimitry Andric // 7*bdd1243dSDimitry Andric //===----------------------------------------------------------------------===// 8*bdd1243dSDimitry Andric 9*bdd1243dSDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_RISCV64_H 10*bdd1243dSDimitry Andric #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_RISCV64_H 11*bdd1243dSDimitry Andric 12*bdd1243dSDimitry Andric #include "RegisterInfoInterface.h" 13*bdd1243dSDimitry Andric #include "RegisterInfoPOSIX_riscv64.h" 14*bdd1243dSDimitry Andric #include "lldb-riscv-register-enums.h" 15*bdd1243dSDimitry Andric #include "lldb/Target/RegisterContext.h" 16*bdd1243dSDimitry Andric #include "lldb/Utility/Log.h" 17*bdd1243dSDimitry Andric 18*bdd1243dSDimitry Andric class RegisterContextPOSIX_riscv64 : public lldb_private::RegisterContext { 19*bdd1243dSDimitry Andric public: 20*bdd1243dSDimitry Andric RegisterContextPOSIX_riscv64( 21*bdd1243dSDimitry Andric lldb_private::Thread &thread, 22*bdd1243dSDimitry Andric std::unique_ptr<RegisterInfoPOSIX_riscv64> register_info); 23*bdd1243dSDimitry Andric 24*bdd1243dSDimitry Andric ~RegisterContextPOSIX_riscv64() override; 25*bdd1243dSDimitry Andric 26*bdd1243dSDimitry Andric void invalidate(); 27*bdd1243dSDimitry Andric 28*bdd1243dSDimitry Andric void InvalidateAllRegisters() override; 29*bdd1243dSDimitry Andric 30*bdd1243dSDimitry Andric size_t GetRegisterCount() override; 31*bdd1243dSDimitry Andric 32*bdd1243dSDimitry Andric virtual size_t GetGPRSize(); 33*bdd1243dSDimitry Andric 34*bdd1243dSDimitry Andric virtual unsigned GetRegisterSize(unsigned reg); 35*bdd1243dSDimitry Andric 36*bdd1243dSDimitry Andric virtual unsigned GetRegisterOffset(unsigned reg); 37*bdd1243dSDimitry Andric 38*bdd1243dSDimitry Andric const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override; 39*bdd1243dSDimitry Andric 40*bdd1243dSDimitry Andric size_t GetRegisterSetCount() override; 41*bdd1243dSDimitry Andric 42*bdd1243dSDimitry Andric const lldb_private::RegisterSet *GetRegisterSet(size_t set) override; 43*bdd1243dSDimitry Andric 44*bdd1243dSDimitry Andric protected: 45*bdd1243dSDimitry Andric std::unique_ptr<RegisterInfoPOSIX_riscv64> m_register_info_up; 46*bdd1243dSDimitry Andric 47*bdd1243dSDimitry Andric virtual const lldb_private::RegisterInfo *GetRegisterInfo(); 48*bdd1243dSDimitry Andric 49*bdd1243dSDimitry Andric bool IsGPR(unsigned reg); 50*bdd1243dSDimitry Andric 51*bdd1243dSDimitry Andric bool IsFPR(unsigned reg); 52*bdd1243dSDimitry Andric GetFPRSize()53*bdd1243dSDimitry Andric size_t GetFPRSize() { return sizeof(RegisterInfoPOSIX_riscv64::FPR); } 54*bdd1243dSDimitry Andric GetRegNumFCSR()55*bdd1243dSDimitry Andric uint32_t GetRegNumFCSR() const { return fpr_fcsr_riscv; } 56*bdd1243dSDimitry Andric 57*bdd1243dSDimitry Andric virtual bool ReadGPR() = 0; 58*bdd1243dSDimitry Andric virtual bool ReadFPR() = 0; 59*bdd1243dSDimitry Andric virtual bool WriteGPR() = 0; 60*bdd1243dSDimitry Andric virtual bool WriteFPR() = 0; 61*bdd1243dSDimitry Andric }; 62*bdd1243dSDimitry Andric 63*bdd1243dSDimitry Andric #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_RISCV64_H 64