xref: /freebsd/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_riscv32.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===-- RegisterContextPOSIX_riscv32.cpp ------------------------*- 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 #include "RegisterContextPOSIX_riscv32.h"
10 #include "lldb/Target/Process.h"
11 #include "lldb/Target/Target.h"
12 #include "lldb/Target/Thread.h"
13 #include "lldb/Utility/DataBufferHeap.h"
14 #include "lldb/Utility/DataExtractor.h"
15 #include "lldb/Utility/Endian.h"
16 #include "lldb/Utility/RegisterValue.h"
17 #include "lldb/Utility/Scalar.h"
18 #include "llvm/Support/Compiler.h"
19 
20 using namespace lldb;
21 using namespace lldb_private;
22 
RegisterContextPOSIX_riscv32(lldb_private::Thread & thread,std::unique_ptr<RegisterInfoPOSIX_riscv32> register_info)23 RegisterContextPOSIX_riscv32::RegisterContextPOSIX_riscv32(
24     lldb_private::Thread &thread,
25     std::unique_ptr<RegisterInfoPOSIX_riscv32> register_info)
26     : lldb_private::RegisterContext(thread, 0),
27       m_register_info_up(std::move(register_info)) {}
28 
29 RegisterContextPOSIX_riscv32::~RegisterContextPOSIX_riscv32() = default;
30 
invalidate()31 void RegisterContextPOSIX_riscv32::invalidate() {}
32 
InvalidateAllRegisters()33 void RegisterContextPOSIX_riscv32::InvalidateAllRegisters() {}
34 
GetRegisterCount()35 size_t RegisterContextPOSIX_riscv32::GetRegisterCount() {
36   return m_register_info_up->GetRegisterCount();
37 }
38 
GetGPRSize()39 size_t RegisterContextPOSIX_riscv32::GetGPRSize() {
40   return m_register_info_up->GetGPRSize();
41 }
42 
GetRegisterSize(unsigned int reg)43 unsigned RegisterContextPOSIX_riscv32::GetRegisterSize(unsigned int reg) {
44   return m_register_info_up->GetRegisterInfo()[reg].byte_size;
45 }
46 
GetRegisterOffset(unsigned int reg)47 unsigned RegisterContextPOSIX_riscv32::GetRegisterOffset(unsigned int reg) {
48   return m_register_info_up->GetRegisterInfo()[reg].byte_offset;
49 }
50 
51 const lldb_private::RegisterInfo *
GetRegisterInfoAtIndex(size_t reg)52 RegisterContextPOSIX_riscv32::GetRegisterInfoAtIndex(size_t reg) {
53   if (reg < GetRegisterCount())
54     return &GetRegisterInfo()[reg];
55 
56   return nullptr;
57 }
58 
GetRegisterSetCount()59 size_t RegisterContextPOSIX_riscv32::GetRegisterSetCount() {
60   return m_register_info_up->GetRegisterCount();
61 }
62 
63 const lldb_private::RegisterSet *
GetRegisterSet(size_t set)64 RegisterContextPOSIX_riscv32::GetRegisterSet(size_t set) {
65   return m_register_info_up->GetRegisterSet(set);
66 }
67 
68 const lldb_private::RegisterInfo *
GetRegisterInfo()69 RegisterContextPOSIX_riscv32::GetRegisterInfo() {
70   return m_register_info_up->GetRegisterInfo();
71 }
72 
IsGPR(unsigned int reg)73 bool RegisterContextPOSIX_riscv32::IsGPR(unsigned int reg) {
74   return m_register_info_up->GetRegisterSetFromRegisterIndex(reg) ==
75          RegisterInfoPOSIX_riscv32::eRegsetMaskDefault;
76 }
77 
IsFPR(unsigned int reg)78 bool RegisterContextPOSIX_riscv32::IsFPR(unsigned int reg) {
79   return m_register_info_up->GetRegisterSetFromRegisterIndex(reg) ==
80          RegisterInfoPOSIX_riscv32::eRegsetMaskFP;
81 }
82