1 //===-- RegisterContextPOSIX_powerpc.h --------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_RegisterContextPOSIX_powerpc_h_
11 #define liblldb_RegisterContextPOSIX_powerpc_h_
15 // Other libraries and framework includes
17 #include "RegisterContext_powerpc.h"
18 #include "RegisterInfoInterface.h"
19 #include "lldb/Target/RegisterContext.h"
20 #include "lldb/Utility/Log.h"
24 // ---------------------------------------------------------------------------
25 // Internal codes for all powerpc registers.
26 // ---------------------------------------------------------------------------
29 gpr_r0_powerpc = k_first_gpr_powerpc,
66 k_last_gpr_powerpc = gpr_pc_powerpc,
69 fpr_f0_powerpc = k_first_fpr,
102 k_last_fpr = fpr_fpscr_powerpc,
105 vmx_v0_powerpc = k_first_vmx,
139 k_last_vmx = vmx_vscr_powerpc,
141 k_num_registers_powerpc,
142 k_num_gpr_registers_powerpc = k_last_gpr_powerpc - k_first_gpr_powerpc + 1,
143 k_num_fpr_registers_powerpc = k_last_fpr - k_first_fpr + 1,
144 k_num_vmx_registers_powerpc = k_last_vmx - k_first_vmx + 1,
147 class RegisterContextPOSIX_powerpc : public lldb_private::RegisterContext {
149 RegisterContextPOSIX_powerpc(
150 lldb_private::Thread &thread, uint32_t concrete_frame_idx,
151 lldb_private::RegisterInfoInterface *register_info);
153 ~RegisterContextPOSIX_powerpc() override;
157 void InvalidateAllRegisters() override;
159 size_t GetRegisterCount() override;
161 virtual size_t GetGPRSize();
163 virtual unsigned GetRegisterSize(unsigned reg);
165 virtual unsigned GetRegisterOffset(unsigned reg);
167 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;
169 size_t GetRegisterSetCount() override;
171 const lldb_private::RegisterSet *GetRegisterSet(size_t set) override;
173 const char *GetRegisterName(unsigned reg);
175 uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind,
176 uint32_t num) override;
180 m_gpr_powerpc[k_num_gpr_registers_powerpc]; // general purpose registers.
182 m_fpr_powerpc[k_num_fpr_registers_powerpc]; // floating point registers.
183 uint32_t m_vmx_powerpc[k_num_vmx_registers_powerpc][4];
184 std::unique_ptr<lldb_private::RegisterInfoInterface>
185 m_register_info_ap; // Register Info Interface (FreeBSD or Linux)
187 // Determines if an extended register set is supported on the processor
188 // running the inferior process.
189 virtual bool IsRegisterSetAvailable(size_t set_index);
191 virtual const lldb_private::RegisterInfo *GetRegisterInfo();
193 bool IsGPR(unsigned reg);
195 bool IsFPR(unsigned reg);
197 bool IsVMX(unsigned reg);
199 lldb::ByteOrder GetByteOrder();
201 virtual bool ReadGPR() = 0;
202 virtual bool ReadFPR() = 0;
203 virtual bool ReadVMX() = 0;
204 virtual bool WriteGPR() = 0;
205 virtual bool WriteFPR() = 0;
206 virtual bool WriteVMX() = 0;
209 #endif // liblldb_RegisterContextPOSIX_powerpc_h_