16#include "llvm/ADT/STLExtras.h"
17#include "llvm/Support/Compiler.h"
108#define GPR_OFFSET(reg) \
109 (LLVM_EXTENSION offsetof(RegisterContextDarwin_riscv32::GPR, reg))
110#define FPU_OFFSET(reg) \
111 (LLVM_EXTENSION offsetof(RegisterContextDarwin_riscv32::FPU, reg) + \
112 sizeof(RegisterContextDarwin_riscv32::GPR))
113#define EXC_OFFSET(reg) \
114 (LLVM_EXTENSION offsetof(RegisterContextDarwin_riscv32::EXC, reg) + \
115 sizeof(RegisterContextDarwin_riscv32::GPR) + \
116 sizeof(RegisterContextDarwin_riscv32::FPU))
122#define DEFINE_GPR_ABI(reg, canon) \
124 sizeof(((RegisterContextDarwin_riscv32::GPR *)nullptr)->canon), \
125 GPR_OFFSET(canon), eEncodingUint, eFormatHex
126#define DEFINE_GPR(reg) \
128 sizeof(((RegisterContextDarwin_riscv32::GPR *)nullptr)->reg), \
129 GPR_OFFSET(reg), eEncodingUint, eFormatHex
130#define DEFINE_FPU_ABI(reg, canon) \
132 sizeof(((RegisterContextDarwin_riscv32::FPU *)nullptr)->canon), \
133 FPU_OFFSET(canon), eEncodingUint, eFormatHex
134#define DEFINE_FPU(reg) \
136 sizeof(((RegisterContextDarwin_riscv32::FPU *)nullptr)->reg), \
137 FPU_OFFSET(reg), eEncodingUint, eFormatHex
138#define DEFINE_EXC(reg) \
140 sizeof(((RegisterContextDarwin_riscv32::EXC *)nullptr)->reg), \
141 EXC_OFFSET(reg), eEncodingUint, eFormatHex
142#define REG_CONTEXT_SIZE \
143 (sizeof(RegisterContextDarwin_riscv32::GPR) + \
144 sizeof(RegisterContextDarwin_riscv32::FPU) + \
145 sizeof(RegisterContextDarwin_riscv32::EXC) + \
146 sizeof(RegisterContextDarwin_riscv32::CSR))
706 1024 *
sizeof(uint32_t),
719 Thread &thread, uint32_t concrete_frame_idx)
791 "General Purpose Registers",
831 uint32_t reg =
gpr_x0 + i;
1034 value =
exc.exception;
1176 uint8_t *dst = data_sp->GetBytes();
1177 ::memcpy(dst, &
gpr,
sizeof(
gpr));
1180 ::memcpy(dst, &
fpr,
sizeof(
fpr));
1183 ::memcpy(dst, &
exc,
sizeof(
exc));
1186 ::memcpy(dst, &
csr,
sizeof(
csr));
1195 const uint8_t *src = data_sp->GetBytes();
1196 ::memcpy(&
gpr, src,
sizeof(
gpr));
1199 ::memcpy(&
fpr, src,
sizeof(
fpr));
1202 ::memcpy(&
exc, src,
sizeof(
exc));
1205 ::memcpy(&
csr, src,
sizeof(
csr));
1206 uint32_t success_count = 0;
1216 return success_count == 3;
static const uint32_t k_num_register_infos
static const RegisterInfo g_register_infos[]
#define LLDB_LOGF(log,...)
const size_t k_num_regsets
static uint32_t g_exc_regnums[]
const size_t k_num_gpr_registers
const size_t k_num_exc_registers
#define DEFINE_GPR_ABI(reg, canon)
#define DEFINE_FPU_ABI(reg, canon)
const size_t k_num_csr_registers
static uint32_t g_fpr_regnums[]
const size_t k_num_fpr_registers
static uint32_t g_csr_regnums[]
const uint32_t g_gpr_regnums[]
static RegisterSet g_reg_sets[]
bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override
size_t GetRegisterSetCount() override
~RegisterContextDarwin_riscv32() override
const lldb_private::RegisterSet * GetRegisterSet(size_t set) override
int ReadRegisterSet(uint32_t set, bool force)
uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override
Convert from a given register numbering scheme to the lldb register numbering scheme.
void InvalidateAllRegisters() override
static const lldb_private::RegisterInfo * GetRegisterInfos()
virtual int DoWriteCSR(lldb::tid_t tid, int flavor, const CSR &exc)=0
void LogGPR(lldb_private::Log *log, const char *title)
virtual int DoReadEXC(lldb::tid_t tid, int flavor, EXC &exc)=0
RegisterContextDarwin_riscv32(lldb_private::Thread &thread, uint32_t concrete_frame_idx)
static int GetSetForNativeRegNum(int reg_num)
virtual int DoWriteFPU(lldb::tid_t tid, int flavor, const FPU &fpr)=0
virtual int DoReadFPU(lldb::tid_t tid, int flavor, FPU &fpr)=0
const lldb_private::RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
int WriteRegisterSet(uint32_t set)
bool RegisterSetIsCached(int set) const
int GetError(int flavor, uint32_t err_idx) const
bool SetError(int flavor, uint32_t err_idx, int err)
virtual int DoWriteEXC(lldb::tid_t tid, int flavor, const EXC &exc)=0
bool ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override
size_t GetRegisterCount() override
bool ReadRegister(const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value) override
bool WriteRegister(const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value) override
void InvalidateAllRegisterStates()
static size_t GetRegisterInfosCount()
virtual int DoReadGPR(lldb::tid_t tid, int flavor, GPR &gpr)=0
virtual int DoReadCSR(lldb::tid_t tid, int flavor, CSR &exc)=0
virtual int DoWriteGPR(lldb::tid_t tid, int flavor, const GPR &gpr)=0
virtual lldb::tid_t GetThreadID() const
RegisterContext(Thread &thread, uint32_t concrete_frame_idx)
uint32_t GetAsUInt32(uint32_t fail_value=UINT32_MAX, bool *success_ptr=nullptr) const
#define LLDB_REGNUM_GENERIC_RA
#define LLDB_REGNUM_GENERIC_ARG8
#define LLDB_REGNUM_GENERIC_ARG6
#define LLDB_REGNUM_GENERIC_SP
#define LLDB_REGNUM_GENERIC_ARG4
#define LLDB_REGNUM_GENERIC_ARG3
#define LLDB_REGNUM_GENERIC_ARG1
#define LLDB_REGNUM_GENERIC_ARG7
#define LLDB_INVALID_REGNUM
#define LLDB_REGNUM_GENERIC_ARG2
#define LLDB_REGNUM_GENERIC_PC
#define LLDB_REGNUM_GENERIC_FP
#define LLDB_REGNUM_GENERIC_ARG5
A class that represents a running process on the host machine.
@ eEncodingVector
vector registers
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP
RegisterKind
Register numbering types.
@ eRegisterKindGeneric
insn ptr reg, stack ptr reg, etc not specific to any particular target
@ eRegisterKindLLDB
lldb's internal register numbers
@ eRegisterKindDWARF
the register numbers seen DWARF
@ eRegisterKindEHFrame
the register numbers seen in eh_frame
Every register is described in detail including its name, alternate name (optional),...
uint32_t kinds[lldb::kNumRegisterKinds]
Holds all of the various register numbers for all register kinds.
Registers are grouped into register sets.