1 | /** @file
|
---|
2 | IA32/x64 architecture specific definitions needed by debug transfer protocol.It is only
|
---|
3 | intended to be used by Debug related module implementation.
|
---|
4 |
|
---|
5 | Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
|
---|
6 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
7 |
|
---|
8 | **/
|
---|
9 |
|
---|
10 | #ifndef __PROCESSOR_CONTEXT_H__
|
---|
11 | #define __PROCESSOR_CONTEXT_H__
|
---|
12 |
|
---|
13 | //
|
---|
14 | // IA-32/x64 processor register index table
|
---|
15 | //
|
---|
16 | #define SOFT_DEBUGGER_REGISTER_DR0 0x00
|
---|
17 | #define SOFT_DEBUGGER_REGISTER_DR1 0x01
|
---|
18 | #define SOFT_DEBUGGER_REGISTER_DR2 0x02
|
---|
19 | #define SOFT_DEBUGGER_REGISTER_DR3 0x03
|
---|
20 | #define SOFT_DEBUGGER_REGISTER_DR6 0x04
|
---|
21 | #define SOFT_DEBUGGER_REGISTER_DR7 0x05
|
---|
22 | #define SOFT_DEBUGGER_REGISTER_EFLAGS 0x06
|
---|
23 | #define SOFT_DEBUGGER_REGISTER_LDTR 0x07
|
---|
24 | #define SOFT_DEBUGGER_REGISTER_TR 0x08
|
---|
25 | #define SOFT_DEBUGGER_REGISTER_GDTR0 0x09 // the low 32bit of GDTR
|
---|
26 | #define SOFT_DEBUGGER_REGISTER_GDTR1 0x0A // the high 32bit of GDTR
|
---|
27 | #define SOFT_DEBUGGER_REGISTER_IDTR0 0x0B // the low 32bit of IDTR
|
---|
28 | #define SOFT_DEBUGGER_REGISTER_IDTR1 0x0C // the high 32bot of IDTR
|
---|
29 | #define SOFT_DEBUGGER_REGISTER_EIP 0x0D
|
---|
30 | #define SOFT_DEBUGGER_REGISTER_GS 0x0E
|
---|
31 | #define SOFT_DEBUGGER_REGISTER_FS 0x0F
|
---|
32 | #define SOFT_DEBUGGER_REGISTER_ES 0x10
|
---|
33 | #define SOFT_DEBUGGER_REGISTER_DS 0x11
|
---|
34 | #define SOFT_DEBUGGER_REGISTER_CS 0x12
|
---|
35 | #define SOFT_DEBUGGER_REGISTER_SS 0x13
|
---|
36 | #define SOFT_DEBUGGER_REGISTER_CR0 0x14
|
---|
37 | #define SOFT_DEBUGGER_REGISTER_CR1 0x15
|
---|
38 | #define SOFT_DEBUGGER_REGISTER_CR2 0x16
|
---|
39 | #define SOFT_DEBUGGER_REGISTER_CR3 0x17
|
---|
40 | #define SOFT_DEBUGGER_REGISTER_CR4 0x18
|
---|
41 |
|
---|
42 | #define SOFT_DEBUGGER_REGISTER_DI 0x19
|
---|
43 | #define SOFT_DEBUGGER_REGISTER_SI 0x1A
|
---|
44 | #define SOFT_DEBUGGER_REGISTER_BP 0x1B
|
---|
45 | #define SOFT_DEBUGGER_REGISTER_SP 0x1C
|
---|
46 | #define SOFT_DEBUGGER_REGISTER_DX 0x1D
|
---|
47 | #define SOFT_DEBUGGER_REGISTER_CX 0x1E
|
---|
48 | #define SOFT_DEBUGGER_REGISTER_BX 0x1F
|
---|
49 | #define SOFT_DEBUGGER_REGISTER_AX 0x20
|
---|
50 |
|
---|
51 | //
|
---|
52 | // This below registers are only available for x64 (not valid for Ia32 mode)
|
---|
53 | //
|
---|
54 | #define SOFT_DEBUGGER_REGISTER_CR8 0x21
|
---|
55 | #define SOFT_DEBUGGER_REGISTER_R8 0x22
|
---|
56 | #define SOFT_DEBUGGER_REGISTER_R9 0x23
|
---|
57 | #define SOFT_DEBUGGER_REGISTER_R10 0x24
|
---|
58 | #define SOFT_DEBUGGER_REGISTER_R11 0x25
|
---|
59 | #define SOFT_DEBUGGER_REGISTER_R12 0x26
|
---|
60 | #define SOFT_DEBUGGER_REGISTER_R13 0x27
|
---|
61 | #define SOFT_DEBUGGER_REGISTER_R14 0x28
|
---|
62 | #define SOFT_DEBUGGER_REGISTER_R15 0x29
|
---|
63 |
|
---|
64 | //
|
---|
65 | // This below registers are FP / MMX / XMM registers
|
---|
66 | //
|
---|
67 | #define SOFT_DEBUGGER_REGISTER_FP_BASE 0x30
|
---|
68 |
|
---|
69 | #define SOFT_DEBUGGER_REGISTER_FP_FCW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x00)
|
---|
70 | #define SOFT_DEBUGGER_REGISTER_FP_FSW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x01)
|
---|
71 | #define SOFT_DEBUGGER_REGISTER_FP_FTW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x02)
|
---|
72 | #define SOFT_DEBUGGER_REGISTER_FP_OPCODE (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x03)
|
---|
73 | #define SOFT_DEBUGGER_REGISTER_FP_EIP (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x04)
|
---|
74 | #define SOFT_DEBUGGER_REGISTER_FP_CS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x05)
|
---|
75 | #define SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x06)
|
---|
76 | #define SOFT_DEBUGGER_REGISTER_FP_DS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x07)
|
---|
77 | #define SOFT_DEBUGGER_REGISTER_FP_MXCSR (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x08)
|
---|
78 | #define SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x09)
|
---|
79 | #define SOFT_DEBUGGER_REGISTER_ST0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0A)
|
---|
80 | #define SOFT_DEBUGGER_REGISTER_ST1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0B)
|
---|
81 | #define SOFT_DEBUGGER_REGISTER_ST2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0C)
|
---|
82 | #define SOFT_DEBUGGER_REGISTER_ST3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0D)
|
---|
83 | #define SOFT_DEBUGGER_REGISTER_ST4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0E)
|
---|
84 | #define SOFT_DEBUGGER_REGISTER_ST5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0F)
|
---|
85 | #define SOFT_DEBUGGER_REGISTER_ST6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x10)
|
---|
86 | #define SOFT_DEBUGGER_REGISTER_ST7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x11)
|
---|
87 | #define SOFT_DEBUGGER_REGISTER_XMM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x12)
|
---|
88 | #define SOFT_DEBUGGER_REGISTER_XMM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x13)
|
---|
89 | #define SOFT_DEBUGGER_REGISTER_XMM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x14)
|
---|
90 | #define SOFT_DEBUGGER_REGISTER_XMM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x15)
|
---|
91 | #define SOFT_DEBUGGER_REGISTER_XMM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x16)
|
---|
92 | #define SOFT_DEBUGGER_REGISTER_XMM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x17)
|
---|
93 | #define SOFT_DEBUGGER_REGISTER_XMM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x18)
|
---|
94 | #define SOFT_DEBUGGER_REGISTER_XMM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x19)
|
---|
95 | #define SOFT_DEBUGGER_REGISTER_XMM8 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1A)
|
---|
96 | #define SOFT_DEBUGGER_REGISTER_XMM9 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1B)
|
---|
97 | #define SOFT_DEBUGGER_REGISTER_XMM10 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1C)
|
---|
98 | #define SOFT_DEBUGGER_REGISTER_XMM11 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1D)
|
---|
99 | #define SOFT_DEBUGGER_REGISTER_XMM12 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1E)
|
---|
100 | #define SOFT_DEBUGGER_REGISTER_XMM13 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1F)
|
---|
101 | #define SOFT_DEBUGGER_REGISTER_XMM14 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x20)
|
---|
102 | #define SOFT_DEBUGGER_REGISTER_XMM15 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x21)
|
---|
103 | #define SOFT_DEBUGGER_REGISTER_MM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x22)
|
---|
104 | #define SOFT_DEBUGGER_REGISTER_MM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x23)
|
---|
105 | #define SOFT_DEBUGGER_REGISTER_MM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x24)
|
---|
106 | #define SOFT_DEBUGGER_REGISTER_MM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x25)
|
---|
107 | #define SOFT_DEBUGGER_REGISTER_MM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x26)
|
---|
108 | #define SOFT_DEBUGGER_REGISTER_MM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x27)
|
---|
109 | #define SOFT_DEBUGGER_REGISTER_MM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x28)
|
---|
110 | #define SOFT_DEBUGGER_REGISTER_MM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x29)
|
---|
111 |
|
---|
112 | #define SOFT_DEBUGGER_REGISTER_MAX SOFT_DEBUGGER_REGISTER_MM7
|
---|
113 |
|
---|
114 | #define SOFT_DEBUGGER_MSR_EFER (0xC0000080)
|
---|
115 |
|
---|
116 | #pragma pack(1)
|
---|
117 |
|
---|
118 | ///
|
---|
119 | /// FXSAVE_STATE
|
---|
120 | /// FP / MMX / XMM registers (see fxrstor instruction definition)
|
---|
121 | ///
|
---|
122 | typedef struct {
|
---|
123 | UINT16 Fcw;
|
---|
124 | UINT16 Fsw;
|
---|
125 | UINT16 Ftw;
|
---|
126 | UINT16 Opcode;
|
---|
127 | UINT32 Eip;
|
---|
128 | UINT16 Cs;
|
---|
129 | UINT16 Reserved1;
|
---|
130 | UINT32 DataOffset;
|
---|
131 | UINT16 Ds;
|
---|
132 | UINT8 Reserved2[2];
|
---|
133 | UINT32 Mxcsr;
|
---|
134 | UINT32 Mxcsr_Mask;
|
---|
135 | UINT8 St0Mm0[10];
|
---|
136 | UINT8 Reserved3[6];
|
---|
137 | UINT8 St1Mm1[10];
|
---|
138 | UINT8 Reserved4[6];
|
---|
139 | UINT8 St2Mm2[10];
|
---|
140 | UINT8 Reserved5[6];
|
---|
141 | UINT8 St3Mm3[10];
|
---|
142 | UINT8 Reserved6[6];
|
---|
143 | UINT8 St4Mm4[10];
|
---|
144 | UINT8 Reserved7[6];
|
---|
145 | UINT8 St5Mm5[10];
|
---|
146 | UINT8 Reserved8[6];
|
---|
147 | UINT8 St6Mm6[10];
|
---|
148 | UINT8 Reserved9[6];
|
---|
149 | UINT8 St7Mm7[10];
|
---|
150 | UINT8 Reserved10[6];
|
---|
151 | UINT8 Xmm0[16];
|
---|
152 | UINT8 Xmm1[16];
|
---|
153 | UINT8 Xmm2[16];
|
---|
154 | UINT8 Xmm3[16];
|
---|
155 | UINT8 Xmm4[16];
|
---|
156 | UINT8 Xmm5[16];
|
---|
157 | UINT8 Xmm6[16];
|
---|
158 | UINT8 Xmm7[16];
|
---|
159 | UINT8 Reserved11[14 * 16];
|
---|
160 | } DEBUG_DATA_IA32_FX_SAVE_STATE;
|
---|
161 |
|
---|
162 | ///
|
---|
163 | /// IA-32 processor context definition
|
---|
164 | ///
|
---|
165 | typedef struct {
|
---|
166 | UINT32 ExceptionData;
|
---|
167 | DEBUG_DATA_IA32_FX_SAVE_STATE FxSaveState;
|
---|
168 | UINT32 Dr0;
|
---|
169 | UINT32 Dr1;
|
---|
170 | UINT32 Dr2;
|
---|
171 | UINT32 Dr3;
|
---|
172 | UINT32 Dr6;
|
---|
173 | UINT32 Dr7;
|
---|
174 | UINT32 Eflags;
|
---|
175 | UINT32 Ldtr;
|
---|
176 | UINT32 Tr;
|
---|
177 | UINT32 Gdtr[2];
|
---|
178 | UINT32 Idtr[2];
|
---|
179 | UINT32 Eip;
|
---|
180 | UINT32 Gs;
|
---|
181 | UINT32 Fs;
|
---|
182 | UINT32 Es;
|
---|
183 | UINT32 Ds;
|
---|
184 | UINT32 Cs;
|
---|
185 | UINT32 Ss;
|
---|
186 | UINT32 Cr0;
|
---|
187 | UINT32 Cr1; ///< Reserved
|
---|
188 | UINT32 Cr2;
|
---|
189 | UINT32 Cr3;
|
---|
190 | UINT32 Cr4;
|
---|
191 | UINT32 Edi;
|
---|
192 | UINT32 Esi;
|
---|
193 | UINT32 Ebp;
|
---|
194 | UINT32 Esp;
|
---|
195 | UINT32 Edx;
|
---|
196 | UINT32 Ecx;
|
---|
197 | UINT32 Ebx;
|
---|
198 | UINT32 Eax;
|
---|
199 | } DEBUG_DATA_IA32_SYSTEM_CONTEXT;
|
---|
200 |
|
---|
201 | ///
|
---|
202 | /// FXSAVE_STATE
|
---|
203 | /// FP / MMX / XMM registers (see fxrstor instruction definition)
|
---|
204 | ///
|
---|
205 | typedef struct {
|
---|
206 | UINT16 Fcw;
|
---|
207 | UINT16 Fsw;
|
---|
208 | UINT16 Ftw;
|
---|
209 | UINT16 Opcode;
|
---|
210 | UINT32 Eip;
|
---|
211 | UINT16 Cs;
|
---|
212 | UINT16 Reserved1;
|
---|
213 | UINT32 DataOffset;
|
---|
214 | UINT16 Ds;
|
---|
215 | UINT8 Reserved2[2];
|
---|
216 | UINT32 Mxcsr;
|
---|
217 | UINT32 Mxcsr_Mask;
|
---|
218 | UINT8 St0Mm0[10];
|
---|
219 | UINT8 Reserved3[6];
|
---|
220 | UINT8 St1Mm1[10];
|
---|
221 | UINT8 Reserved4[6];
|
---|
222 | UINT8 St2Mm2[10];
|
---|
223 | UINT8 Reserved5[6];
|
---|
224 | UINT8 St3Mm3[10];
|
---|
225 | UINT8 Reserved6[6];
|
---|
226 | UINT8 St4Mm4[10];
|
---|
227 | UINT8 Reserved7[6];
|
---|
228 | UINT8 St5Mm5[10];
|
---|
229 | UINT8 Reserved8[6];
|
---|
230 | UINT8 St6Mm6[10];
|
---|
231 | UINT8 Reserved9[6];
|
---|
232 | UINT8 St7Mm7[10];
|
---|
233 | UINT8 Reserved10[6];
|
---|
234 | UINT8 Xmm0[16];
|
---|
235 | UINT8 Xmm1[16];
|
---|
236 | UINT8 Xmm2[16];
|
---|
237 | UINT8 Xmm3[16];
|
---|
238 | UINT8 Xmm4[16];
|
---|
239 | UINT8 Xmm5[16];
|
---|
240 | UINT8 Xmm6[16];
|
---|
241 | UINT8 Xmm7[16];
|
---|
242 | UINT8 Xmm8[16];
|
---|
243 | UINT8 Xmm9[16];
|
---|
244 | UINT8 Xmm10[16];
|
---|
245 | UINT8 Xmm11[16];
|
---|
246 | UINT8 Xmm12[16];
|
---|
247 | UINT8 Xmm13[16];
|
---|
248 | UINT8 Xmm14[16];
|
---|
249 | UINT8 Xmm15[16];
|
---|
250 | UINT8 Reserved11[6 * 16];
|
---|
251 | } DEBUG_DATA_X64_FX_SAVE_STATE;
|
---|
252 |
|
---|
253 | ///
|
---|
254 | /// x64 processor context definition
|
---|
255 | ///
|
---|
256 | typedef struct {
|
---|
257 | UINT64 ExceptionData;
|
---|
258 | DEBUG_DATA_X64_FX_SAVE_STATE FxSaveState;
|
---|
259 | UINT64 Dr0;
|
---|
260 | UINT64 Dr1;
|
---|
261 | UINT64 Dr2;
|
---|
262 | UINT64 Dr3;
|
---|
263 | UINT64 Dr6;
|
---|
264 | UINT64 Dr7;
|
---|
265 | UINT64 Eflags;
|
---|
266 | UINT64 Ldtr;
|
---|
267 | UINT64 Tr;
|
---|
268 | UINT64 Gdtr[2];
|
---|
269 | UINT64 Idtr[2];
|
---|
270 | UINT64 Eip;
|
---|
271 | UINT64 Gs;
|
---|
272 | UINT64 Fs;
|
---|
273 | UINT64 Es;
|
---|
274 | UINT64 Ds;
|
---|
275 | UINT64 Cs;
|
---|
276 | UINT64 Ss;
|
---|
277 | UINT64 Cr0;
|
---|
278 | UINT64 Cr1; ///< Reserved
|
---|
279 | UINT64 Cr2;
|
---|
280 | UINT64 Cr3;
|
---|
281 | UINT64 Cr4;
|
---|
282 | UINT64 Rdi;
|
---|
283 | UINT64 Rsi;
|
---|
284 | UINT64 Rbp;
|
---|
285 | UINT64 Rsp;
|
---|
286 | UINT64 Rdx;
|
---|
287 | UINT64 Rcx;
|
---|
288 | UINT64 Rbx;
|
---|
289 | UINT64 Rax;
|
---|
290 | UINT64 Cr8;
|
---|
291 | UINT64 R8;
|
---|
292 | UINT64 R9;
|
---|
293 | UINT64 R10;
|
---|
294 | UINT64 R11;
|
---|
295 | UINT64 R12;
|
---|
296 | UINT64 R13;
|
---|
297 | UINT64 R14;
|
---|
298 | UINT64 R15;
|
---|
299 | } DEBUG_DATA_X64_SYSTEM_CONTEXT;
|
---|
300 |
|
---|
301 | #pragma pack()
|
---|
302 |
|
---|
303 | #endif
|
---|