]> git.proxmox.com Git - mirror_edk2.git/blob - SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/Ia32/ArchRegisters.h
SourceLevelDebugPkg: Pack CPU context structures
[mirror_edk2.git] / SourceLevelDebugPkg / Library / DebugAgent / DebugAgentCommon / Ia32 / ArchRegisters.h
1 /** @file
2 IA32 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
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 UINT32 Eip;
30 UINT16 Cs;
31 UINT16 Reserved1;
32 UINT32 DataOffset;
33 UINT16 Ds;
34 UINT8 Reserved2[2];
35 UINT32 Mxcsr;
36 UINT32 Mxcsr_Mask;
37 UINT8 St0Mm0[10];
38 UINT8 Reserved3[6];
39 UINT8 St1Mm1[10];
40 UINT8 Reserved4[6];
41 UINT8 St2Mm2[10];
42 UINT8 Reserved5[6];
43 UINT8 St3Mm3[10];
44 UINT8 Reserved6[6];
45 UINT8 St4Mm4[10];
46 UINT8 Reserved7[6];
47 UINT8 St5Mm5[10];
48 UINT8 Reserved8[6];
49 UINT8 St6Mm6[10];
50 UINT8 Reserved9[6];
51 UINT8 St7Mm7[10];
52 UINT8 Reserved10[6];
53 UINT8 Xmm0[16];
54 UINT8 Xmm1[16];
55 UINT8 Xmm2[16];
56 UINT8 Xmm3[16];
57 UINT8 Xmm4[16];
58 UINT8 Xmm5[16];
59 UINT8 Xmm6[16];
60 UINT8 Xmm7[16];
61 UINT8 Reserved11[14 * 16];
62 } DEBUG_DATA_IA32_FX_SAVE_STATE;
63
64 ///
65 /// IA-32 processor context definition
66 ///
67 typedef struct {
68 DEBUG_DATA_IA32_FX_SAVE_STATE FxSaveState;
69 UINT32 Dr0;
70 UINT32 Dr1;
71 UINT32 Dr2;
72 UINT32 Dr3;
73 UINT32 Dr6;
74 UINT32 Dr7;
75 UINT32 Eflags;
76 UINT32 Ldtr;
77 UINT32 Tr;
78 UINT32 Gdtr[2];
79 UINT32 Idtr[2];
80 UINT32 Eip;
81 UINT32 Gs;
82 UINT32 Fs;
83 UINT32 Es;
84 UINT32 Ds;
85 UINT32 Cs;
86 UINT32 Ss;
87 UINT32 Cr0;
88 UINT32 Cr1; ///< Reserved
89 UINT32 Cr2;
90 UINT32 Cr3;
91 UINT32 Cr4;
92 UINT32 Edi;
93 UINT32 Esi;
94 UINT32 Ebp;
95 UINT32 Esp;
96 UINT32 Edx;
97 UINT32 Ecx;
98 UINT32 Ebx;
99 UINT32 Eax;
100 } DEBUG_DATA_IA32_SYSTEM_CONTEXT;
101
102 ///
103 /// IA32 GROUP register
104 ///
105 typedef struct {
106 UINT16 Cs;
107 UINT16 Ds;
108 UINT16 Es;
109 UINT16 Fs;
110 UINT16 Gs;
111 UINT16 Ss;
112 UINT32 Eflags;
113 UINT32 Ebp;
114 UINT32 Eip;
115 UINT32 Esp;
116 UINT32 Eax;
117 UINT32 Ebx;
118 UINT32 Ecx;
119 UINT32 Edx;
120 UINT32 Esi;
121 UINT32 Edi;
122 UINT32 Dr0;
123 UINT32 Dr1;
124 UINT32 Dr2;
125 UINT32 Dr3;
126 UINT32 Dr6;
127 UINT32 Dr7;
128 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_IA32;
129
130 ///
131 /// IA32 Segment Limit GROUP register
132 ///
133 typedef struct {
134 UINT32 CsLim;
135 UINT32 SsLim;
136 UINT32 GsLim;
137 UINT32 FsLim;
138 UINT32 EsLim;
139 UINT32 DsLim;
140 UINT32 LdtLim;
141 UINT32 TssLim;
142 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGLIM_IA32;
143
144 ///
145 /// IA32 Segment Base GROUP register
146 ///
147 typedef struct {
148 UINT32 CsBas;
149 UINT32 SsBas;
150 UINT32 GsBas;
151 UINT32 FsBas;
152 UINT32 EsBas;
153 UINT32 DsBas;
154 UINT32 LdtBas;
155 UINT32 TssBas;
156 } DEBUG_DATA_REPONSE_READ_REGISTER_GROUP_SEGBASE_IA32;
157
158 #pragma pack()
159
160 #endif