]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_s390x.cpp
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Process / elf-core / RegisterContextPOSIXCore_s390x.cpp
1 //===-- RegisterContextPOSIXCore_s390x.cpp ----------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "RegisterContextPOSIXCore_s390x.h"
11
12 #include "lldb/Target/Thread.h"
13 #include "lldb/Utility/DataBufferHeap.h"
14 #include "lldb/Utility/RegisterValue.h"
15
16 using namespace lldb_private;
17
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) {
22   m_gpr_buffer.reset(
23       new DataBufferHeap(gpregset.GetDataStart(), gpregset.GetByteSize()));
24   m_gpr.SetData(m_gpr_buffer);
25   m_gpr.SetByteOrder(gpregset.GetByteOrder());
26
27   DataExtractor fpregset = getRegset(
28       notes, register_info->GetTargetArchitecture().GetTriple(), FPR_Desc);
29   m_fpr_buffer.reset(
30       new DataBufferHeap(fpregset.GetDataStart(), fpregset.GetByteSize()));
31   m_fpr.SetData(m_fpr_buffer);
32   m_fpr.SetByteOrder(fpregset.GetByteOrder());
33 }
34
35 RegisterContextCorePOSIX_s390x::~RegisterContextCorePOSIX_s390x() {}
36
37 bool RegisterContextCorePOSIX_s390x::ReadGPR() { return true; }
38
39 bool RegisterContextCorePOSIX_s390x::ReadFPR() { return true; }
40
41 bool RegisterContextCorePOSIX_s390x::WriteGPR() {
42   assert(0);
43   return false;
44 }
45
46 bool RegisterContextCorePOSIX_s390x::WriteFPR() {
47   assert(0);
48   return false;
49 }
50
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)
55     return false;
56
57   if (IsGPR(reg)) {
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);
62       return true;
63     }
64   }
65
66   if (IsFPR(reg)) {
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);
71       return true;
72     }
73   }
74
75   return false;
76 }
77
78 bool RegisterContextCorePOSIX_s390x::ReadAllRegisterValues(
79     lldb::DataBufferSP &data_sp) {
80   return false;
81 }
82
83 bool RegisterContextCorePOSIX_s390x::WriteRegister(const RegisterInfo *reg_info,
84                                                    const RegisterValue &value) {
85   return false;
86 }
87
88 bool RegisterContextCorePOSIX_s390x::WriteAllRegisterValues(
89     const lldb::DataBufferSP &data_sp) {
90   return false;
91 }
92
93 bool RegisterContextCorePOSIX_s390x::HardwareSingleStep(bool enable) {
94   return false;
95 }