Changeset 41899 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Jun 23, 2012 7:07:03 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 78752
- Location:
- trunk/src/VBox/VMM/VMMR3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r41803 r41899 38 38 #include <VBox/vmm/cpum.h> 39 39 #include <VBox/vmm/cpumdis.h> 40 #include <VBox/vmm/cpumctx-v1_6.h> 40 41 #include <VBox/vmm/pgm.h> 41 42 #include <VBox/vmm/mm.h> … … 63 64 * Defined Constants And Macros * 64 65 *******************************************************************************/ 66 #if 0 /* later when actual changes have been made */ 65 67 /** The current saved state version. */ 66 #define CPUM_SAVED_STATE_VERSION 13 68 #define CPUM_SAVED_STATE_VERSION 14 69 #else 70 # define CPUM_SAVED_STATE_VERSION CPUM_SAVED_STATE_VERSION_MEM 71 #endif 72 /** The current saved state version before using SSMR3PutStruct. */ 73 #define CPUM_SAVED_STATE_VERSION_MEM 13 67 74 /** The saved state version before introducing the MSR size field. */ 68 75 #define CPUM_SAVED_STATE_VERSION_NO_MSR_SIZE 12 … … 114 121 static DECLCALLBACK(void) cpumR3InfoHost(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); 115 122 static DECLCALLBACK(void) cpumR3CpuIdInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); 123 124 125 /******************************************************************************* 126 * Global Variables * 127 *******************************************************************************/ 128 /** Saved state field descriptors for CPUMCTX. */ 129 static const SSMFIELD g_aCpumCtxFields[] = 130 { 131 SSMFIELD_ENTRY( CPUMCTX, fpu.FCW), 132 SSMFIELD_ENTRY( CPUMCTX, fpu.FSW), 133 SSMFIELD_ENTRY( CPUMCTX, fpu.FTW), 134 SSMFIELD_ENTRY( CPUMCTX, fpu.FOP), 135 SSMFIELD_ENTRY( CPUMCTX, fpu.FPUIP), 136 SSMFIELD_ENTRY( CPUMCTX, fpu.CS), 137 SSMFIELD_ENTRY( CPUMCTX, fpu.Rsrvd1), 138 SSMFIELD_ENTRY( CPUMCTX, fpu.FPUDP), 139 SSMFIELD_ENTRY( CPUMCTX, fpu.DS), 140 SSMFIELD_ENTRY( CPUMCTX, fpu.Rsrvd2), 141 SSMFIELD_ENTRY( CPUMCTX, fpu.MXCSR), 142 SSMFIELD_ENTRY( CPUMCTX, fpu.MXCSR_MASK), 143 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[0]), 144 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[1]), 145 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[2]), 146 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[3]), 147 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[4]), 148 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[5]), 149 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[6]), 150 SSMFIELD_ENTRY( CPUMCTX, fpu.aRegs[7]), 151 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[0]), 152 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[1]), 153 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[2]), 154 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[3]), 155 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[4]), 156 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[5]), 157 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[6]), 158 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[7]), 159 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[8]), 160 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[9]), 161 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[10]), 162 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[11]), 163 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[12]), 164 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[13]), 165 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[14]), 166 SSMFIELD_ENTRY( CPUMCTX, fpu.aXMM[15]), 167 SSMFIELD_ENTRY_IGNORE( CPUMCTX, fpu.au32RsrvdRest), 168 SSMFIELD_ENTRY( CPUMCTX, rdi), 169 SSMFIELD_ENTRY( CPUMCTX, rsi), 170 SSMFIELD_ENTRY( CPUMCTX, rbp), 171 SSMFIELD_ENTRY( CPUMCTX, rax), 172 SSMFIELD_ENTRY( CPUMCTX, rbx), 173 SSMFIELD_ENTRY( CPUMCTX, rdx), 174 SSMFIELD_ENTRY( CPUMCTX, rcx), 175 SSMFIELD_ENTRY( CPUMCTX, rsp), 176 SSMFIELD_ENTRY_IGNORE( CPUMCTX, lss_esp), 177 SSMFIELD_ENTRY( CPUMCTX, ss), 178 SSMFIELD_ENTRY_IGNORE( CPUMCTX, ssPadding), 179 SSMFIELD_ENTRY( CPUMCTX, gs), 180 SSMFIELD_ENTRY_IGNORE( CPUMCTX, gsPadding), 181 SSMFIELD_ENTRY( CPUMCTX, fs), 182 SSMFIELD_ENTRY_IGNORE( CPUMCTX, fsPadding), 183 SSMFIELD_ENTRY( CPUMCTX, es), 184 SSMFIELD_ENTRY_IGNORE( CPUMCTX, esPadding), 185 SSMFIELD_ENTRY( CPUMCTX, ds), 186 SSMFIELD_ENTRY_IGNORE( CPUMCTX, dsPadding), 187 SSMFIELD_ENTRY( CPUMCTX, cs), 188 SSMFIELD_ENTRY_IGNORE( CPUMCTX, csPadding), 189 SSMFIELD_ENTRY( CPUMCTX, rflags), 190 SSMFIELD_ENTRY( CPUMCTX, rip), 191 SSMFIELD_ENTRY( CPUMCTX, r8), 192 SSMFIELD_ENTRY( CPUMCTX, r9), 193 SSMFIELD_ENTRY( CPUMCTX, r10), 194 SSMFIELD_ENTRY( CPUMCTX, r11), 195 SSMFIELD_ENTRY( CPUMCTX, r12), 196 SSMFIELD_ENTRY( CPUMCTX, r13), 197 SSMFIELD_ENTRY( CPUMCTX, r14), 198 SSMFIELD_ENTRY( CPUMCTX, r15), 199 SSMFIELD_ENTRY( CPUMCTX, esHid.u64Base), 200 SSMFIELD_ENTRY( CPUMCTX, esHid.u32Limit), 201 SSMFIELD_ENTRY( CPUMCTX, esHid.Attr), 202 SSMFIELD_ENTRY( CPUMCTX, csHid.u64Base), 203 SSMFIELD_ENTRY( CPUMCTX, csHid.u32Limit), 204 SSMFIELD_ENTRY( CPUMCTX, csHid.Attr), 205 SSMFIELD_ENTRY( CPUMCTX, ssHid.u64Base), 206 SSMFIELD_ENTRY( CPUMCTX, ssHid.u32Limit), 207 SSMFIELD_ENTRY( CPUMCTX, ssHid.Attr), 208 SSMFIELD_ENTRY( CPUMCTX, dsHid.u64Base), 209 SSMFIELD_ENTRY( CPUMCTX, dsHid.u32Limit), 210 SSMFIELD_ENTRY( CPUMCTX, dsHid.Attr), 211 SSMFIELD_ENTRY( CPUMCTX, fsHid.u64Base), 212 SSMFIELD_ENTRY( CPUMCTX, fsHid.u32Limit), 213 SSMFIELD_ENTRY( CPUMCTX, fsHid.Attr), 214 SSMFIELD_ENTRY( CPUMCTX, gsHid.u64Base), 215 SSMFIELD_ENTRY( CPUMCTX, gsHid.u32Limit), 216 SSMFIELD_ENTRY( CPUMCTX, gsHid.Attr), 217 SSMFIELD_ENTRY( CPUMCTX, cr0), 218 SSMFIELD_ENTRY( CPUMCTX, cr2), 219 SSMFIELD_ENTRY( CPUMCTX, cr3), 220 SSMFIELD_ENTRY( CPUMCTX, cr4), 221 SSMFIELD_ENTRY( CPUMCTX, dr[0]), 222 SSMFIELD_ENTRY( CPUMCTX, dr[1]), 223 SSMFIELD_ENTRY( CPUMCTX, dr[2]), 224 SSMFIELD_ENTRY( CPUMCTX, dr[3]), 225 SSMFIELD_ENTRY( CPUMCTX, dr[4]), 226 SSMFIELD_ENTRY_IGNORE( CPUMCTX, dr[5]), 227 SSMFIELD_ENTRY_IGNORE( CPUMCTX, dr[6]), 228 SSMFIELD_ENTRY( CPUMCTX, dr[7]), 229 SSMFIELD_ENTRY( CPUMCTX, gdtr.cbGdt), 230 SSMFIELD_ENTRY( CPUMCTX, gdtr.pGdt), 231 SSMFIELD_ENTRY_IGNORE( CPUMCTX, gdtrPadding), 232 SSMFIELD_ENTRY( CPUMCTX, idtr.cbIdt), 233 SSMFIELD_ENTRY( CPUMCTX, idtr.pIdt), 234 SSMFIELD_ENTRY_IGNORE( CPUMCTX, idtrPadding), 235 SSMFIELD_ENTRY( CPUMCTX, ldtr), 236 SSMFIELD_ENTRY_IGNORE( CPUMCTX, ldtrPadding), 237 SSMFIELD_ENTRY( CPUMCTX, tr), 238 SSMFIELD_ENTRY_IGNORE( CPUMCTX, trPadding), 239 SSMFIELD_ENTRY_IGNORE( CPUMCTX, SysEnter.cs), 240 SSMFIELD_ENTRY_IGNORE( CPUMCTX, SysEnter.eip), 241 SSMFIELD_ENTRY_IGNORE( CPUMCTX, SysEnter.esp), 242 SSMFIELD_ENTRY( CPUMCTX, msrEFER), 243 SSMFIELD_ENTRY( CPUMCTX, msrSTAR), 244 SSMFIELD_ENTRY( CPUMCTX, msrPAT), 245 SSMFIELD_ENTRY( CPUMCTX, msrLSTAR), 246 SSMFIELD_ENTRY( CPUMCTX, msrCSTAR), 247 SSMFIELD_ENTRY( CPUMCTX, msrSFMASK), 248 SSMFIELD_ENTRY( CPUMCTX, msrKERNELGSBASE), 249 SSMFIELD_ENTRY( CPUMCTX, ldtrHid.u64Base), 250 SSMFIELD_ENTRY( CPUMCTX, ldtrHid.u32Limit), 251 SSMFIELD_ENTRY( CPUMCTX, ldtrHid.Attr), 252 SSMFIELD_ENTRY( CPUMCTX, trHid.u64Base), 253 SSMFIELD_ENTRY( CPUMCTX, trHid.u32Limit), 254 SSMFIELD_ENTRY( CPUMCTX, trHid.Attr), 255 SSMFIELD_ENTRY_TERM() 256 }; 257 258 /** Saved state field descriptors for CPUMCTX_VER1_6. */ 259 static const SSMFIELD g_aCpumCtxFieldsV16[] = 260 { 261 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.FCW), 262 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.FSW), 263 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.FTW), 264 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.FOP), 265 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.FPUIP), 266 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.CS), 267 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.Rsrvd1), 268 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.FPUDP), 269 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.DS), 270 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.Rsrvd2), 271 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.MXCSR), 272 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.MXCSR_MASK), 273 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[0]), 274 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[1]), 275 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[2]), 276 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[3]), 277 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[4]), 278 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[5]), 279 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[6]), 280 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aRegs[7]), 281 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[0]), 282 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[1]), 283 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[2]), 284 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[3]), 285 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[4]), 286 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[5]), 287 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[6]), 288 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[7]), 289 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[8]), 290 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[9]), 291 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[10]), 292 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[11]), 293 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[12]), 294 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[13]), 295 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[14]), 296 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fpu.aXMM[15]), 297 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, fpu.au32RsrvdRest), 298 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rdi), 299 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rsi), 300 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rbp), 301 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rax), 302 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rbx), 303 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rdx), 304 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rcx), 305 SSMFIELD_ENTRY( CPUMCTX_VER1_6, esp), 306 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ss), 307 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, ssPadding), 308 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, rsp_notused), 309 SSMFIELD_ENTRY( CPUMCTX_VER1_6, gs), 310 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, gsPadding), 311 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fs), 312 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, fsPadding), 313 SSMFIELD_ENTRY( CPUMCTX_VER1_6, es), 314 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, esPadding), 315 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ds), 316 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, dsPadding), 317 SSMFIELD_ENTRY( CPUMCTX_VER1_6, cs), 318 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, csPadding), 319 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rflags), 320 SSMFIELD_ENTRY( CPUMCTX_VER1_6, rip), 321 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r8), 322 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r9), 323 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r10), 324 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r11), 325 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r12), 326 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r13), 327 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r14), 328 SSMFIELD_ENTRY( CPUMCTX_VER1_6, r15), 329 SSMFIELD_ENTRY( CPUMCTX_VER1_6, esHid.u32Base), 330 SSMFIELD_ENTRY( CPUMCTX_VER1_6, esHid.u32Limit), 331 SSMFIELD_ENTRY( CPUMCTX_VER1_6, esHid.Attr), 332 SSMFIELD_ENTRY( CPUMCTX_VER1_6, csHid.u32Base), 333 SSMFIELD_ENTRY( CPUMCTX_VER1_6, csHid.u32Limit), 334 SSMFIELD_ENTRY( CPUMCTX_VER1_6, csHid.Attr), 335 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ssHid.u32Base), 336 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ssHid.u32Limit), 337 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ssHid.Attr), 338 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dsHid.u32Base), 339 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dsHid.u32Limit), 340 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dsHid.Attr), 341 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fsHid.u32Base), 342 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fsHid.u32Limit), 343 SSMFIELD_ENTRY( CPUMCTX_VER1_6, fsHid.Attr), 344 SSMFIELD_ENTRY( CPUMCTX_VER1_6, gsHid.u32Base), 345 SSMFIELD_ENTRY( CPUMCTX_VER1_6, gsHid.u32Limit), 346 SSMFIELD_ENTRY( CPUMCTX_VER1_6, gsHid.Attr), 347 SSMFIELD_ENTRY( CPUMCTX_VER1_6, cr0), 348 SSMFIELD_ENTRY( CPUMCTX_VER1_6, cr2), 349 SSMFIELD_ENTRY( CPUMCTX_VER1_6, cr3), 350 SSMFIELD_ENTRY( CPUMCTX_VER1_6, cr4), 351 SSMFIELD_ENTRY( CPUMCTX_VER1_6, cr8), 352 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dr0), 353 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dr1), 354 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dr2), 355 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dr3), 356 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dr4), 357 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, dr5), 358 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, dr6), 359 SSMFIELD_ENTRY( CPUMCTX_VER1_6, dr7), 360 SSMFIELD_ENTRY( CPUMCTX_VER1_6, gdtr.cbGdt), 361 SSMFIELD_ENTRY( CPUMCTX_VER1_6, gdtr.pGdt), 362 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, gdtrPadding), 363 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, gdtrPadding64), 364 SSMFIELD_ENTRY( CPUMCTX_VER1_6, idtr.cbIdt), 365 SSMFIELD_ENTRY( CPUMCTX_VER1_6, idtr.pIdt), 366 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, idtrPadding), 367 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, idtrPadding64), 368 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ldtr), 369 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, ldtrPadding), 370 SSMFIELD_ENTRY( CPUMCTX_VER1_6, tr), 371 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, trPadding), 372 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, SysEnter.cs), 373 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, SysEnter.eip), 374 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, SysEnter.esp), 375 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrEFER), 376 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrSTAR), 377 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrPAT), 378 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrLSTAR), 379 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrCSTAR), 380 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrSFMASK), 381 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrFSBASE), 382 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrGSBASE), 383 SSMFIELD_ENTRY( CPUMCTX_VER1_6, msrKERNELGSBASE), 384 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ldtrHid.u32Base), 385 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ldtrHid.u32Limit), 386 SSMFIELD_ENTRY( CPUMCTX_VER1_6, ldtrHid.Attr), 387 SSMFIELD_ENTRY( CPUMCTX_VER1_6, trHid.u32Base), 388 SSMFIELD_ENTRY( CPUMCTX_VER1_6, trHid.u32Limit), 389 SSMFIELD_ENTRY( CPUMCTX_VER1_6, trHid.Attr), 390 SSMFIELD_ENTRY_IGNORE( CPUMCTX_VER1_6, padding), 391 SSMFIELD_ENTRY_TERM() 392 }; 116 393 117 394 … … 1948 2225 { 1949 2226 PVMCPU pVCpu = &pVM->aCpus[i]; 1950 1951 SSMR3PutMem(pSSM, &pVCpu->cpum.s.Hyper, sizeof(pVCpu->cpum.s.Hyper));2227 SSMR3PutStructEx(pSSM, &pVCpu->cpum.s.Hyper, sizeof(pVCpu->cpum.s.Hyper), SSMSTRUCT_FLAGS_MEM_BAND_AID, 2228 g_aCpumCtxFields, NULL); 1952 2229 } 1953 2230 … … 1958 2235 PVMCPU pVCpu = &pVM->aCpus[i]; 1959 2236 1960 SSMR3PutMem(pSSM, &pVCpu->cpum.s.Guest, sizeof(pVCpu->cpum.s.Guest)); 2237 SSMR3PutStructEx(pSSM, &pVCpu->cpum.s.Guest, sizeof(pVCpu->cpum.s.Guest), SSMSTRUCT_FLAGS_MEM_BAND_AID, 2238 g_aCpumCtxFields, NULL); 1961 2239 SSMR3PutU32(pSSM, pVCpu->cpum.s.fUseFlags); 1962 2240 SSMR3PutU32(pSSM, pVCpu->cpum.s.fChanged); … … 2085 2363 */ 2086 2364 if ( uVersion != CPUM_SAVED_STATE_VERSION 2365 && uVersion != CPUM_SAVED_STATE_VERSION_MEM 2087 2366 && uVersion != CPUM_SAVED_STATE_VERSION_NO_MSR_SIZE 2088 2367 && uVersion != CPUM_SAVED_STATE_VERSION_VER3_2 … … 2107 2386 SSMR3HandleSetGCPtrSize(pSSM, HC_ARCH_BITS == 32 ? sizeof(RTGCPTR32) : sizeof(RTGCPTR)); 2108 2387 2388 PCSSMFIELD paCpumCtxFields = g_aCpumCtxFields; 2389 if (uVersion == CPUM_SAVED_STATE_VERSION_VER1_6) 2390 paCpumCtxFields = g_aCpumCtxFieldsV16; 2391 uint32_t fLoad = 0; 2392 if (uVersion <= CPUM_SAVED_STATE_VERSION_MEM) 2393 fLoad = SSMSTRUCT_FLAGS_MEM_BAND_AID; 2394 2109 2395 /* 2110 2396 * Restore. … … 2113 2399 { 2114 2400 PVMCPU pVCpu = &pVM->aCpus[i]; 2115 uint32_t uCR3 = pVCpu->cpum.s.Hyper.cr3; 2116 uint32_t uESP = pVCpu->cpum.s.Hyper.esp; /* see VMMR3Relocate(). */ 2117 2118 SSMR3GetMem(pSSM, &pVCpu->cpum.s.Hyper, sizeof(pVCpu->cpum.s.Hyper)); 2401 uint64_t uCR3 = pVCpu->cpum.s.Hyper.cr3; 2402 uint64_t uRSP = pVCpu->cpum.s.Hyper.rsp; /* see VMMR3Relocate(). */ 2403 SSMR3GetStructEx(pSSM, &pVCpu->cpum.s.Hyper, sizeof(pVCpu->cpum.s.Hyper), fLoad, paCpumCtxFields, NULL); 2119 2404 pVCpu->cpum.s.Hyper.cr3 = uCR3; 2120 pVCpu->cpum.s.Hyper. esp = uESP;2405 pVCpu->cpum.s.Hyper.rsp = uRSP; 2121 2406 } 2122 2407 … … 2125 2410 CPUMCTX_VER1_6 cpumctx16; 2126 2411 memset(&pVM->aCpus[0].cpum.s.Guest, 0, sizeof(pVM->aCpus[0].cpum.s.Guest)); 2127 SSMR3GetMem(pSSM, &cpumctx16, sizeof(cpumctx16)); 2412 SSMR3GetStructEx(pSSM, &cpumctx16, sizeof(cpumctx16), fLoad, 2413 paCpumCtxFields, NULL); 2128 2414 2129 2415 /* Save the old cpumctx state into the new one. */ … … 2142 2428 VERR_SSM_UNEXPECTED_DATA); 2143 2429 } 2144 AssertLogRelMsgReturn( uVersion !=CPUM_SAVED_STATE_VERSION_VER2_02430 AssertLogRelMsgReturn( uVersion > CPUM_SAVED_STATE_VERSION_VER2_0 2145 2431 || pVM->cCpus == 1, 2146 2432 ("cCpus=%u\n", pVM->cCpus), … … 2159 2445 for (VMCPUID i = 0; i < pVM->cCpus; i++) 2160 2446 { 2161 SSMR3GetMem(pSSM, &pVM->aCpus[i].cpum.s.Guest, sizeof(pVM->aCpus[i].cpum.s.Guest)); 2447 SSMR3GetStructEx(pSSM, &pVM->aCpus[i].cpum.s.Guest, sizeof(pVM->aCpus[i].cpum.s.Guest), fLoad, 2448 paCpumCtxFields, NULL); 2162 2449 SSMR3GetU32(pSSM, &pVM->aCpus[i].cpum.s.fUseFlags); 2163 2450 SSMR3GetU32(pSSM, &pVM->aCpus[i].cpum.s.fChanged); -
trunk/src/VBox/VMM/VMMR3/PATMSSM.cpp
r41800 r41899 24 24 #include <VBox/vmm/patm.h> 25 25 #include <VBox/vmm/cpum.h> 26 #include <VBox/vmm/cpumctx-v1_6.h> 26 27 #include <VBox/vmm/mm.h> 27 28 #include <VBox/vmm/ssm.h> … … 49 50 * to avoid changing the saved state version for now (will come later). 50 51 */ 51 typedef struct _PATCHINFOSSM52 typedef struct PATCHINFOSSM 52 53 { 53 54 uint32_t uState;
Note:
See TracChangeset
for help on using the changeset viewer.