LLDB mainline
NativeRegisterContextAIX_ppc64.cpp
Go to the documentation of this file.
1//===------ NativeRegisterContextAIX_ppc64.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
9#if defined(__powerpc64__)
10
12
13using namespace lldb;
14using namespace lldb_private;
15using namespace lldb_private::process_aix;
16
17static const uint32_t g_gpr_regnums_ppc64[] = {
28 LLDB_INVALID_REGNUM // register sets need to end with this flag
29};
30
31static const uint32_t g_fpr_regnums_ppc64[] = {
41 LLDB_INVALID_REGNUM // register sets need to end with this flag
42};
43
44static const uint32_t g_vmx_regnums_ppc64[] = {
54 LLDB_INVALID_REGNUM // register sets need to end with this flag
55};
56
57static const uint32_t g_vsx_regnums_ppc64[] = {
74 LLDB_INVALID_REGNUM // register sets need to end with this flag
75};
76
77// Number of register sets provided by this context.
78static constexpr int k_num_register_sets = 4;
79
80static const RegisterSet g_reg_sets_ppc64[k_num_register_sets] = {
81 {"General Purpose Registers", "gpr", k_num_gpr_registers_ppc64,
82 g_gpr_regnums_ppc64},
83 {"Floating Point Registers", "fpr", k_num_fpr_registers_ppc64,
84 g_fpr_regnums_ppc64},
85 {"AltiVec/VMX Registers", "vmx", k_num_vmx_registers_ppc64,
86 g_vmx_regnums_ppc64},
87 {"VSX Registers", "vsx", k_num_vsx_registers_ppc64, g_vsx_regnums_ppc64},
88};
89
90NativeRegisterContextAIX_ppc64::NativeRegisterContextAIX_ppc64(
91 const ArchSpec &target_arch, NativeThreadProtocol &native_thread)
92 : NativeRegisterContextAIX(native_thread) {
93 if (target_arch.GetMachine() != llvm::Triple::ppc64)
94 llvm_unreachable("Unhandled target architecture.");
95}
96
97uint32_t NativeRegisterContextAIX_ppc64::GetRegisterSetCount() const {
99}
100
101const RegisterSet *
102NativeRegisterContextAIX_ppc64::GetRegisterSet(uint32_t set_index) const {
103 if (set_index < k_num_register_sets)
104 return &g_reg_sets_ppc64[set_index];
105
106 return nullptr;
107}
108
109uint32_t NativeRegisterContextAIX_ppc64::GetUserRegisterCount() const {
110 uint32_t count = 0;
111 for (uint32_t set_index = 0; set_index < k_num_register_sets; ++set_index)
112 count += g_reg_sets_ppc64[set_index].num_registers;
113 return count;
114}
115
116Status
117NativeRegisterContextAIX_ppc64::ReadRegister(const RegisterInfo *reg_info,
118 RegisterValue &reg_value) {
119 return Status("unimplemented");
120}
121
122Status
123NativeRegisterContextAIX_ppc64::WriteRegister(const RegisterInfo *reg_info,
124 const RegisterValue &reg_value) {
125 return Status("unimplemented");
126}
127
128Status NativeRegisterContextAIX_ppc64::ReadAllRegisterValues(
130 return Status("unimplemented");
131}
132
133Status NativeRegisterContextAIX_ppc64::WriteAllRegisterValues(
134 const lldb::DataBufferSP &data_sp) {
135 return Status("unimplemented");
136}
137
138bool NativeRegisterContextAIX_ppc64::IsGPR(unsigned reg) const {
139 return reg <= k_last_gpr_ppc64;
140}
141
142bool NativeRegisterContextAIX_ppc64::IsFPR(unsigned reg) const {
143 return (k_first_fpr_ppc64 <= reg && reg <= k_last_fpr_ppc64);
144}
145
146bool NativeRegisterContextAIX_ppc64::IsVMX(unsigned reg) const {
147 return (reg >= k_first_vmx_ppc64) && (reg <= k_last_vmx_ppc64);
148}
149
150bool NativeRegisterContextAIX_ppc64::IsVSX(unsigned reg) const {
151 return (reg >= k_first_vsx_ppc64) && (reg <= k_last_vsx_ppc64);
152}
153
154uint32_t NativeRegisterContextAIX_ppc64::CalculateFprOffset(
155 const RegisterInfo *reg_info) const {
156 return 0;
157}
158
159uint32_t NativeRegisterContextAIX_ppc64::CalculateVmxOffset(
160 const RegisterInfo *reg_info) const {
161 return 0;
162}
163
164uint32_t NativeRegisterContextAIX_ppc64::CalculateVsxOffset(
165 const RegisterInfo *reg_info) const {
166 return 0;
167}
168
169#endif // defined(__powerpc64__)
constexpr size_t k_num_register_sets
#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
Every register is described in detail including its name, alternate name (optional),...
Registers are grouped into register sets.