Changeset 49018 in vbox
- Timestamp:
- Oct 10, 2013 8:19:24 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 89766
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMR0Mixed.mac
r48965 r49018 36 36 %endif 37 37 38 ;; @def RESTORE STATEVM3238 ;; @def RESTORE_STATE_VM32 39 39 ; Macro restoring essential host state and updating guest state 40 40 ; for common host, 32-bit guest for VT-x. 41 ; 42 ; @param 1 Jump label suffix 1. 43 ; @param 2 Jump label suffix 2. 44 ; @param 3 Jump label suffix 3. 45 %macro RESTORESTATEVM32 3 41 %macro RESTORE_STATE_VM32 0 46 42 ; Restore base and limit of the IDTR & GDTR. 47 43 %ifndef VMX_SKIP_IDTR … … 95 91 %ifdef RT_ARCH_AMD64 96 92 cmp eax, 0 97 je .skipldtwrite32%193 je %%skip_ldt_write32 98 94 %endif 99 95 lldt ax 100 96 101 .skipldtwrite32%1:97 %%skip_ldt_write32: 102 98 add xSP, xCB ; pCtx 103 99 … … 110 106 mov ecx, [ss:xDX + VMCSCACHE.Read.cValidEntries] 111 107 cmp ecx, 0 ; Can't happen 112 je .no_cached_read32%2113 jmp .cached_read32%3108 je %%no_cached_read32 109 jmp %%cached_read32 114 110 115 111 ALIGN(16) 116 .cached_read32%3:112 %%cached_read32: 117 113 dec xCX 118 114 mov eax, [ss:xDX + VMCSCACHE.Read.aField + xCX * 4] 119 115 vmread [ss:xDX + VMCSCACHE.Read.aFieldVal + xCX * 8], xAX 120 116 cmp xCX, 0 121 jnz .cached_read32%3122 .no_cached_read32%2:117 jnz %%cached_read32 118 %%no_cached_read32: 123 119 %endif 124 120 … … 233 229 mov xDX, cr2 234 230 cmp xBX, xDX 235 je .skip cr2write32231 je .skip_cr2_write32 236 232 mov cr2, xBX 237 233 238 .skip cr2write32:234 .skip_cr2_write32: 239 235 mov eax, VMX_VMCS_HOST_RSP 240 236 vmwrite xAX, xSP … … 273 269 jz near .vmxstart_start_failed 274 270 275 RESTORE STATEVM32 A, B, C271 RESTORE_STATE_VM32 276 272 mov eax, VINF_SUCCESS 277 273 … … 282 278 283 279 .vmxstart_invalid_vmcs_ptr: 284 RESTORE STATEVM32 D, E, F280 RESTORE_STATE_VM32 285 281 mov eax, VERR_VMX_INVALID_VMCS_PTR_TO_START_VM 286 282 jmp .vmstart_end 287 283 288 284 .vmxstart_start_failed: 289 RESTORE STATEVM32 G, H, I285 RESTORE_STATE_VM32 290 286 mov eax, VERR_VMX_UNABLE_TO_START_VM 291 287 jmp .vmstart_end … … 295 291 296 292 %ifdef RT_ARCH_AMD64 297 ;; @def RESTORE STATEVM64293 ;; @def RESTORE_STATE_VM64 298 294 ; Macro restoring essential host state and updating guest state 299 295 ; for 64-bit host, 64-bit guest for VT-x. 300 296 ; 301 ; @param 1 Jump label suffix 1. 302 ; @param 2 Jump label suffix 2. 303 ; @param 3 Jump label suffix 3. 304 %macro RESTORESTATEVM64 3 297 %macro RESTORE_STATE_VM64 0 305 298 ; Restore base and limit of the IDTR & GDTR 306 299 %ifndef VMX_SKIP_IDTR … … 357 350 pop xAX ; Saved LDTR 358 351 cmp eax, 0 359 je .skipldtwrite64%1352 je %%skip_ldt_write64 360 353 lldt ax 361 354 362 .skipldtwrite64%1:355 %%skip_ldt_write64: 363 356 pop xSI ; pCtx (needed in rsi by the macros below) 364 357 … … 379 372 mov ecx, [xDX + VMCSCACHE.Read.cValidEntries] 380 373 cmp ecx, 0 ; Can't happen 381 je .no_cached_read64%2382 jmp .cached_read64%3374 je %%no_cached_read64 375 jmp %%cached_read64 383 376 384 377 ALIGN(16) 385 .cached_read64%3:378 %%cached_read64: 386 379 dec xCX 387 380 mov eax, [xDX + VMCSCACHE.Read.aField + xCX * 4] 388 381 vmread [xDX + VMCSCACHE.Read.aFieldVal + xCX * 8], xAX 389 382 cmp xCX, 0 390 jnz .cached_read64%3391 .no_cached_read64%2:383 jnz %%cached_read64 384 %%no_cached_read64: 392 385 %endif 393 386 … … 499 492 mov rdx, cr2 500 493 cmp rbx, rdx 501 je .skip cr2write494 je .skip_cr2_write 502 495 mov cr2, rbx 503 496 504 .skip cr2write:497 .skip_cr2_write: 505 498 mov eax, VMX_VMCS_HOST_RSP 506 499 vmwrite xAX, xSP … … 547 540 jz near .vmxstart64_start_failed 548 541 549 RESTORE STATEVM64 a, b, c542 RESTORE_STATE_VM64 550 543 mov eax, VINF_SUCCESS 551 544 … … 556 549 557 550 .vmxstart64_invalid_vmcs_ptr: 558 RESTORE STATEVM64 d, e, f551 RESTORE_STATE_VM64 559 552 mov eax, VERR_VMX_INVALID_VMCS_PTR_TO_START_VM 560 553 jmp .vmstart64_end 561 554 562 555 .vmxstart64_start_failed: 563 RESTORE STATEVM64 g, h, i556 RESTORE_STATE_VM64 564 557 mov eax, VERR_VMX_UNABLE_TO_START_VM 565 558 jmp .vmstart64_end
Note:
See TracChangeset
for help on using the changeset viewer.