VirtualBox

source: vbox/trunk/include/VBox/vmm/cpumctx-v1_6.h@ 68468

Last change on this file since 68468 was 62476, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property svn:mergeinfo set to (toggle deleted branches)
    /branches/VBox-3.0/include/VBox/vmm/cpumctx.h58652,​70973
    /branches/VBox-3.2/include/VBox/vmm/cpumctx.h66309,​66318
    /branches/VBox-4.0/include/VBox/vmm/cpumctx.h70873
    /branches/VBox-4.1/include/VBox/vmm/cpumctx.h74233
    /branches/VBox-4.2/include/VBox/vmm/cpumctx-v1_6.h91503-91504,​91506-91508,​91510,​91514-91515,​91521
    /branches/VBox-4.3/include/VBox/vmm/cpumctx-v1_6.h91223
    /branches/VBox-4.3/trunk/include/VBox/vmm/cpumctx-v1_6.h91223
    /branches/dsen/gui/include/VBox/vmm/cpumctx-v1_6.h79076-79078,​79089,​79109-79110,​79112-79113,​79127-79130,​79134,​79141,​79151,​79155,​79157-79159,​79193,​79197
    /branches/dsen/gui2/include/VBox/vmm/cpumctx-v1_6.h79224,​79228,​79233,​79235,​79258,​79262-79263,​79273,​79341,​79345,​79354,​79357,​79387-79388,​79559-79569,​79572-79573,​79578,​79581-79582,​79590-79591,​79598-79599,​79602-79603,​79605-79606,​79632,​79635,​79637,​79644
    /branches/dsen/gui3/include/VBox/vmm/cpumctx-v1_6.h79645-79692
