1//===-- RegisterContextKDP_i386.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
11// C Includes
12// C++ Includes
13// Other libraries and framework includes
14// Project includes
15#include "RegisterContextKDP_i386.h"
16#include "ProcessKDP.h"
17#include "ThreadKDP.h"
18
19using namespace lldb;
20using namespace lldb_private;
21
22
23RegisterContextKDP_i386::RegisterContextKDP_i386 (ThreadKDP &thread, uint32_t concrete_frame_idx) :
24    RegisterContextDarwin_i386 (thread, concrete_frame_idx),
25    m_kdp_thread (thread)
26{
27}
28
29RegisterContextKDP_i386::~RegisterContextKDP_i386()
30{
31}
32
33int
34RegisterContextKDP_i386::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_i386::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_i386::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_i386::DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr)
83{
84    ProcessSP process_sp (CalculateProcess());
85    if (process_sp)
86    {
87        Error error;
88        if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, GPRRegSet, &gpr, sizeof(gpr), error))
89        {
90            if (error.Success())
91                return 0;
92        }
93    }
94    return -1;
95}
96
97int
98RegisterContextKDP_i386::DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu)
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, FPURegSet, &fpu, sizeof(fpu), error))
105        {
106            if (error.Success())
107                return 0;
108        }
109    }
110    return -1;
111}
112
113int
114RegisterContextKDP_i386::DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc)
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, EXCRegSet, &exc, sizeof(exc), error))
121        {
122            if (error.Success())
123                return 0;
124        }
125    }
126    return -1;
127}
128
129
130