Revision 5cc1d1e6 target-i386/machine.c
b/target-i386/machine.c | ||
---|---|---|
120 | 120 |
qemu_put_be64s(f, &env->kernelgsbase); |
121 | 121 |
#endif |
122 | 122 |
qemu_put_be32s(f, &env->smbase); |
123 |
|
|
124 |
qemu_put_be64s(f, &env->pat); |
|
125 |
qemu_put_be32s(f, &env->hflags2); |
|
126 |
qemu_put_be32s(f, (uint32_t *)&env->halted); |
|
127 |
|
|
128 |
qemu_put_be64s(f, &env->vm_hsave); |
|
129 |
qemu_put_be64s(f, &env->vm_vmcb); |
|
130 |
qemu_put_be64s(f, &env->tsc_offset); |
|
131 |
qemu_put_be64s(f, &env->intercept); |
|
132 |
qemu_put_be16s(f, &env->intercept_cr_read); |
|
133 |
qemu_put_be16s(f, &env->intercept_cr_write); |
|
134 |
qemu_put_be16s(f, &env->intercept_dr_read); |
|
135 |
qemu_put_be16s(f, &env->intercept_dr_write); |
|
136 |
qemu_put_be32s(f, &env->intercept_exceptions); |
|
137 |
qemu_put_8s(f, &env->v_tpr); |
|
123 | 138 |
} |
124 | 139 |
|
125 | 140 |
#ifdef USE_X86LDOUBLE |
... | ... | |
154 | 169 |
uint16_t fpus, fpuc, fptag, fpregs_format; |
155 | 170 |
int32_t a20_mask; |
156 | 171 |
|
157 |
if (version_id != 3 && version_id != 4) |
|
172 |
if (version_id != 3 && version_id != 4 && version_id != 5)
|
|
158 | 173 |
return -EINVAL; |
159 | 174 |
for(i = 0; i < CPU_NB_REGS; i++) |
160 | 175 |
qemu_get_betls(f, &env->regs[i]); |
... | ... | |
258 | 273 |
qemu_get_be64s(f, &env->fmask); |
259 | 274 |
qemu_get_be64s(f, &env->kernelgsbase); |
260 | 275 |
#endif |
261 |
if (version_id >= 4) |
|
276 |
if (version_id >= 4) {
|
|
262 | 277 |
qemu_get_be32s(f, &env->smbase); |
263 |
|
|
264 |
/* XXX: compute hflags from scratch, except for CPL and IIF */ |
|
278 |
} |
|
279 |
if (version_id >= 5) { |
|
280 |
qemu_get_be64s(f, &env->pat); |
|
281 |
qemu_get_be32s(f, &env->hflags2); |
|
282 |
qemu_get_be32s(f, (uint32_t *)&env->halted); |
|
283 |
|
|
284 |
qemu_get_be64s(f, &env->vm_hsave); |
|
285 |
qemu_get_be64s(f, &env->vm_vmcb); |
|
286 |
qemu_get_be64s(f, &env->tsc_offset); |
|
287 |
qemu_get_be64s(f, &env->intercept); |
|
288 |
qemu_get_be16s(f, &env->intercept_cr_read); |
|
289 |
qemu_get_be16s(f, &env->intercept_cr_write); |
|
290 |
qemu_get_be16s(f, &env->intercept_dr_read); |
|
291 |
qemu_get_be16s(f, &env->intercept_dr_write); |
|
292 |
qemu_get_be32s(f, &env->intercept_exceptions); |
|
293 |
qemu_get_8s(f, &env->v_tpr); |
|
294 |
} |
|
295 |
/* XXX: ensure compatiblity for halted bit ? */ |
|
296 |
/* XXX: compute redundant hflags bits */ |
|
265 | 297 |
env->hflags = hflags; |
266 | 298 |
tlb_flush(env, 1); |
267 | 299 |
return 0; |
Also available in: Unified diff