summaryrefslogtreecommitdiff
path: root/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/X64/ArchRegisters.h
blob: e7a5a330890071f847bd13b9d6fa2534250a00b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
/** @file
  X64 register defintions needed by debug transfer protocol.

  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php.

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#ifndef _ARCH_REGISTERS_H_
#define _ARCH_REGISTERS_H_

///
/// FXSAVE_STATE (promoted operation)
/// FP / MMX / XMM registers (see fxrstor instruction definition)
///
typedef struct {
  UINT16  Fcw;
  UINT16  Fsw;
  UINT16  Ftw;
  UINT16  Opcode;
  UINT64  Rip;
  UINT64  DataOffset;
  UINT32  Mxcsr;
  UINT32  Mxcsr_Mask;
  UINT8   St0Mm0[10];
  UINT8   Reserved2[6];
  UINT8   St1Mm1[10];
  UINT8   Reserved3[6];
  UINT8   St2Mm2[10];
  UINT8   Reserved4[6];
  UINT8   St3Mm3[10];
  UINT8   Reserved5[6];
  UINT8   St4Mm4[10];
  UINT8   Reserved6[6];
  UINT8   St5Mm5[10];
  UINT8   Reserved7[6];
  UINT8   St6Mm6[10];
  UINT8   Reserved8[6];
  UINT8   St7Mm7[10];
  UINT8   Reserved9[6];
  UINT8   Xmm0[16];
  UINT8   Xmm1[16];
  UINT8   Xmm2[16];
  UINT8   Xmm3[16];
  UINT8   Xmm4[16];
  UINT8   Xmm5[16];
  UINT8   Xmm6[16];
  UINT8   Xmm7[16];
  UINT8   Xmm8[16];
  UINT8   Xmm9[16];
  UINT8   Xmm10[16];
  UINT8   Xmm11[16];
  UINT8   Xmm12[16];
  UINT8   Xmm13[16];
  UINT8   Xmm14[16];
  UINT8   Xmm15[16];
  UINT8   Reserved11[6 * 16];
} DEBUG_DATA_X64_FX_SAVE_STATE;

///
///  x64 processor context definition
///
typedef struct {
  DEBUG_DATA_X64_FX_SAVE_STATE   FxSaveState;
  UINT64                         Dr0;
  UINT64                         Dr1;
  UINT64                         Dr2;
  UINT64                         Dr3;
  UINT64                         Dr6;
  UINT64                         Dr7;
  UINT64                         Eflags;
  UINT64                         Ldtr;
  UINT64                         Tr;
  UINT64                         Gdtr[2];
  UINT64                         Idtr[2];
  UINT64                         Eip;
  UINT64                         Gs;
  UINT64                         Fs;
  UINT64                         Es;
  UINT64                         Ds;
  UINT64                         Cs;
  UINT64                         Ss;
  UINT64                         Cr0;
  UINT64                         Cr1;  /* Reserved */
  UINT64                         Cr2;
  UINT64                         Cr3;
  UINT64                         Cr4;
  UINT64                         Rdi;
  UINT64                         Rsi;
  UINT64                         Rbp;
  UINT64                         Rsp;
  UINT64                         Rdx;
  UINT64                         Rcx;
  UINT64                         Rbx;
  UINT64                         Rax;
  UINT64                         Cr8;
  UINT64                         R8;
  UINT64                         R9;
  UINT64                         R10;
  UINT64                         R11;
  UINT64                         R12;
  UINT64                         R13;
  UINT64                         R14;
  UINT64                         R15;
} DEBUG_DATA_X64_SYSTEM_CONTEXT;


