xref: /freebsd-src/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_riscv64.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
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