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
13using namespace lldb;
14using namespace lldb_private;
15
16RegisterContextKDP_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
21RegisterContextKDP_x86_64::~RegisterContextKDP_x86_64() = default;
22
23int 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(cpu: tid, flavor: GPRRegSet, dst: &gpr, dst_size: sizeof(gpr),
31 error)) {
32 if (error.Success())
33 return 0;
34 }
35 }
36 return -1;
37}
38
39int 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(cpu: tid, flavor: FPURegSet, dst: &fpu, dst_size: sizeof(fpu),
47 error)) {
48 if (error.Success())
49 return 0;
50 }
51 }
52 return -1;
53}
54
55int 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(cpu: tid, flavor: EXCRegSet, dst: &exc, dst_size: sizeof(exc),
63 error)) {
64 if (error.Success())
65 return 0;
66 }
67 }
68 return -1;
69}
70
71int 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(cpu: tid, flavor: GPRRegSet, src: &gpr, src_size: sizeof(gpr),
79 error)) {
80 if (error.Success())
81 return 0;
82 }
83 }
84 return -1;
85}
86
87int 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(cpu: tid, flavor: FPURegSet, src: &fpu, src_size: sizeof(fpu),
95 error)) {
96 if (error.Success())
97 return 0;
98 }
99 }
100 return -1;
101}
102
103int 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(cpu: tid, flavor: EXCRegSet, src: &exc, src_size: sizeof(exc),
111 error)) {
112 if (error.Success())
113 return 0;
114 }
115 }
116 return -1;
117}
118

source code of lldb/source/Plugins/Process/MacOSX-Kernel/RegisterContextKDP_x86_64.cpp