1 //===-- RegisterContextKDP_x86_64.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_x86_64.h"
16 #include "ProcessKDP.h"
17 #include "ThreadKDP.h"
18
19 using namespace lldb;
20 using namespace lldb_private;
21
22
RegisterContextKDP_x86_64(ThreadKDP & thread,uint32_t concrete_frame_idx)23 RegisterContextKDP_x86_64::RegisterContextKDP_x86_64 (ThreadKDP &thread, uint32_t concrete_frame_idx) :
24 RegisterContextDarwin_x86_64 (thread, concrete_frame_idx),
25 m_kdp_thread (thread)
26 {
27 }
28
~RegisterContextKDP_x86_64()29 RegisterContextKDP_x86_64::~RegisterContextKDP_x86_64()
30 {
31 }
32
33 int
DoReadGPR(lldb::tid_t tid,int flavor,GPR & gpr)34 RegisterContextKDP_x86_64::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
49 int
DoReadFPU(lldb::tid_t tid,int flavor,FPU & fpu)50 RegisterContextKDP_x86_64::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
65 int
DoReadEXC(lldb::tid_t tid,int flavor,EXC & exc)66 RegisterContextKDP_x86_64::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
81 int
DoWriteGPR(lldb::tid_t tid,int flavor,const GPR & gpr)82 RegisterContextKDP_x86_64::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
97 int
DoWriteFPU(lldb::tid_t tid,int flavor,const FPU & fpu)98 RegisterContextKDP_x86_64::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
113 int
DoWriteEXC(lldb::tid_t tid,int flavor,const EXC & exc)114 RegisterContextKDP_x86_64::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