1 //===-- RegisterContextPOSIXCore_powerpc.cpp --------------------*- 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 #include "RegisterContextPOSIXCore_powerpc.h"
12 #include "lldb/Core/DataBufferHeap.h"
13 #include "lldb/Core/RegisterValue.h"
14 #include "lldb/Target/Thread.h"
16 using namespace lldb_private;
18 RegisterContextCorePOSIX_powerpc::RegisterContextCorePOSIX_powerpc(
19 Thread &thread, RegisterInfoInterface *register_info,
20 const DataExtractor &gpregset, const DataExtractor &fpregset,
21 const DataExtractor &vregset)
22 : RegisterContextPOSIX_powerpc(thread, 0, register_info) {
24 new DataBufferHeap(gpregset.GetDataStart(), gpregset.GetByteSize()));
25 m_gpr.SetData(m_gpr_buffer);
26 m_gpr.SetByteOrder(gpregset.GetByteOrder());
28 new DataBufferHeap(fpregset.GetDataStart(), fpregset.GetByteSize()));
29 m_fpr.SetData(m_fpr_buffer);
30 m_fpr.SetByteOrder(fpregset.GetByteOrder());
32 new DataBufferHeap(vregset.GetDataStart(), vregset.GetByteSize()));
33 m_vec.SetData(m_vec_buffer);
34 m_vec.SetByteOrder(vregset.GetByteOrder());
37 RegisterContextCorePOSIX_powerpc::~RegisterContextCorePOSIX_powerpc() {}
39 bool RegisterContextCorePOSIX_powerpc::ReadGPR() { return true; }
41 bool RegisterContextCorePOSIX_powerpc::ReadFPR() { return true; }
43 bool RegisterContextCorePOSIX_powerpc::ReadVMX() { return true; }
45 bool RegisterContextCorePOSIX_powerpc::WriteGPR() {
50 bool RegisterContextCorePOSIX_powerpc::WriteFPR() {
55 bool RegisterContextCorePOSIX_powerpc::WriteVMX() {
60 bool RegisterContextCorePOSIX_powerpc::ReadRegister(
61 const RegisterInfo *reg_info, RegisterValue &value) {
62 lldb::offset_t offset = reg_info->byte_offset;
63 if (IsFPR(reg_info->kinds[lldb::eRegisterKindLLDB])) {
64 uint64_t v = m_fpr.GetMaxU64(&offset, reg_info->byte_size);
65 if (offset == reg_info->byte_offset + reg_info->byte_size) {
69 } else if (IsVMX(reg_info->kinds[lldb::eRegisterKindLLDB])) {
71 offset = m_vec.CopyData(offset, reg_info->byte_size, &v);
72 if (offset == reg_info->byte_size) {
73 value.SetBytes(v, reg_info->byte_size, m_vec.GetByteOrder());
77 uint64_t v = m_gpr.GetMaxU64(&offset, reg_info->byte_size);
78 if (offset == reg_info->byte_offset + reg_info->byte_size) {
79 if (reg_info->byte_size < sizeof(v))
89 bool RegisterContextCorePOSIX_powerpc::ReadAllRegisterValues(
90 lldb::DataBufferSP &data_sp) {
94 bool RegisterContextCorePOSIX_powerpc::WriteRegister(
95 const RegisterInfo *reg_info, const RegisterValue &value) {
99 bool RegisterContextCorePOSIX_powerpc::WriteAllRegisterValues(
100 const lldb::DataBufferSP &data_sp) {
104 bool RegisterContextCorePOSIX_powerpc::HardwareSingleStep(bool enable) {