///
///  x64 GROUP register
///
typedef struct {
  UINT16         Cs;
  UINT16         Ds;
  UINT16         Es;
  UINT16         Fs;
  UINT16         Gs;
  UINT16         Ss;
  UINT32         Eflags;
  UINT64         Rbp;
  UINT64         Eip;
  UINT64         Rsp;
  UINT64         Eax;
  UINT64         Rbx;
  UINT64         Rcx;
  UINT64         Rdx;
  UINT64         Rsi;
  UINT64         Rdi;
  UINT64         R8;
  UINT64         R9;
  UINT64         R10;
  UINT64         R11;
  UINT64         R12;
  UINT64         R13;
  UINT64         R14;
  UINT64         R15;
  UINT64         Dr0;
  UINT64         Dr1;
  UINT64         Dr2;
  UINT64         Dr3;
  UINT64         Dr6;
  UINT64         Dr7;
  UINT64         Cr0;
  UINT64         Cr2;
  UINT64         Cr3;
  UINT64         Cr4;
  UINT64         Cr8;
  UINT8          Xmm0[16];
  UINT8          Xmm1[16];
  UINT8          Xmm2[16];
  UINT8          Xmm3[16];
  UINT8          Xmm4[16];
  UINT8          Xmm5[16];
  UINT8          Xmm6[16];
  UINT8          Xmm7[16];
  UINT8          Xmm8[16];
  UINT8          Xmm9[16];
  UINT8          Xmm10[16];
  UINT8          Xmm11[16];
  UINT8          Xmm12[16];
  UINT8          Xmm13[16];
  UINT8          Xmm14[16];
  UINT8          Xmm15[16];
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_X64;

///
///  x64 Segment Limit GROUP register
///
typedef struct {
  UINT64         CsLim;
  UINT64         SsLim;
  UINT64         GsLim;
  UINT64         FsLim;
  UINT64         EsLim;
  UINT64         DsLim;
  UINT64         LdtLim;
  UINT64         TssLim;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGLIM_X64;

///
///  x64 Segment Base GROUP register
///
typedef struct {
  UINT64         CsBas;
  UINT64         SsBas;
  UINT64         GsBas;
  UINT64         FsBas;
  UINT64         EsBas;
  UINT64         DsBas;
  UINT64         LdtBas;
  UINT64         TssBas;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGBASE_X64;

///
///  x64 Segment Base/Limit GROUP register
///
typedef struct {
  UINT64         IdtBas;
  UINT64         IdtLim;
  UINT64         GdtBas;
  UINT64         GdtLim;
  UINT64         CsLim;
  UINT64         SsLim;
  UINT64         GsLim;
  UINT64         FsLim;
  UINT64         EsLim;
  UINT64         DsLim;
  UINT64         LdtLim;
  UINT64         TssLim;
  UINT64         CsBas;
  UINT64         SsBas;
  UINT64         GsBas;
  UINT64         FsBas;
  UINT64         EsBas;
  UINT64         DsBas;
  UINT64         LdtBas;
  UINT64         TssBas;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGMENT_BAS_LIM;

///
///  x64 register GROUP register
///
typedef struct {
  UINT32         Eflags;
  UINT64         Rbp;
  UINT64         Eip;
  UINT64         Rsp;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_GP2;

///
///  x64 general register GROUP register
///
typedef struct {
  UINT64         Eax;
  UINT64         Rbx;
  UINT64         Rcx;
  UINT64         Rdx;
  UINT64         Rsi;
  UINT64         Rdi;
  UINT64         R8;
  UINT64         R9;
  UINT64         R10;
  UINT64         R11;
  UINT64         R12;
  UINT64         R13;
  UINT64         R14;
  UINT64         R15;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_GP;

///
///  x64 Segment GROUP register
///
typedef struct {
  UINT16         Cs;
  UINT16         Ds;
  UINT16         Es;
  UINT16         Fs;
  UINT16         Gs;
  UINT16         Ss;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGMENT;

///
///  x64 Debug Register GROUP register
///
typedef struct {
  UINT64         Dr0;
  UINT64         Dr1;
  UINT64         Dr2;
  UINT64         Dr3;
  UINT64         Dr6;
  UINT64         Dr7;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_DR;

///
///  x64 Control Register GROUP register
///
typedef struct {
  UINT64         Cr0;
  UINT64         Cr2;
  UINT64         Cr3;
  UINT64         Cr4;
  UINT64         Cr8;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_CR;

///
///  x64 XMM Register GROUP register
///
typedef struct {
  UINT8          Xmm0[16];
  UINT8          Xmm1[16];
  UINT8          Xmm2[16];
  UINT8          Xmm3[16];
  UINT8          Xmm4[16];
  UINT8          Xmm5[16];
  UINT8          Xmm6[16];
  UINT8          Xmm7[16];
  UINT8          Xmm8[16];
  UINT8          Xmm9[16];
  UINT8          Xmm10[16];
  UINT8          Xmm11[16];
  UINT8          Xmm12[16];
  UINT8          Xmm13[16];
  UINT8          Xmm14[16];
  UINT8          Xmm15[16];
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_XMM;

///
///  x64 Segment Base GROUP register
///
typedef struct {
  UINT16         Ldtr;
  UINT16         Tr;
  UINT64         Csas;
  UINT64         Ssas;
  UINT64         Gsas;
  UINT64         Fsas;
  UINT64         Esas;
  UINT64         Dsas;
  UINT64         Ldtas;
  UINT64         Tssas;
} DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGMENT_BASES_X64;


#endif