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 "lldb/Core/Log.h"
18 #include "lldb/Target/RegisterContext.h"
19 #include "RegisterInfoInterface.h"
20 #include "RegisterContext_powerpc.h"
24 // ---------------------------------------------------------------------------
25 // Internal codes for all powerpc registers.
26 // ---------------------------------------------------------------------------
30 gpr_r0_powerpc = k_first_gpr_powerpc,
67 k_last_gpr_powerpc = gpr_pc_powerpc,
70 fpr_f0_powerpc = k_first_fpr,
103 k_last_fpr = fpr_fpscr_powerpc,
106 vmx_v0_powerpc = k_first_vmx,
140 k_last_vmx = vmx_vscr_powerpc,
142 k_num_registers_powerpc,
143 k_num_gpr_registers_powerpc = k_last_gpr_powerpc - k_first_gpr_powerpc + 1,
144 k_num_fpr_registers_powerpc = k_last_fpr - k_first_fpr + 1,
145 k_num_vmx_registers_powerpc = k_last_vmx - k_first_vmx + 1,
148 class RegisterContextPOSIX_powerpc
149 : public lldb_private::RegisterContext
152 RegisterContextPOSIX_powerpc (lldb_private::Thread &thread,
153 uint32_t concrete_frame_idx,
154 lldb_private::RegisterInfoInterface *register_info);
156 ~RegisterContextPOSIX_powerpc() override;
162 InvalidateAllRegisters() override;
165 GetRegisterCount() override;
171 GetRegisterSize(unsigned reg);
174 GetRegisterOffset(unsigned reg);
176 const lldb_private::RegisterInfo *
177 GetRegisterInfoAtIndex(size_t reg) override;
180 GetRegisterSetCount() override;
182 const lldb_private::RegisterSet *
183 GetRegisterSet(size_t set) override;
186 GetRegisterName(unsigned reg);
189 ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override;
192 uint64_t m_gpr_powerpc[k_num_gpr_registers_powerpc]; // general purpose registers.
193 uint64_t m_fpr_powerpc[k_num_fpr_registers_powerpc]; // floating point registers.
194 uint32_t m_vmx_powerpc[k_num_vmx_registers_powerpc][4];
195 std::unique_ptr<lldb_private::RegisterInfoInterface> m_register_info_ap; // Register Info Interface (FreeBSD or Linux)
197 // Determines if an extended register set is supported on the processor running the inferior process.
199 IsRegisterSetAvailable(size_t set_index);
201 virtual const lldb_private::RegisterInfo *
213 lldb::ByteOrder GetByteOrder();
215 virtual bool ReadGPR() = 0;
216 virtual bool ReadFPR() = 0;
217 virtual bool ReadVMX() = 0;
218 virtual bool WriteGPR() = 0;
219 virtual bool WriteFPR() = 0;
220 virtual bool WriteVMX() = 0;
223 #endif // liblldb_RegisterContextPOSIX_powerpc_h_