1 //===-- RegisterContextPOSIXCore_s390x.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_s390x.h"
12 #include "lldb/Target/Thread.h"
13 #include "lldb/Utility/DataBufferHeap.h"
14 #include "lldb/Utility/RegisterValue.h"
16 using namespace lldb_private;
18 RegisterContextCorePOSIX_s390x::RegisterContextCorePOSIX_s390x(
19 Thread &thread, RegisterInfoInterface *register_info,
20 const DataExtractor &gpregset, llvm::ArrayRef<CoreNote> notes)
21 : RegisterContextPOSIX_s390x(thread, 0, register_info) {
23 new DataBufferHeap(gpregset.GetDataStart(), gpregset.GetByteSize()));
24 m_gpr.SetData(m_gpr_buffer);
25 m_gpr.SetByteOrder(gpregset.GetByteOrder());
27 DataExtractor fpregset = getRegset(
28 notes, register_info->GetTargetArchitecture().GetTriple(), FPR_Desc);
30 new DataBufferHeap(fpregset.GetDataStart(), fpregset.GetByteSize()));
31 m_fpr.SetData(m_fpr_buffer);
32 m_fpr.SetByteOrder(fpregset.GetByteOrder());
35 RegisterContextCorePOSIX_s390x::~RegisterContextCorePOSIX_s390x() {}
37 bool RegisterContextCorePOSIX_s390x::ReadGPR() { return true; }
39 bool RegisterContextCorePOSIX_s390x::ReadFPR() { return true; }
41 bool RegisterContextCorePOSIX_s390x::WriteGPR() {
46 bool RegisterContextCorePOSIX_s390x::WriteFPR() {
51 bool RegisterContextCorePOSIX_s390x::ReadRegister(const RegisterInfo *reg_info,
52 RegisterValue &value) {
53 const uint32_t reg = reg_info->kinds[lldb::eRegisterKindLLDB];
54 if (reg == LLDB_INVALID_REGNUM)
58 lldb::offset_t offset = reg_info->byte_offset;
59 uint64_t v = m_gpr.GetMaxU64(&offset, reg_info->byte_size);
60 if (offset == reg_info->byte_offset + reg_info->byte_size) {
61 value.SetUInt(v, reg_info->byte_size);
67 lldb::offset_t offset = reg_info->byte_offset;
68 uint64_t v = m_fpr.GetMaxU64(&offset, reg_info->byte_size);
69 if (offset == reg_info->byte_offset + reg_info->byte_size) {
70 value.SetUInt(v, reg_info->byte_size);
78 bool RegisterContextCorePOSIX_s390x::ReadAllRegisterValues(
79 lldb::DataBufferSP &data_sp) {
83 bool RegisterContextCorePOSIX_s390x::WriteRegister(const RegisterInfo *reg_info,
84 const RegisterValue &value) {
88 bool RegisterContextCorePOSIX_s390x::WriteAllRegisterValues(
89 const lldb::DataBufferSP &data_sp) {
93 bool RegisterContextCorePOSIX_s390x::HardwareSingleStep(bool enable) {