File size: 6.3 KB
Line 
1/** @file
2 * CPUM - CPU Monitor(/ Manager), Context Structures from v1.6 (saved state).
3 */
4
5/*
6 * Copyright (C) 2006-2016 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___VBox_vmm_cpumctx_v1_6_h
27#define ___VBox_vmm_cpumctx_v1_6_h
28
29#include <iprt/x86.h>
30
31
32RT_C_DECLS_BEGIN
33
34/** @defgroup grp_cpum_ctx_v1_6 The CPUM Context Structures from v1.6
35 * @ingroup grp_cpum
36 * @{
37 */
38
39#pragma pack(1)
40/** IDTR from version 1.6 */
41typedef struct VBOXIDTR_VER1_6
42{
43 /** Size of the IDT. */
44 uint16_t cbIdt;
45 /** Address of the IDT. */
46 uint32_t pIdt;
47} VBOXIDTR_VER1_6;
48#pragma pack()
49
50#pragma pack(1)
51/** GDTR from version 1.6 */
52typedef struct VBOXGDTR_VER1_6
53{
54 /** Size of the GDT. */
55 uint16_t cbGdt;
56 /** Address of the GDT. */
57 uint32_t pGdt;
58} VBOXGDTR_VER1_6;
59#pragma pack()
60
61
62/**
63 * Selector hidden registers, for version 1.6 saved state.
64 */
65typedef struct CPUMSELREGHID_VER1_6
66{
67 /** Base register. */
68 uint32_t u32Base;
69 /** Limit (expanded). */
70 uint32_t u32Limit;
71 /** Flags.
72 * This is the high 32-bit word of the descriptor entry.
73 * Only the flags, dpl and type are used. */
74 X86DESCATTR Attr;
75} CPUMSELREGHID_VER1_6;
76
77/**
78 * CPU context, for version 1.6 saved state.
79 * @remarks PATM uses this, which is why it has to be here.
80 */
81# pragma pack(1)
82typedef struct CPUMCTX_VER1_6
83{
84 /** FPU state. (16-byte alignment)
85 * @todo This doesn't have to be in X86FXSTATE on CPUs without fxsr - we need a type for the
86 * actual format or convert it (waste of time). */
87 X86FXSTATE fpu;
88
89 /** CPUMCTXCORE Part.
90 * @{ */
91 union
92 {
93 uint32_t edi;
94 uint64_t rdi;
95 } CPUM_UNION_NM(rdi);
96 union
97 {
98 uint32_t esi;
99 uint64_t rsi;
100 } CPUM_UNION_NM(rsi);
101 union
102 {
103 uint32_t ebp;
104 uint64_t rbp;
105 } CPUM_UNION_NM(rbp);
106 union
107 {
108 uint32_t eax;
109 uint64_t rax;
110 } CPUM_UNION_NM(rax);
111 union
112 {
113 uint32_t ebx;
114 uint64_t rbx;
115 } CPUM_UNION_NM(rbx);
116 union
117 {
118 uint32_t edx;
119 uint64_t rdx;
120 } CPUM_UNION_NM(rdx);
121 union
122 {
123 uint32_t ecx;
124 uint64_t rcx;
125 } CPUM_UNION_NM(rcx);
126 /** @note We rely on the exact layout, because we use lss esp, [] in the
127 * switcher. */
128 uint32_t esp;
129 RTSEL ss;
130 RTSEL ssPadding;
131 /* Note: no overlap with esp here. */
132 uint64_t rsp_notused;
133
134 RTSEL gs;
135 RTSEL gsPadding;
136 RTSEL fs;
137 RTSEL fsPadding;
138 RTSEL es;
139 RTSEL esPadding;
140 RTSEL ds;
141 RTSEL dsPadding;
142 RTSEL cs;
143 RTSEL csPadding[3]; /**< 3 words to force 8 byte alignment for the remainder. */
144
145 union
146 {
147 X86EFLAGS eflags;
148 X86RFLAGS rflags;
149 } CPUM_UNION_NM(rflags);
150 union
151 {
152 uint32_t eip;
153 uint64_t rip;
154 } CPUM_UNION_NM(rip);
155
156 uint64_t r8;
157 uint64_t r9;
158 uint64_t r10;
159 uint64_t r11;
160 uint64_t r12;
161 uint64_t r13;
162 uint64_t r14;
163 uint64_t r15;
164
165 /** Hidden selector registers.
166 * @{ */
167 CPUMSELREGHID_VER1_6 esHid;
168 CPUMSELREGHID_VER1_6 csHid;
169 CPUMSELREGHID_VER1_6 ssHid;
170 CPUMSELREGHID_VER1_6 dsHid;
171 CPUMSELREGHID_VER1_6 fsHid;
172 CPUMSELREGHID_VER1_6 gsHid;
173 /** @} */
174
175 /** @} */
176
177 /** Control registers.
178 * @{ */
179 uint64_t cr0;
180 uint64_t cr2;
181 uint64_t cr3;
182 uint64_t cr4;
183 uint64_t cr8;
184 /** @} */
185
186 /** Debug registers.
187 * @{ */
188 uint64_t dr0;
189 uint64_t dr1;
190 uint64_t dr2;
191 uint64_t dr3;
192 uint64_t dr4; /**< @todo remove dr4 and dr5. */
193 uint64_t dr5;
194 uint64_t dr6;
195 uint64_t dr7;
196 /* DR8-15 are currently not supported */
197 /** @} */
198
199 /** Global Descriptor Table register. */
200 VBOXGDTR_VER1_6 gdtr;
201 uint16_t gdtrPadding;
202 uint32_t gdtrPadding64;/** @todo fix this hack */
203 /** Interrupt Descriptor Table register. */
204 VBOXIDTR_VER1_6 idtr;
205 uint16_t idtrPadding;
206 uint32_t idtrPadding64;/** @todo fix this hack */
207 /** The task register.
208 * Only the guest context uses all the members. */
209 RTSEL ldtr;
210 RTSEL ldtrPadding;
211 /** The task register.
212 * Only the guest context uses all the members. */
213 RTSEL tr;
214 RTSEL trPadding;
215
216 /** The sysenter msr registers.
217 * This member is not used by the hypervisor context. */
218 CPUMSYSENTER SysEnter;
219
220 /** System MSRs.
221 * @{ */
222 uint64_t msrEFER;
223 uint64_t msrSTAR;
224 uint64_t msrPAT;
225 uint64_t msrLSTAR;
226 uint64_t msrCSTAR;
227 uint64_t msrSFMASK;
228 uint64_t msrFSBASE;
229 uint64_t msrGSBASE;
230 uint64_t msrKERNELGSBASE;
231 /** @} */
232
233 /** Hidden selector registers.
234 * @{ */
235 CPUMSELREGHID_VER1_6 ldtrHid;
236 CPUMSELREGHID_VER1_6 trHid;
237 /** @} */
238
239 /** padding to get 32byte aligned size. */
240 uint32_t padding[2];
241} CPUMCTX_VER1_6;
242# pragma pack()
243
244/** @} */
245
246RT_C_DECLS_END
247
248#endif
249
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette