LLDB mainline
RegisterInfoPOSIXDynamic_riscv32.cpp
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
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
10
11#include "lldb/lldb-defines.h"
12#include "llvm/Support/Compiler.h"
13
14#include <stddef.h>
15
20
22 return m_dyn_reg_infos.GetNumRegisters();
23}
24
26 for (uint32_t set_idx = 0; set_idx < GetRegisterSetCount(); ++set_idx) {
27 const lldb_private::RegisterSet *set =
28 m_dyn_reg_infos.GetRegisterSet(set_idx);
29 if (strcmp(set->name, "GPR") == 0)
30 return set->num_registers;
31 }
32 return 0;
33}
34
36 for (uint32_t set_idx = 0; set_idx < GetRegisterSetCount(); ++set_idx) {
37 const lldb_private::RegisterSet *set =
38 m_dyn_reg_infos.GetRegisterSet(set_idx);
39 if (strcmp(set->name, "FPR") == 0)
40 return set->num_registers;
41 }
42 return 0;
43}
44
47 return &*m_dyn_reg_infos
48 .registers<lldb_private::DynamicRegisterInfo::
49 reg_collection_const_range>()
50 .begin();
51}
52
54 return m_dyn_reg_infos.GetNumRegisterSets();
55}
56
58 uint32_t reg_index) const {
59 for (size_t set_index = 0; set_index < m_dyn_reg_infos.GetNumRegisterSets();
60 ++set_index) {
61 const lldb_private::RegisterSet *reg_set =
62 m_dyn_reg_infos.GetRegisterSet(set_index);
63 for (uint32_t idx = 0; idx < reg_set->num_registers; ++idx)
64 if (reg_set->registers[idx] == reg_index)
65 return set_index;
66 }
68}
69
72 if (set_index < GetRegisterSetCount())
73 return m_dyn_reg_infos.GetRegisterSet(set_index);
74 return nullptr;
75}
76
78 std::vector<lldb_private::DynamicRegisterInfo::Register> regs) {
79 return m_dyn_reg_infos.SetRegisterInfo(std::move(regs), m_target_arch);
80}
81
84 llvm::StringRef reg_name) const {
85 return m_dyn_reg_infos.GetRegisterInfo(reg_name);
86}
const lldb_private::RegisterSet * GetRegisterSet(size_t reg_set) const override
RegisterInfoPOSIXDynamic_riscv32(const lldb_private::ArchSpec &target_arch)
size_t SetRegisterInfo(std::vector< lldb_private::DynamicRegisterInfo::Register > regs)
const lldb_private::RegisterInfo * GetRegisterInfo() const override
lldb_private::DynamicRegisterInfo m_dyn_reg_infos
size_t GetRegisterSetFromRegisterIndex(uint32_t reg_index) const override
An architecture specification class.
Definition ArchSpec.h:32
RegisterInfoAndSetInterface(const lldb_private::ArchSpec &target_arch)
#define LLDB_INVALID_REGNUM
A class that represents a running process on the host machine.
Every register is described in detail including its name, alternate name (optional),...
Registers are grouped into register sets.
size_t num_registers
The number of registers in REGISTERS array below.
const uint32_t * registers
An array of register indices in this set.
const char * name
Name of this register set.