]> git.proxmox.com Git - mirror_edk2.git/blob - SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/X64/ArchRegisters.h
96753919569fcda87cfc3b4b9d0b8412c10df975
[mirror_edk2.git] / SourceLevelDebugPkg / Library / DebugAgent / DebugAgentCommon / X64 / ArchRegisters.h
1 /** @file
2 X64 register defintions needed by debug transfer protocol.
3
4 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _ARCH_REGISTERS_H_
16 #define _ARCH_REGISTERS_H_
17
18 #pragma pack(1)
19
20 ///
21 /// FXSAVE_STATE (promoted operation)
22 /// FP / MMX / XMM registers (see fxrstor instruction definition)
23 ///
24 typedef struct {
25 UINT16 Fcw;
26 UINT16 Fsw;
27 UINT16 Ftw;
28 UINT16 Opcode;
29 UINT64 Rip;
30 UINT64 DataOffset;
31 UINT32 Mxcsr;
32 UINT32 Mxcsr_Mask;
33 UINT8 St0Mm0[10];
34 UINT8 Reserved2[6];
35 UINT8 St1Mm1[10];
36 UINT8 Reserved3[6];
37 UINT8 St2Mm2[10];
38 UINT8 Reserved4[6];
39 UINT8 St3Mm3[10];
40 UINT8 Reserved5[6];
41 UINT8 St4Mm4[10];
42 UINT8 Reserved6[6];
43 UINT8 St5Mm5[10];
44 UINT8 Reserved7[6];
45 UINT8 St6Mm6[10];
46 UINT8 Reserved8[6];
47 UINT8 St7Mm7[10];
48 UINT8 Reserved9[6];
49 UINT8 Xmm0[16];
50 UINT8 Xmm1[16];
51 UINT8 Xmm2[16];
52 UINT8 Xmm3[16];
53 UINT8 Xmm4[16];
54 UINT8 Xmm5[16];
55 UINT8 Xmm6[16];
56 UINT8 Xmm7[16];
57 UINT8 Xmm8[16];
58 UINT8 Xmm9[16];
59 UINT8 Xmm10[16];
60 UINT8 Xmm11[16];
61 UINT8 Xmm12[16];
62 UINT8 Xmm13[16];
63 UINT8 Xmm14[16];
64 UINT8 Xmm15[16];
65 UINT8 Reserved11[6 * 16];
66 } DEBUG_DATA_X64_FX_SAVE_STATE;
67
68 ///
69 /// x64 processor context definition
70 ///
71 typedef struct {
72 DEBUG_DATA_X64_FX_SAVE_STATE FxSaveState;
73 UINT64 Dr0;
74 UINT64 Dr1;
75 UINT64 Dr2;
76 UINT64 Dr3;
77 UINT64 Dr6;
78 UINT64 Dr7;
79 UINT64 Eflags;
80 UINT64 Ldtr;
81 UINT64 Tr;
82 UINT64 Gdtr[2];
83 UINT64 Idtr[2];
84 UINT64 Eip;
85 UINT64 Gs;
86 UINT64 Fs;
87 UINT64 Es;
88 UINT64 Ds;
89 UINT64 Cs;
90 UINT64 Ss;
91 UINT64 Cr0;
92 UINT64 Cr1; /* Reserved */
93 UINT64 Cr2;
94 UINT64 Cr3;
95 UINT64 Cr4;
96 UINT64 Rdi;
97 UINT64 Rsi;
98 UINT64 Rbp;
99 UINT64 Rsp;
100 UINT64 Rdx;
101 UINT64 Rcx;
102 UINT64 Rbx;
103 UINT64 Rax;
104 UINT64 Cr8;
105 UINT64 R8;
106 UINT64 R9;
107 UINT64 R10;
108 UINT64 R11;
109 UINT64 R12;
110 UINT64 R13;
111 UINT64 R14;
112 UINT64 R15;
113 } DEBUG_DATA_X64_SYSTEM_CONTEXT;
114
115
116 ///
117 /// x64 GROUP register
118 ///
119 typedef struct {
120 UINT16 Cs;
121 UINT16 Ds;
122 UINT16 Es;
123 UINT16 Fs;
124 UINT16 Gs;
125 UINT16 Ss;
126 UINT32 Eflags;
127 UINT64 Rbp;
128 UINT64 Eip;
129 UINT64 Rsp;
130 UINT64 Eax;
131 UINT64 Rbx;
132 UINT64 Rcx;
133 UINT64 Rdx;
134 UINT64 Rsi;
135 UINT64 Rdi;
136 UINT64 R8;
137 UINT64 R9;
138 UINT64 R10;
139 UINT64 R11;
140 UINT64 R12;
141 UINT64 R13;
142 UINT64 R14;
143 UINT64 R15;
144 UINT64 Dr0;
145 UINT64 Dr1;
146 UINT64 Dr2;
147 UINT64 Dr3;
148 UINT64 Dr6;
149 UINT64 Dr7;
150 UINT64 Cr0;
151 UINT64 Cr2;
152 UINT64 Cr3;
153 UINT64 Cr4;
154 UINT64 Cr8;
155 UINT8 Xmm0[16];
156 UINT8 Xmm1[16];
157 UINT8 Xmm2[16];
158 UINT8 Xmm3[16];
159 UINT8 Xmm4[16];
160 UINT8 Xmm5[16];
161 UINT8 Xmm6[16];
162 UINT8 Xmm7[16];
163 UINT8 Xmm8[16];
164 UINT8 Xmm9[16];
165 UINT8 Xmm10[16];
166 UINT8 Xmm11[16];
167 UINT8 Xmm12[16];
168 UINT8 Xmm13[16];
169 UINT8 Xmm14[16];
170 UINT8 Xmm15[16];
171 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_X64;
172
173 ///
174 /// x64 Segment Limit GROUP register
175 ///
176 typedef struct {
177 UINT64 CsLim;
178 UINT64 SsLim;
179 UINT64 GsLim;
180 UINT64 FsLim;
181 UINT64 EsLim;
182 UINT64 DsLim;
183 UINT64 LdtLim;
184 UINT64 TssLim;
185 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGLIM_X64;
186
187 ///
188 /// x64 Segment Base GROUP register
189 ///
190 typedef struct {
191 UINT64 CsBas;
192 UINT64 SsBas;
193 UINT64 GsBas;
194 UINT64 FsBas;
195 UINT64 EsBas;
196 UINT64 DsBas;
197 UINT64 LdtBas;
198 UINT64 TssBas;
199 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGBASE_X64;
200
201 ///
202 /// x64 Segment Base/Limit GROUP register
203 ///
204 typedef struct {
205 UINT64 IdtBas;
206 UINT64 IdtLim;
207 UINT64 GdtBas;
208 UINT64 GdtLim;
209 UINT64 CsLim;
210 UINT64 SsLim;
211 UINT64 GsLim;
212 UINT64 FsLim;
213 UINT64 EsLim;
214 UINT64 DsLim;
215 UINT64 LdtLim;
216 UINT64 TssLim;
217 UINT64 CsBas;
218 UINT64 SsBas;
219 UINT64 GsBas;
220 UINT64 FsBas;
221 UINT64 EsBas;
222 UINT64 DsBas;
223 UINT64 LdtBas;
224 UINT64 TssBas;
225 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGMENT_BAS_LIM;
226
227 ///
228 /// x64 register GROUP register
229 ///
230 typedef struct {
231 UINT32 Eflags;
232 UINT64 Rbp;
233 UINT64 Eip;
234 UINT64 Rsp;
235 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_GP2;
236
237 ///
238 /// x64 general register GROUP register
239 ///
240 typedef struct {
241 UINT64 Eax;
242 UINT64 Rbx;
243 UINT64 Rcx;
244 UINT64 Rdx;
245 UINT64 Rsi;
246 UINT64 Rdi;
247 UINT64 R8;
248 UINT64 R9;
249 UINT64 R10;
250 UINT64 R11;
251 UINT64 R12;
252 UINT64 R13;
253 UINT64 R14;
254 UINT64 R15;
255 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_GP;
256
257 ///
258 /// x64 Segment GROUP register
259 ///
260 typedef struct {
261 UINT16 Cs;
262 UINT16 Ds;
263 UINT16 Es;
264 UINT16 Fs;
265 UINT16 Gs;
266 UINT16 Ss;
267 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGMENT;
268
269 ///
270 /// x64 Debug Register GROUP register
271 ///
272 typedef struct {
273 UINT64 Dr0;
274 UINT64 Dr1;
275 UINT64 Dr2;
276 UINT64 Dr3;
277 UINT64 Dr6;
278 UINT64 Dr7;
279 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_DR;
280
281 ///
282 /// x64 Control Register GROUP register
283 ///
284 typedef struct {
285 UINT64 Cr0;
286 UINT64 Cr2;
287 UINT64 Cr3;
288 UINT64 Cr4;
289 UINT64 Cr8;
290 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_CR;
291
292 ///
293 /// x64 XMM Register GROUP register
294 ///
295 typedef struct {
296 UINT8 Xmm0[16];
297 UINT8 Xmm1[16];
298 UINT8 Xmm2[16];
299 UINT8 Xmm3[16];
300 UINT8 Xmm4[16];
301 UINT8 Xmm5[16];
302 UINT8 Xmm6[16];
303 UINT8 Xmm7[16];
304 UINT8 Xmm8[16];
305 UINT8 Xmm9[16];
306 UINT8 Xmm10[16];
307 UINT8 Xmm11[16];
308 UINT8 Xmm12[16];
309 UINT8 Xmm13[16];
310 UINT8 Xmm14[16];
311 UINT8 Xmm15[16];
312 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_XMM;
313
314 ///
315 /// x64 Segment Base GROUP register
316 ///
317 typedef struct {
318 UINT16 Ldtr;
319 UINT16 Tr;
320 UINT64 Csas;
321 UINT64 Ssas;
322 UINT64 Gsas;
323 UINT64 Fsas;
324 UINT64 Esas;
325 UINT64 Dsas;
326 UINT64 Ldtas;
327 UINT64 Tssas;
328 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGMENT_BASES_X64;
329
330 #pragma pack()
331
332 #endif