Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_powerpc.cpp
96381 views
1
//===-- RegisterContextFreeBSD_powerpc.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 "RegisterContextFreeBSD_powerpc.h"
10
#include "RegisterContextPOSIX_powerpc.h"
11
#include <vector>
12
13
using namespace lldb_private;
14
using namespace lldb;
15
16
// http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h
17
typedef struct _GPR64 {
18
uint64_t r0;
19
uint64_t r1;
20
uint64_t r2;
21
uint64_t r3;
22
uint64_t r4;
23
uint64_t r5;
24
uint64_t r6;
25
uint64_t r7;
26
uint64_t r8;
27
uint64_t r9;
28
uint64_t r10;
29
uint64_t r11;
30
uint64_t r12;
31
uint64_t r13;
32
uint64_t r14;
33
uint64_t r15;
34
uint64_t r16;
35
uint64_t r17;
36
uint64_t r18;
37
uint64_t r19;
38
uint64_t r20;
39
uint64_t r21;
40
uint64_t r22;
41
uint64_t r23;
42
uint64_t r24;
43
uint64_t r25;
44
uint64_t r26;
45
uint64_t r27;
46
uint64_t r28;
47
uint64_t r29;
48
uint64_t r30;
49
uint64_t r31;
50
uint64_t lr;
51
uint64_t cr;
52
uint64_t xer;
53
uint64_t ctr;
54
uint64_t pc;
55
} GPR64;
56
57
typedef struct _GPR32 {
58
uint32_t r0;
59
uint32_t r1;
60
uint32_t r2;
61
uint32_t r3;
62
uint32_t r4;
63
uint32_t r5;
64
uint32_t r6;
65
uint32_t r7;
66
uint32_t r8;
67
uint32_t r9;
68
uint32_t r10;
69
uint32_t r11;
70
uint32_t r12;
71
uint32_t r13;
72
uint32_t r14;
73
uint32_t r15;
74
uint32_t r16;
75
uint32_t r17;
76
uint32_t r18;
77
uint32_t r19;
78
uint32_t r20;
79
uint32_t r21;
80
uint32_t r22;
81
uint32_t r23;
82
uint32_t r24;
83
uint32_t r25;
84
uint32_t r26;
85
uint32_t r27;
86
uint32_t r28;
87
uint32_t r29;
88
uint32_t r30;
89
uint32_t r31;
90
uint32_t lr;
91
uint32_t cr;
92
uint32_t xer;
93
uint32_t ctr;
94
uint32_t pc;
95
} GPR32;
96
97
typedef struct _FPR {
98
uint64_t f0;
99
uint64_t f1;
100
uint64_t f2;
101
uint64_t f3;
102
uint64_t f4;
103
uint64_t f5;
104
uint64_t f6;
105
uint64_t f7;
106
uint64_t f8;
107
uint64_t f9;
108
uint64_t f10;
109
uint64_t f11;
110
uint64_t f12;
111
uint64_t f13;
112
uint64_t f14;
113
uint64_t f15;
114
uint64_t f16;
115
uint64_t f17;
116
uint64_t f18;
117
uint64_t f19;
118
uint64_t f20;
119
uint64_t f21;
120
uint64_t f22;
121
uint64_t f23;
122
uint64_t f24;
123
uint64_t f25;
124
uint64_t f26;
125
uint64_t f27;
126
uint64_t f28;
127
uint64_t f29;
128
uint64_t f30;
129
uint64_t f31;
130
uint64_t fpscr;
131
} FPR;
132
133
typedef struct _VMX {
134
uint32_t v0[4];
135
uint32_t v1[4];
136
uint32_t v2[4];
137
uint32_t v3[4];
138
uint32_t v4[4];
139
uint32_t v5[4];
140
uint32_t v6[4];
141
uint32_t v7[4];
142
uint32_t v8[4];
143
uint32_t v9[4];
144
uint32_t v10[4];
145
uint32_t v11[4];
146
uint32_t v12[4];
147
uint32_t v13[4];
148
uint32_t v14[4];
149
uint32_t v15[4];
150
uint32_t v16[4];
151
uint32_t v17[4];
152
uint32_t v18[4];
153
uint32_t v19[4];
154
uint32_t v20[4];
155
uint32_t v21[4];
156
uint32_t v22[4];
157
uint32_t v23[4];
158
uint32_t v24[4];
159
uint32_t v25[4];
160
uint32_t v26[4];
161
uint32_t v27[4];
162
uint32_t v28[4];
163
uint32_t v29[4];
164
uint32_t v30[4];
165
uint32_t v31[4];
166
uint32_t pad[2];
167
uint32_t vrsave;
168
uint32_t vscr;
169
} VMX;
170
171
// Include RegisterInfos_powerpc to declare our g_register_infos_powerpc
172
// structure.
173
#define DECLARE_REGISTER_INFOS_POWERPC_STRUCT
174
#include "RegisterInfos_powerpc.h"
175
#undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT
176
177
RegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc(
178
const ArchSpec &target_arch)
179
: RegisterInfoInterface(target_arch) {}
180
181
RegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() = default;
182
183
size_t RegisterContextFreeBSD_powerpc::GetGPRSize() const {
184
// This is an 'abstract' base, so no GPR struct.
185
return 0;
186
}
187
188
const RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const {
189
llvm_unreachable("Abstract class!");
190
return nullptr;
191
}
192
193
uint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; }
194
195
RegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32(
196
const ArchSpec &target_arch)
197
: RegisterContextFreeBSD_powerpc(target_arch) {}
198
199
RegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() = default;
200
201
size_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const {
202
return sizeof(GPR32);
203
}
204
205
const RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const {
206
return g_register_infos_powerpc32;
207
}
208
209
uint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const {
210
return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) /
211
sizeof(g_register_infos_powerpc32[0]));
212
}
213
214
RegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64(
215
const ArchSpec &target_arch)
216
: RegisterContextFreeBSD_powerpc(target_arch) {}
217
218
RegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() = default;
219
220
size_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const {
221
return sizeof(GPR64);
222
}
223
224
const RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const {
225
if (GetTargetArchitecture().GetMachine() == llvm::Triple::ppc)
226
return g_register_infos_powerpc64_32;
227
return g_register_infos_powerpc64;
228
}
229
230
uint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const {
231
return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) /
232
sizeof(g_register_infos_powerpc64[0]));
233
}
234
235