1 //===-- RegisterContextPOSIX_riscv64.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_RISCV64_H
10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_RISCV64_H
11 
12 #include "RegisterInfoInterface.h"
13 #include "RegisterInfoPOSIX_riscv64.h"
14 #include "lldb-riscv-register-enums.h"
15 #include "lldb/Target/RegisterContext.h"
16 #include "lldb/Utility/Log.h"
17 
18 class RegisterContextPOSIX_riscv64 : public lldb_private::RegisterContext {
19 public:
20   RegisterContextPOSIX_riscv64(
21       lldb_private::Thread &thread,
22       std::unique_ptr<RegisterInfoPOSIX_riscv64> register_info);
23 
24   ~RegisterContextPOSIX_riscv64() override;
25 
26   void invalidate();
27 
28   void InvalidateAllRegisters() override;
29 
30   size_t GetRegisterCount() override;
31 
32   virtual size_t GetGPRSize();
33 
34   virtual unsigned GetRegisterSize(unsigned reg);
35 
36   virtual unsigned GetRegisterOffset(unsigned reg);
37 
38   const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
39 
40   size_t GetRegisterSetCount() override;
41 
42   const lldb_private::RegisterSet *GetRegisterSet(size_t set) override;
43 
44 protected:
45   std::unique_ptr<RegisterInfoPOSIX_riscv64> m_register_info_up;
46 
47   virtual const lldb_private::RegisterInfo *GetRegisterInfo();
48 
49   bool IsGPR(unsigned reg);
50 
51   bool IsFPR(unsigned reg);
52 
GetFPRSize()53   size_t GetFPRSize() { return sizeof(RegisterInfoPOSIX_riscv64::FPR); }
54 
GetRegNumFCSR()55   uint32_t GetRegNumFCSR() const { return fpr_fcsr_riscv; }
56 
57   virtual bool ReadGPR() = 0;
58   virtual bool ReadFPR() = 0;
59   virtual bool WriteGPR() = 0;
60   virtual bool WriteFPR() = 0;
61 };
62 
63 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_RISCV64_H
64