2 IA32/x64 architecture specific defintions needed by debug transfer protocol.It is only
3 intended to be used by Debug related module implementation.
5 Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #ifndef __PROCESSOR_CONTEXT_H__
17 #define __PROCESSOR_CONTEXT_H__
20 // IA-32/x64 processor register index table
22 #define SOFT_DEBUGGER_REGISTER_DR0 0x00
23 #define SOFT_DEBUGGER_REGISTER_DR1 0x01
24 #define SOFT_DEBUGGER_REGISTER_DR2 0x02
25 #define SOFT_DEBUGGER_REGISTER_DR3 0x03
26 #define SOFT_DEBUGGER_REGISTER_DR6 0x04
27 #define SOFT_DEBUGGER_REGISTER_DR7 0x05
28 #define SOFT_DEBUGGER_REGISTER_EFLAGS 0x06
29 #define SOFT_DEBUGGER_REGISTER_LDTR 0x07
30 #define SOFT_DEBUGGER_REGISTER_TR 0x08
31 #define SOFT_DEBUGGER_REGISTER_GDTR0 0x09 // the low 32bit of GDTR
32 #define SOFT_DEBUGGER_REGISTER_GDTR1 0x0A // the high 32bit of GDTR
33 #define SOFT_DEBUGGER_REGISTER_IDTR0 0x0B // the low 32bit of IDTR
34 #define SOFT_DEBUGGER_REGISTER_IDTR1 0x0C // the high 32bot of IDTR
35 #define SOFT_DEBUGGER_REGISTER_EIP 0x0D
36 #define SOFT_DEBUGGER_REGISTER_GS 0x0E
37 #define SOFT_DEBUGGER_REGISTER_FS 0x0F
38 #define SOFT_DEBUGGER_REGISTER_ES 0x10
39 #define SOFT_DEBUGGER_REGISTER_DS 0x11
40 #define SOFT_DEBUGGER_REGISTER_CS 0x12
41 #define SOFT_DEBUGGER_REGISTER_SS 0x13
42 #define SOFT_DEBUGGER_REGISTER_CR0 0x14
43 #define SOFT_DEBUGGER_REGISTER_CR1 0x15
44 #define SOFT_DEBUGGER_REGISTER_CR2 0x16
45 #define SOFT_DEBUGGER_REGISTER_CR3 0x17
46 #define SOFT_DEBUGGER_REGISTER_CR4 0x18
48 #define SOFT_DEBUGGER_REGISTER_DI 0x19
49 #define SOFT_DEBUGGER_REGISTER_SI 0x1A
50 #define SOFT_DEBUGGER_REGISTER_BP 0x1B
51 #define SOFT_DEBUGGER_REGISTER_SP 0x1C
52 #define SOFT_DEBUGGER_REGISTER_DX 0x1D
53 #define SOFT_DEBUGGER_REGISTER_CX 0x1E
54 #define SOFT_DEBUGGER_REGISTER_BX 0x1F
55 #define SOFT_DEBUGGER_REGISTER_AX 0x20
58 // This below registers are only available for x64 (not valid for Ia32 mode)
60 #define SOFT_DEBUGGER_REGISTER_CR8 0x21
61 #define SOFT_DEBUGGER_REGISTER_R8 0x22
62 #define SOFT_DEBUGGER_REGISTER_R9 0x23
63 #define SOFT_DEBUGGER_REGISTER_R10 0x24
64 #define SOFT_DEBUGGER_REGISTER_R11 0x25
65 #define SOFT_DEBUGGER_REGISTER_R12 0x26
66 #define SOFT_DEBUGGER_REGISTER_R13 0x27
67 #define SOFT_DEBUGGER_REGISTER_R14 0x28
68 #define SOFT_DEBUGGER_REGISTER_R15 0x29
71 // This below registers are FP / MMX / XMM registers
73 #define SOFT_DEBUGGER_REGISTER_FP_BASE 0x30
75 #define SOFT_DEBUGGER_REGISTER_FP_FCW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x00)
76 #define SOFT_DEBUGGER_REGISTER_FP_FSW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x01)
77 #define SOFT_DEBUGGER_REGISTER_FP_FTW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x02)
78 #define SOFT_DEBUGGER_REGISTER_FP_OPCODE (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x03)
79 #define SOFT_DEBUGGER_REGISTER_FP_EIP (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x04)
80 #define SOFT_DEBUGGER_REGISTER_FP_CS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x05)
81 #define SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x06)
82 #define SOFT_DEBUGGER_REGISTER_FP_DS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x07)
83 #define SOFT_DEBUGGER_REGISTER_FP_MXCSR (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x08)
84 #define SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x09)
85 #define SOFT_DEBUGGER_REGISTER_ST0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0A)
86 #define SOFT_DEBUGGER_REGISTER_ST1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0B)
87 #define SOFT_DEBUGGER_REGISTER_ST2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0C)
88 #define SOFT_DEBUGGER_REGISTER_ST3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0D)
89 #define SOFT_DEBUGGER_REGISTER_ST4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0E)
90 #define SOFT_DEBUGGER_REGISTER_ST5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0F)
91 #define SOFT_DEBUGGER_REGISTER_ST6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x10)
92 #define SOFT_DEBUGGER_REGISTER_ST7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x11)
93 #define SOFT_DEBUGGER_REGISTER_XMM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x12)
94 #define SOFT_DEBUGGER_REGISTER_XMM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x13)
95 #define SOFT_DEBUGGER_REGISTER_XMM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x14)
96 #define SOFT_DEBUGGER_REGISTER_XMM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x15)
97 #define SOFT_DEBUGGER_REGISTER_XMM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x16)
98 #define SOFT_DEBUGGER_REGISTER_XMM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x17)
99 #define SOFT_DEBUGGER_REGISTER_XMM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x18)
100 #define SOFT_DEBUGGER_REGISTER_XMM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x19)
101 #define SOFT_DEBUGGER_REGISTER_XMM8 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1A)
102 #define SOFT_DEBUGGER_REGISTER_XMM9 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1B)
103 #define SOFT_DEBUGGER_REGISTER_XMM10 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1C)
104 #define SOFT_DEBUGGER_REGISTER_XMM11 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1D)
105 #define SOFT_DEBUGGER_REGISTER_XMM12 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1E)
106 #define SOFT_DEBUGGER_REGISTER_XMM13 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1F)
107 #define SOFT_DEBUGGER_REGISTER_XMM14 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x20)
108 #define SOFT_DEBUGGER_REGISTER_XMM15 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x21)
109 #define SOFT_DEBUGGER_REGISTER_MM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x22)
110 #define SOFT_DEBUGGER_REGISTER_MM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x23)
111 #define SOFT_DEBUGGER_REGISTER_MM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x24)
112 #define SOFT_DEBUGGER_REGISTER_MM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x25)
113 #define SOFT_DEBUGGER_REGISTER_MM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x26)
114 #define SOFT_DEBUGGER_REGISTER_MM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x27)
115 #define SOFT_DEBUGGER_REGISTER_MM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x28)
116 #define SOFT_DEBUGGER_REGISTER_MM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x29)
118 #define SOFT_DEBUGGER_REGISTER_MAX SOFT_DEBUGGER_REGISTER_MM7
120 #define SOFT_DEBUGGER_MSR_EFER (0xC0000080)
126 /// FP / MMX / XMM registers (see fxrstor instruction definition)
165 UINT8 Reserved11
[14 * 16];
166 } DEBUG_DATA_IA32_FX_SAVE_STATE
;
169 /// IA-32 processor context definition
172 UINT32 ExceptionData
;
173 DEBUG_DATA_IA32_FX_SAVE_STATE FxSaveState
;
193 UINT32 Cr1
; ///< Reserved
205 } DEBUG_DATA_IA32_SYSTEM_CONTEXT
;
209 /// FP / MMX / XMM registers (see fxrstor instruction definition)
256 UINT8 Reserved11
[6 * 16];
257 } DEBUG_DATA_X64_FX_SAVE_STATE
;
260 /// x64 processor context definition
263 UINT64 ExceptionData
;
264 DEBUG_DATA_X64_FX_SAVE_STATE FxSaveState
;
284 UINT64 Cr1
; ///< Reserved
305 } DEBUG_DATA_X64_SYSTEM_CONTEXT
;