9#if defined(__powerpc64__)
20static const uint32_t g_gpr_regnums_ppc64[] = {
34static const uint32_t g_fpr_regnums_ppc64[] = {
47static const uint32_t g_vmx_regnums_ppc64[] = {
60static const uint32_t g_vsx_regnums_ppc64[] = {
93std::unique_ptr<NativeRegisterContextAIX>
96 switch (target_arch.GetMachine()) {
97 case llvm::Triple::ppc:
98 case llvm::Triple::ppc64:
99 return std::make_unique<NativeRegisterContextAIX_ppc64>(target_arch,
102 llvm_unreachable(
"have no register context for architecture");
106NativeRegisterContextAIX_ppc64::NativeRegisterContextAIX_ppc64(
111 switch (target_arch.GetMachine()) {
112 case llvm::Triple::ppc:
113 new (&m_gpr_storage.gpr32) GPR_PPC{};
114 m_gpr = &m_gpr_storage.gpr32;
116 case llvm::Triple::ppc64:
117 new (&m_gpr_storage.gpr32) GPR_PPC64{};
118 m_gpr = &m_gpr_storage.gpr64;
121 llvm_unreachable(
"Unhandled target architecture.");
125uint32_t NativeRegisterContextAIX_ppc64::GetRegisterSetCount()
const {
130NativeRegisterContextAIX_ppc64::GetRegisterSet(uint32_t set_index)
const {
132 return &g_reg_sets_ppc64[set_index];
137uint32_t NativeRegisterContextAIX_ppc64::GetUserRegisterCount()
const {
140 count += g_reg_sets_ppc64[set_index].num_registers;
145NativeRegisterContextAIX_ppc64::ReadRegister(
const RegisterInfo *reg_info,
158 const uint8_t *src =
reinterpret_cast<const uint8_t *
>(GetGPRBuffer()) +
164 }
else if (IsFPR(reg) || IsVSX(reg) || IsVMX(reg)) {
169 "GPR, FPR, VSX or VMX, read strategy unknown");
173NativeRegisterContextAIX_ppc64::WriteRegister(
const RegisterInfo *reg_info,
187 reinterpret_cast<uint8_t *
>(GetGPRBuffer()) + reg_info->
byte_offset;
191 }
else if (IsFPR(reg) || IsVMX(reg) || IsVSX(reg)) {
196 "GPR, FPR, VSX or VMX, read strategy unknown");
199Status NativeRegisterContextAIX_ppc64::ReadAllRegisterValues(
201 return Status(
"unimplemented");
204Status NativeRegisterContextAIX_ppc64::WriteAllRegisterValues(
206 return Status(
"unimplemented");
209bool NativeRegisterContextAIX_ppc64::IsGPR(
unsigned reg)
const {
213bool NativeRegisterContextAIX_ppc64::IsFPR(
unsigned reg)
const {
217bool NativeRegisterContextAIX_ppc64::IsVMX(
unsigned reg)
const {
221bool NativeRegisterContextAIX_ppc64::IsVSX(
unsigned reg)
const {
225uint32_t NativeRegisterContextAIX_ppc64::CalculateFprOffset(
230uint32_t NativeRegisterContextAIX_ppc64::CalculateVmxOffset(
235uint32_t NativeRegisterContextAIX_ppc64::CalculateVsxOffset(
static llvm::raw_ostream & error(Stream &strm)
uint32_t SetFromMemoryData(const RegisterInfo ®_info, const void *src, uint32_t src_len, lldb::ByteOrder src_byte_order, Status &error)
const void * GetBytes() const
uint32_t GetByteSize() const
static Status FromErrorString(const char *str)
static std::unique_ptr< NativeRegisterContextAIX > CreateHostNativeRegisterContextAIX(const ArchSpec &target_arch, NativeThreadAIX &native_thread)
#define LLDB_INVALID_REGNUM
@ k_num_gpr_registers_ppc64
@ k_num_vmx_registers_ppc64
@ k_num_vsx_registers_ppc64
@ k_num_fpr_registers_ppc64
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP
@ eRegisterKindLLDB
lldb's internal register numbers
Every register is described in detail including its name, alternate name (optional),...
uint32_t byte_offset
The byte offset in the register context data where this register's value is found.
uint32_t byte_size
Size in bytes of the register.
uint32_t kinds[lldb::kNumRegisterKinds]
Holds all of the various register numbers for all register kinds.
Registers are grouped into register sets.