LLDB mainline
RegisterInfoPOSIX_riscv32.cpp
Go to the documentation of this file.
1//===-- RegisterInfoPOSIX_riscv32.cpp -------------------------------------===//
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#include "lldb/Utility/Flags.h"
11#include "lldb/lldb-defines.h"
12#include "llvm/Support/Compiler.h"
13
14#include <cassert>
15#include <stddef.h>
16
17#define GPR_OFFSET(idx) ((idx) * 4 + 0)
18#define FPR_OFFSET(idx) ((idx) * 4 + sizeof(RegisterInfoPOSIX_riscv32::GPR))
19
20#define REG_CONTEXT_SIZE \
21 (sizeof(RegisterInfoPOSIX_riscv32::GPR) + \
22 sizeof(RegisterInfoPOSIX_riscv32::FPR))
23
24#define DECLARE_REGISTER_INFOS_RISCV32_STRUCT
26#undef DECLARE_REGISTER_INFOS_RISCV32_STRUCT
27
29 const lldb_private::ArchSpec &target_arch) {
30 switch (target_arch.GetMachine()) {
31 case llvm::Triple::riscv32:
32 return g_register_infos_riscv32_le;
33 default:
34 assert(false && "Unhandled target architecture.");
35 return nullptr;
36 }
37}
38
40 const lldb_private::ArchSpec &target_arch) {
41 switch (target_arch.GetMachine()) {
42 case llvm::Triple::riscv32:
43 return static_cast<uint32_t>(sizeof(g_register_infos_riscv32_le) /
44 sizeof(g_register_infos_riscv32_le[0]));
45 default:
46 assert(false && "Unhandled target architecture.");
47 return 0;
48 }
49}
50
51// Number of register sets provided by this context.
52enum {
56};
57
58// RISC-V32 general purpose registers.
69
70static_assert(((sizeof g_gpr_regnums_riscv32 /
71 sizeof g_gpr_regnums_riscv32[0]) -
73 "g_gpr_regnums_riscv32 has wrong number of register infos");
74
75// RISC-V32 floating point registers.
86
87static_assert(((sizeof g_fpr_regnums_riscv32 /
88 sizeof g_fpr_regnums_riscv32[0]) -
90 "g_fpr_regnums_riscv32 has wrong number of register infos");
91
92// Register sets for RISC-V32.
94 {{"General Purpose Registers", "gpr", k_num_gpr_registers,
96 {"Floating Point Registers", "fpr", k_num_fpr_registers,
98
105
109
111 return sizeof(struct RegisterInfoPOSIX_riscv32::GPR);
112}
113
115 return sizeof(struct RegisterInfoPOSIX_riscv32::FPR);
116}
117
122
126
128 uint32_t reg_index) const {
129 // coverity[unsigned_compare]
130 if (reg_index >= gpr_first_riscv && reg_index <= gpr_last_riscv)
131 return eRegsetMaskDefault;
132 if (reg_index >= fpr_first_riscv && reg_index <= fpr_last_riscv)
133 return eRegsetMaskFP;
134 return LLDB_INVALID_REGNUM;
135}
136
139 if (set_index < GetRegisterSetCount())
140 return &g_reg_sets_riscv32[set_index];
141 return nullptr;
142}
const size_t k_num_gpr_registers
const size_t k_num_fpr_registers
constexpr size_t k_num_register_sets
static const uint32_t g_gpr_regnums_riscv32[]
static const lldb_private::RegisterSet g_reg_sets_riscv32[k_num_register_sets]
static const uint32_t g_fpr_regnums_riscv32[]
const lldb_private::RegisterInfo * GetRegisterInfo() const override
const lldb_private::RegisterSet * GetRegisterSet(size_t reg_set) const override
static uint32_t GetRegisterInfoCount(const lldb_private::ArchSpec &target_arch)
const lldb_private::RegisterInfo * m_register_info_p
size_t GetRegisterSetFromRegisterIndex(uint32_t reg_index) const override
size_t GetRegisterSetCount() const override
uint32_t GetRegisterCount() const override
RegisterInfoPOSIX_riscv32(const lldb_private::ArchSpec &target_arch, lldb_private::Flags flags)
static const lldb_private::RegisterInfo * GetRegisterInfoPtr(const lldb_private::ArchSpec &target_arch)
An architecture specification class.
Definition ArchSpec.h:31
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
Definition ArchSpec.cpp:677
A class to manage flags.
Definition Flags.h:22
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.