1 //===-- RegisterContextKDP_x86_64.cpp -------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "RegisterContextKDP_x86_64.h"
10 #include "ProcessKDP.h"
11 #include "ThreadKDP.h"
12
13 using namespace lldb;
14 using namespace lldb_private;
15
RegisterContextKDP_x86_64(ThreadKDP & thread,uint32_t concrete_frame_idx)16 RegisterContextKDP_x86_64::RegisterContextKDP_x86_64(
17 ThreadKDP &thread, uint32_t concrete_frame_idx)
18 : RegisterContextDarwin_x86_64(thread, concrete_frame_idx),
19 m_kdp_thread(thread) {}
20
~RegisterContextKDP_x86_64()21 RegisterContextKDP_x86_64::~RegisterContextKDP_x86_64() {}
22
DoReadGPR(lldb::tid_t tid,int flavor,GPR & gpr)23 int RegisterContextKDP_x86_64::DoReadGPR(lldb::tid_t tid, int flavor,
24 GPR &gpr) {
25 ProcessSP process_sp(CalculateProcess());
26 if (process_sp) {
27 Status error;
28 if (static_cast<ProcessKDP *>(process_sp.get())
29 ->GetCommunication()
30 .SendRequestReadRegisters(tid, GPRRegSet, &gpr, sizeof(gpr),
31 error)) {
32 if (error.Success())
33 return 0;
34 }
35 }
36 return -1;
37 }
38
DoReadFPU(lldb::tid_t tid,int flavor,FPU & fpu)39 int RegisterContextKDP_x86_64::DoReadFPU(lldb::tid_t tid, int flavor,
40 FPU &fpu) {
41 ProcessSP process_sp(CalculateProcess());
42 if (process_sp) {
43 Status error;
44 if (static_cast<ProcessKDP *>(process_sp.get())
45 ->GetCommunication()
46 .SendRequestReadRegisters(tid, FPURegSet, &fpu, sizeof(fpu),
47 error)) {
48 if (error.Success())
49 return 0;
50 }
51 }
52 return -1;
53 }
54
DoReadEXC(lldb::tid_t tid,int flavor,EXC & exc)55 int RegisterContextKDP_x86_64::DoReadEXC(lldb::tid_t tid, int flavor,
56 EXC &exc) {
57 ProcessSP process_sp(CalculateProcess());
58 if (process_sp) {
59 Status error;
60 if (static_cast<ProcessKDP *>(process_sp.get())
61 ->GetCommunication()
62 .SendRequestReadRegisters(tid, EXCRegSet, &exc, sizeof(exc),
63 error)) {
64 if (error.Success())
65 return 0;
66 }
67 }
68 return -1;
69 }
70
DoWriteGPR(lldb::tid_t tid,int flavor,const GPR & gpr)71 int RegisterContextKDP_x86_64::DoWriteGPR(lldb::tid_t tid, int flavor,
72 const GPR &gpr) {
73 ProcessSP process_sp(CalculateProcess());
74 if (process_sp) {
75 Status error;
76 if (static_cast<ProcessKDP *>(process_sp.get())
77 ->GetCommunication()
78 .SendRequestWriteRegisters(tid, GPRRegSet, &gpr, sizeof(gpr),
79 error)) {
80 if (error.Success())
81 return 0;
82 }
83 }
84 return -1;
85 }
86
DoWriteFPU(lldb::tid_t tid,int flavor,const FPU & fpu)87 int RegisterContextKDP_x86_64::DoWriteFPU(lldb::tid_t tid, int flavor,
88 const FPU &fpu) {
89 ProcessSP process_sp(CalculateProcess());
90 if (process_sp) {
91 Status error;
92 if (static_cast<ProcessKDP *>(process_sp.get())
93 ->GetCommunication()
94 .SendRequestWriteRegisters(tid, FPURegSet, &fpu, sizeof(fpu),
95 error)) {
96 if (error.Success())
97 return 0;
98 }
99 }
100 return -1;
101 }
102
DoWriteEXC(lldb::tid_t tid,int flavor,const EXC & exc)103 int RegisterContextKDP_x86_64::DoWriteEXC(lldb::tid_t tid, int flavor,
104 const EXC &exc) {
105 ProcessSP process_sp(CalculateProcess());
106 if (process_sp) {
107 Status error;
108 if (static_cast<ProcessKDP *>(process_sp.get())
109 ->GetCommunication()
110 .SendRequestWriteRegisters(tid, EXCRegSet, &exc, sizeof(exc),
111 error)) {
112 if (error.Success())
113 return 0;
114 }
115 }
116 return -1;
117 }
118