RegisterContextPOSIXCore_mips64.cpp revision 341825
1314564Sdim//===-- RegisterContextPOSIXCore_mips64.cpp ---------------------*- C++ -*-===//
2257752Semaste//
3257752Semaste//                     The LLVM Compiler Infrastructure
4257752Semaste//
5257752Semaste// This file is distributed under the University of Illinois Open Source
6257752Semaste// License. See LICENSE.TXT for details.
7257752Semaste//
8257752Semaste//===----------------------------------------------------------------------===//
9257752Semaste
10314564Sdim#include "RegisterContextPOSIXCore_mips64.h"
11314564Sdim
12257752Semaste#include "lldb/Core/RegisterValue.h"
13257752Semaste#include "lldb/Target/Thread.h"
14257752Semaste
15257752Semasteusing namespace lldb_private;
16257752Semaste
17314564SdimRegisterContextCorePOSIX_mips64::RegisterContextCorePOSIX_mips64(
18314564Sdim    Thread &thread, RegisterInfoInterface *register_info,
19327952Sdim    const DataExtractor &gpregset, llvm::ArrayRef<CoreNote> notes)
20314564Sdim    : RegisterContextPOSIX_mips64(thread, 0, register_info) {
21314564Sdim  m_gpr_buffer.reset(
22314564Sdim      new DataBufferHeap(gpregset.GetDataStart(), gpregset.GetByteSize()));
23314564Sdim  m_gpr.SetData(m_gpr_buffer);
24314564Sdim  m_gpr.SetByteOrder(gpregset.GetByteOrder());
25327952Sdim
26327952Sdim  DataExtractor fpregset = getRegset(
27327952Sdim      notes, register_info->GetTargetArchitecture().GetTriple(), FPR_Desc);
28321369Sdim  m_fpr_buffer.reset(
29321369Sdim      new DataBufferHeap(fpregset.GetDataStart(), fpregset.GetByteSize()));
30321369Sdim  m_fpr.SetData(m_fpr_buffer);
31321369Sdim  m_fpr.SetByteOrder(fpregset.GetByteOrder());
32257752Semaste}
33257752Semaste
34314564SdimRegisterContextCorePOSIX_mips64::~RegisterContextCorePOSIX_mips64() {}
35257752Semaste
36314564Sdimbool RegisterContextCorePOSIX_mips64::ReadGPR() { return true; }
37257752Semaste
38314564Sdimbool RegisterContextCorePOSIX_mips64::ReadFPR() { return false; }
39257752Semaste
40314564Sdimbool RegisterContextCorePOSIX_mips64::WriteGPR() {
41314564Sdim  assert(0);
42314564Sdim  return false;
43257752Semaste}
44257752Semaste
45314564Sdimbool RegisterContextCorePOSIX_mips64::WriteFPR() {
46314564Sdim  assert(0);
47314564Sdim  return false;
48257752Semaste}
49257752Semaste
50314564Sdimbool RegisterContextCorePOSIX_mips64::ReadRegister(const RegisterInfo *reg_info,
51314564Sdim                                                   RegisterValue &value) {
52321369Sdim
53314564Sdim  lldb::offset_t offset = reg_info->byte_offset;
54321369Sdim  lldb_private::ArchSpec arch = m_register_info_ap->GetTargetArchitecture();
55321369Sdim  uint64_t v;
56321369Sdim  if (IsGPR(reg_info->kinds[lldb::eRegisterKindLLDB])) {
57321369Sdim    if (reg_info->byte_size == 4 && !(arch.GetMachine() == llvm::Triple::mips64el))
58321369Sdim      // In case of 32bit core file, the register data are placed at 4 byte
59341825Sdim      // offset.
60321369Sdim      offset = offset / 2;
61321369Sdim    v = m_gpr.GetMaxU64(&offset, reg_info->byte_size);
62314564Sdim    value = v;
63314564Sdim    return true;
64321369Sdim  } else if (IsFPR(reg_info->kinds[lldb::eRegisterKindLLDB])) {
65321369Sdim    offset = offset - sizeof(GPR_linux_mips);
66321369Sdim    v =m_fpr.GetMaxU64(&offset, reg_info->byte_size);
67321369Sdim    value = v;
68321369Sdim    return true;
69321369Sdim    }
70314564Sdim  return false;
71257752Semaste}
72257752Semaste
73314564Sdimbool RegisterContextCorePOSIX_mips64::ReadAllRegisterValues(
74314564Sdim    lldb::DataBufferSP &data_sp) {
75314564Sdim  return false;
76257752Semaste}
77257752Semaste
78314564Sdimbool RegisterContextCorePOSIX_mips64::WriteRegister(
79314564Sdim    const RegisterInfo *reg_info, const RegisterValue &value) {
80314564Sdim  return false;
81257752Semaste}
82257752Semaste
83314564Sdimbool RegisterContextCorePOSIX_mips64::WriteAllRegisterValues(
84314564Sdim    const lldb::DataBufferSP &data_sp) {
85314564Sdim  return false;
86257752Semaste}
87257752Semaste
88314564Sdimbool RegisterContextCorePOSIX_mips64::HardwareSingleStep(bool enable) {
89314564Sdim  return false;
90257752Semaste}
91