1//===-- RegisterContextKDP_arm.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 "RegisterContextKDP_arm.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "ProcessKDP.h"
17#include "ThreadKDP.h"
18
19using namespace lldb;
20using namespace lldb_private;
21
22
23RegisterContextKDP_arm::RegisterContextKDP_arm (ThreadKDP &thread, uint32_t concrete_frame_idx) :
24    RegisterContextDarwin_arm (thread, concrete_frame_idx),
25    m_kdp_thread (thread)
26{
27}
28
29RegisterContextKDP_arm::~RegisterContextKDP_arm()
30{
31}
32
33int
34RegisterContextKDP_arm::DoReadGPR (lldb::tid_t tid, int flavor, GPR &gpr)
35{
36    ProcessSP process_sp (CalculateProcess());
37    if (process_sp)
38    {
39        Error error;
40        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, GPRRegSet, &gpr, sizeof(gpr), error))
41        {
42            if (error.Success())
43                return 0;
44        }
45    }
46    return -1;
47}
48
49int
50RegisterContextKDP_arm::DoReadFPU (lldb::tid_t tid, int flavor, FPU &fpu)
51{
52    ProcessSP process_sp (CalculateProcess());
53    if (process_sp)
54    {
55        Error error;
56        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, FPURegSet, &fpu, sizeof(fpu), error))
57        {
58            if (error.Success())
59                return 0;
60        }
61    }
62    return -1;
63}
64
65int
66RegisterContextKDP_arm::DoReadEXC (lldb::tid_t tid, int flavor, EXC &exc)
67{
68    ProcessSP process_sp (CalculateProcess());
69    if (process_sp)
70    {
71        Error error;
72        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, EXCRegSet, &exc, sizeof(exc), error))
73        {
74            if (error.Success())
75                return 0;
76        }
77    }
78    return -1;
79}
80
81int
82RegisterContextKDP_arm::DoReadDBG (lldb::tid_t tid, int flavor, DBG &dbg)
83{
84    ProcessSP process_sp (CalculateProcess());
85    if (process_sp)
86    {
87        Error error;
88        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, DBGRegSet, &dbg, sizeof(dbg), error))
89        {
90            if (error.Success())
91                return 0;
92        }
93    }
94    return -1;
95}
96
97int
98RegisterContextKDP_arm::DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr)
99{
100    ProcessSP process_sp (CalculateProcess());
101    if (process_sp)
102    {
103        Error error;
104        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, GPRRegSet, &gpr, sizeof(gpr), error))
105        {
106            if (error.Success())
107                return 0;
108        }
109    }
110    return -1;
111}
112
113int
114RegisterContextKDP_arm::DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu)
115{
116    ProcessSP process_sp (CalculateProcess());
117    if (process_sp)
118    {
119        Error error;
120        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, FPURegSet, &fpu, sizeof(fpu), error))
121        {
122            if (error.Success())
123                return 0;
124        }
125    }
126    return -1;
127}
128
129int
130RegisterContextKDP_arm::DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc)
131{
132    ProcessSP process_sp (CalculateProcess());
133    if (process_sp)
134    {
135        Error error;
136        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, EXCRegSet, &exc, sizeof(exc), error))
137        {
138            if (error.Success())
139                return 0;
140        }
141    }
142    return -1;
143}
144
145int
146RegisterContextKDP_arm::DoWriteDBG (lldb::tid_t tid, int flavor, const DBG &dbg)
147{
148    ProcessSP process_sp (CalculateProcess());
149    if (process_sp)
150    {
151        Error error;
152        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, DBGRegSet, &dbg, sizeof(dbg), error))
153        {
154            if (error.Success())
155                return 0;
156        }
157    }
158    return -1;
159}
160
161
162