Changeset 18927 in vbox for trunk/src/VBox/VMM/VMMSwitcher
- Timestamp:
- Apr 16, 2009 11:41:38 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 46003
- Location:
- trunk/src/VBox/VMM/VMMSwitcher
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac
r16859 r18927 305 305 DEBUG_CHAR('b') ; trashes esi 306 306 ;; @todo Switcher cleanup: Determine base CR4 during CPUMR0Init / VMMR3SelectSwitcher putting it 307 ; in CPUM .Hyper.cr4 (which isn't currently being used). That should307 ; in CPUMCPU.Hyper.cr4 (which isn't currently being used). That should 308 308 ; simplify this operation a bit (and improve locality of the data). 309 309 … … 326 326 327 327 ; Load new gdt so we can do far jump to guest code after cr3 reload. 328 lgdt [rdx + CPUM.Hyper.gdtr]328 lgdt [rdx + r8 + CPUMCPU.Hyper.gdtr] 329 329 DEBUG_CHAR('1') ; trashes esi 330 330 331 331 ; Store the hypervisor cr3 for later loading 332 mov ebp, [rdx + CPUM.Hyper.cr3]332 mov ebp, [rdx + r8 + CPUMCPU.Hyper.cr3] 333 333 334 334 ;; … … 458 458 mov fs, eax 459 459 ; Load pCpum into EDX 460 FIXUP FIX_GC_CPUM _OFF, 1, 0460 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 461 461 mov edx, 0ffffffffh 462 462 ; Activate guest IDT 463 463 DEBUG_CHAR('2') 464 lidt [edx + CPUM .Hyper.idtr]464 lidt [edx + CPUMCPU.Hyper.idtr] 465 465 466 466 ; Setup stack; use the lss_esp, ss pair for lss 467 467 DEBUG_CHAR('3') 468 mov eax, [edx + CPUM .Hyper.esp]469 mov [edx + CPUM .Hyper.lss_esp], eax470 lss esp, [edx + CPUM .Hyper.lss_esp]468 mov eax, [edx + CPUMCPU.Hyper.esp] 469 mov [edx + CPUMCPU.Hyper.lss_esp], eax 470 lss esp, [edx + CPUMCPU.Hyper.lss_esp] 471 471 472 472 ; Restore TSS selector; must mark it as not busy before using ltr (!) … … 475 475 and dword [0ffffffffh], ~0200h ; clear busy flag (2nd type2 bit) 476 476 DEBUG_CHAR('5') 477 ltr word [edx + CPUM .Hyper.tr]477 ltr word [edx + CPUMCPU.Hyper.tr] 478 478 DEBUG_CHAR('6') 479 479 480 480 ; Activate the ldt (now we can safely crash). 481 lldt [edx + CPUM .Hyper.ldtr]481 lldt [edx + CPUMCPU.Hyper.ldtr] 482 482 DEBUG_CHAR('7') 483 483 484 484 ;; use flags. 485 mov esi, [edx + CPUM.ulOffCPUMCPU] 486 mov esi, [edx + esi + CPUMCPU.fUseFlags] 485 mov esi, [edx + CPUMCPU.fUseFlags] 487 486 488 487 ; debug registers … … 494 493 495 494 ; General registers. 496 mov ebx, [edx + CPUM .Hyper.ebx]497 mov ebp, [edx + CPUM .Hyper.ebp]498 mov esi, [edx + CPUM .Hyper.esi]499 mov edi, [edx + CPUM .Hyper.edi]500 push dword [edx + CPUM .Hyper.eflags]495 mov ebx, [edx + CPUMCPU.Hyper.ebx] 496 mov ebp, [edx + CPUMCPU.Hyper.ebp] 497 mov esi, [edx + CPUMCPU.Hyper.esi] 498 mov edi, [edx + CPUMCPU.Hyper.edi] 499 push dword [edx + CPUMCPU.Hyper.eflags] 501 500 popfd 502 501 DEBUG_CHAR('!') … … 508 507 %ifdef DEBUG_STUFF 509 508 COM32_S_PRINT ';eip=' 510 mov eax, [edx + CPUM .Hyper.eip]509 mov eax, [edx + CPUMCPU.Hyper.eip] 511 510 COM32_S_DWORD_REG eax 512 511 COM32_S_CHAR ';' 513 512 %endif 514 mov eax, [edx + CPUM.Hyper.eip] 513 mov eax, [edx + CPUMCPU.Hyper.eip] 514 ; callees expect CPUM ptr 515 CPUM_FROM_CPUMCPU(edx) 516 515 517 %ifdef VBOX_WITH_STATISTICS 516 518 FIXUP FIX_GC_VM_OFF, 1, VM.StatSwitcherToGC … … 530 532 DEBUG_S_CHAR('x') 531 533 ; load hyper DR0-7 532 mov ebx, [edx + CPUM .Hyper.dr]534 mov ebx, [edx + CPUMCPU.Hyper.dr] 533 535 mov dr0, ebx 534 mov ecx, [edx + CPUM .Hyper.dr + 8*1]536 mov ecx, [edx + CPUMCPU.Hyper.dr + 8*1] 535 537 mov dr1, ecx 536 mov eax, [edx + CPUM .Hyper.dr + 8*2]538 mov eax, [edx + CPUMCPU.Hyper.dr + 8*2] 537 539 mov dr2, eax 538 mov ebx, [edx + CPUM .Hyper.dr + 8*3]540 mov ebx, [edx + CPUMCPU.Hyper.dr + 8*3] 539 541 mov dr3, ebx 540 ;mov eax, [edx + CPUM .Hyper.dr + 8*6]542 ;mov eax, [edx + CPUMCPU.Hyper.dr + 8*6] 541 543 mov ecx, 0ffff0ff0h 542 544 mov dr6, ecx 543 mov eax, [edx + CPUM .Hyper.dr + 8*7]545 mov eax, [edx + CPUMCPU.Hyper.dr + 8*7] 544 546 mov dr7, eax 545 547 jmp htg_debug_regs_guest_no … … 640 642 641 643 ; 642 ; Load the CPUM pointer. 643 ; 644 FIXUP FIX_GC_CPUM_OFF, 1, 0 645 mov edx, 0ffffffffh 646 ; Convert to CPUMCPU pointer 647 add edx, [edx + CPUM.ulOffCPUMCPU] 644 ; Load the CPUMCPU pointer. 645 ; 646 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 647 mov edx, 0ffffffffh 648 648 649 649 ; Skip return address (assumes called!) … … 692 692 ; jump to common worker code. 693 693 pop eax ; restore return code. 694 ; Load CPUM into edx again695 sub edx, [edx + CPUMCPU.ulOffCPUM]696 694 697 695 add esp, CPUMCTXCORE_size ; skip CPUMCTXCORE structure … … 735 733 ; Load the CPUM pointer. 736 734 ; 737 FIXUP FIX_GC_CPUM _OFF, 1, 0735 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 738 736 mov edx, 0ffffffffh 739 737 … … 741 739 ; general purpose registers 742 740 mov eax, [ecx + CPUMCTXCORE.edi] 743 mov [edx + CPUM .Hyper.edi], eax741 mov [edx + CPUMCPU.Hyper.edi], eax 744 742 mov eax, [ecx + CPUMCTXCORE.esi] 745 mov [edx + CPUM .Hyper.esi], eax743 mov [edx + CPUMCPU.Hyper.esi], eax 746 744 mov eax, [ecx + CPUMCTXCORE.ebp] 747 mov [edx + CPUM .Hyper.ebp], eax745 mov [edx + CPUMCPU.Hyper.ebp], eax 748 746 mov eax, [ecx + CPUMCTXCORE.eax] 749 mov [edx + CPUM .Hyper.eax], eax747 mov [edx + CPUMCPU.Hyper.eax], eax 750 748 mov eax, [ecx + CPUMCTXCORE.ebx] 751 mov [edx + CPUM .Hyper.ebx], eax749 mov [edx + CPUMCPU.Hyper.ebx], eax 752 750 mov eax, [ecx + CPUMCTXCORE.edx] 753 mov [edx + CPUM .Hyper.edx], eax751 mov [edx + CPUMCPU.Hyper.edx], eax 754 752 mov eax, [ecx + CPUMCTXCORE.ecx] 755 mov [edx + CPUM .Hyper.ecx], eax753 mov [edx + CPUMCPU.Hyper.ecx], eax 756 754 mov eax, [ecx + CPUMCTXCORE.esp] 757 mov [edx + CPUM .Hyper.esp], eax755 mov [edx + CPUMCPU.Hyper.esp], eax 758 756 ; selectors 759 757 mov eax, [ecx + CPUMCTXCORE.ss] 760 mov [edx + CPUM .Hyper.ss], eax758 mov [edx + CPUMCPU.Hyper.ss], eax 761 759 mov eax, [ecx + CPUMCTXCORE.gs] 762 mov [edx + CPUM .Hyper.gs], eax760 mov [edx + CPUMCPU.Hyper.gs], eax 763 761 mov eax, [ecx + CPUMCTXCORE.fs] 764 mov [edx + CPUM .Hyper.fs], eax762 mov [edx + CPUMCPU.Hyper.fs], eax 765 763 mov eax, [ecx + CPUMCTXCORE.es] 766 mov [edx + CPUM .Hyper.es], eax764 mov [edx + CPUMCPU.Hyper.es], eax 767 765 mov eax, [ecx + CPUMCTXCORE.ds] 768 mov [edx + CPUM .Hyper.ds], eax766 mov [edx + CPUMCPU.Hyper.ds], eax 769 767 mov eax, [ecx + CPUMCTXCORE.cs] 770 mov [edx + CPUM .Hyper.cs], eax768 mov [edx + CPUMCPU.Hyper.cs], eax 771 769 ; flags 772 770 mov eax, [ecx + CPUMCTXCORE.eflags] 773 mov [edx + CPUM .Hyper.eflags], eax771 mov [edx + CPUMCPU.Hyper.eflags], eax 774 772 ; eip 775 773 mov eax, [ecx + CPUMCTXCORE.eip] 776 mov [edx + CPUM .Hyper.eip], eax774 mov [edx + CPUMCPU.Hyper.eip], eax 777 775 ; jump to common worker code. 778 776 pop eax ; restore return code. … … 813 811 ; Load the CPUM pointer. 814 812 ; 815 FIXUP FIX_GC_CPUM _OFF, 1, 0816 mov edx, 0ffffffffh 817 818 pop dword [edx + CPUM .Hyper.eip] ; call return from stack813 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 814 mov edx, 0ffffffffh 815 816 pop dword [edx + CPUMCPU.Hyper.eip] ; call return from stack 819 817 jmp short vmmGCGuestToHostAsm_EIPDone 820 818 … … 822 820 vmmGCGuestToHostAsm_EIPDone: 823 821 ; general registers which we care about. 824 mov dword [edx + CPUM .Hyper.ebx], ebx825 mov dword [edx + CPUM .Hyper.esi], esi826 mov dword [edx + CPUM .Hyper.edi], edi827 mov dword [edx + CPUM .Hyper.ebp], ebp828 mov dword [edx + CPUM .Hyper.esp], esp822 mov dword [edx + CPUMCPU.Hyper.ebx], ebx 823 mov dword [edx + CPUMCPU.Hyper.esi], esi 824 mov dword [edx + CPUMCPU.Hyper.edi], edi 825 mov dword [edx + CPUMCPU.Hyper.ebp], ebp 826 mov dword [edx + CPUMCPU.Hyper.esp], esp 829 827 830 828 ; special registers which may change. … … 839 837 .if_clear_out: 840 838 %endif 841 ; str [edx + CPUM .Hyper.tr] - double fault only, and it won't be right then either.842 sldt [edx + CPUM .Hyper.ldtr]839 ; str [edx + CPUMCPU.Hyper.tr] - double fault only, and it won't be right then either. 840 sldt [edx + CPUMCPU.Hyper.ldtr] 843 841 844 842 ; No need to save CRx here. They are set dynamically according to Guest/Host requirements. … … 935 933 DEBUG_CHAR('9') 936 934 937 ; Clear high dword of the CPUM pointer935 ; Clear high dword of the CPUMCPU pointer 938 936 and rdx, 0ffffffffh 939 937 940 ; Load the CPUMCPU offset.941 mov r8, [rdx + CPUM.ulOffCPUMCPU]942 943 938 ; load final cr3 944 mov rsi, [rdx + r8 +CPUMCPU.Host.cr3]939 mov rsi, [rdx + CPUMCPU.Host.cr3] 945 940 mov cr3, rsi 946 941 DEBUG_CHAR('@') -
trunk/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac
r15962 r18927 173 173 %endif 174 174 175 CPUM_FROM_CPUMCPU(edx)176 175 ; Load new gdt so we can do a far jump after going into 64 bits mode 177 lgdt [edx + CPUM.Hyper.gdtr] 178 179 %ifdef VBOX_WITH_CRASHDUMP_MAGIC 180 CPUMCPU_FROM_CPUM(edx) 176 lgdt [edx + CPUMCPU.Hyper.gdtr] 177 178 %ifdef VBOX_WITH_CRASHDUMP_MAGIC 181 179 mov dword [edx + CPUMCPU.Guest.dr + 4*8], 4 182 CPUM_FROM_CPUMCPU(edx)183 180 %endif 184 181 … … 285 282 ; Load CPUM pointer into rdx 286 283 mov rdx, [NAME(pCpumIC) wrt rip] 284 CPUMCPU_FROM_CPUM(edx) 287 285 288 286 mov rax, cs … … 296 294 297 295 %ifdef VBOX_WITH_CRASHDUMP_MAGIC 298 CPUMCPU_FROM_CPUM(edx)299 296 mov dword [rdx + CPUMCPU.Guest.dr + 4*8], 5 300 CPUM_FROM_CPUMCPU(edx)301 297 %endif 302 298 … … 304 300 DEBUG_CHAR('7') 305 301 mov rsp, 0 306 mov eax, [rdx + CPUM.Hyper.esp] 307 mov [rdx + CPUM.Hyper.lss_esp], eax 308 lss esp, [rdx + CPUM.Hyper.lss_esp] 309 310 %ifdef VBOX_WITH_CRASHDUMP_MAGIC 311 CPUMCPU_FROM_CPUM(edx) 302 mov eax, [rdx + CPUMCPU.Hyper.esp] 303 mov [rdx + CPUMCPU.Hyper.lss_esp], eax 304 lss esp, [rdx + CPUMCPU.Hyper.lss_esp] 305 306 %ifdef VBOX_WITH_CRASHDUMP_MAGIC 312 307 mov dword [rdx + CPUMCPU.Guest.dr + 4*8], 6 313 CPUM_FROM_CPUMCPU(edx)314 308 %endif 315 309 316 310 317 311 ; load the hypervisor function address 318 mov r9, [rdx + CPUM.Hyper.eip] 319 320 CPUMCPU_FROM_CPUM(edx) 321 312 mov r9, [rdx + CPUMCPU.Hyper.eip] 313 322 314 ; Check if we need to restore the guest FPU state 323 315 mov esi, [rdx + CPUMCPU.fUseFlags] ; esi == use flags. … … 517 509 mov es, eax 518 510 519 FIXUP FIX_GC_CPUM _OFF, 1, 0511 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 520 512 mov edx, 0ffffffffh 521 CPUMCPU_FROM_CPUM(edx)522 513 mov esi, [edx + CPUMCPU.Host.cr3] 523 514 mov cr3, esi -
trunk/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac
r16859 r18927 191 191 mov ecx, [edx + CPUMCPU.Guest.cr4] 192 192 ;; @todo Switcher cleanup: Determin base CR4 during CPUMR0Init / VMMR3SelectSwitcher putting it 193 ; in CPUM .Hyper.cr4 (which isn't currently being used). That should193 ; in CPUMCPU.Hyper.cr4 (which isn't currently being used). That should 194 194 ; simplify this operation a bit (and improve locality of the data). 195 195 … … 210 210 mov cr0, eax 211 211 212 CPUM_FROM_CPUMCPU(edx)213 212 ; Load new gdt so we can do far jump to guest code after cr3 reload. 214 lgdt [edx + CPUM .Hyper.gdtr]213 lgdt [edx + CPUMCPU.Hyper.gdtr] 215 214 DEBUG_CHAR('1') ; trashes esi 216 215 217 216 ; Store the hypervisor cr3 for later loading 218 mov ebp, [edx + CPUM .Hyper.cr3]217 mov ebp, [edx + CPUMCPU.Hyper.cr3] 219 218 220 219 ;; … … 279 278 ;; Setup the rest of the VMM state. 280 279 ;; 281 FIXUP FIX_GC_CPUM _OFF, 1, 0280 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 282 281 mov edx, 0ffffffffh 283 282 ; Activate guest IDT 284 283 DEBUG_CHAR('1') 285 lidt [edx + CPUM .Hyper.idtr]284 lidt [edx + CPUMCPU.Hyper.idtr] 286 285 ; Load selectors 287 286 DEBUG_CHAR('2') … … 296 295 ; Setup stack; use the lss_esp, ss pair for lss 297 296 DEBUG_CHAR('3') 298 mov eax, [edx + CPUM .Hyper.esp]299 mov [edx + CPUM .Hyper.lss_esp], eax300 lss esp, [edx + CPUM .Hyper.lss_esp]297 mov eax, [edx + CPUMCPU.Hyper.esp] 298 mov [edx + CPUMCPU.Hyper.lss_esp], eax 299 lss esp, [edx + CPUMCPU.Hyper.lss_esp] 301 300 302 301 ; Restore TSS selector; must mark it as not busy before using ltr (!) … … 305 304 and dword [0ffffffffh], ~0200h ; clear busy flag (2nd type2 bit) 306 305 DEBUG_CHAR('5') 307 ltr word [edx + CPUM .Hyper.tr]306 ltr word [edx + CPUMCPU.Hyper.tr] 308 307 DEBUG_CHAR('6') 309 308 310 309 ; Activate the ldt (now we can safely crash). 311 lldt [edx + CPUM .Hyper.ldtr]310 lldt [edx + CPUMCPU.Hyper.ldtr] 312 311 DEBUG_CHAR('7') 313 312 314 CPUMCPU_FROM_CPUM(edx)315 313 ;; use flags. 316 314 mov esi, [edx + CPUMCPU.fUseFlags] 317 CPUM_FROM_CPUMCPU(edx)318 315 319 316 ; debug registers … … 363 360 364 361 ; General registers. 365 mov ebx, [edx + CPUM .Hyper.ebx]366 mov ebp, [edx + CPUM .Hyper.ebp]367 mov esi, [edx + CPUM .Hyper.esi]368 mov edi, [edx + CPUM .Hyper.edi]369 push dword [edx + CPUM .Hyper.eflags]362 mov ebx, [edx + CPUMCPU.Hyper.ebx] 363 mov ebp, [edx + CPUMCPU.Hyper.ebp] 364 mov esi, [edx + CPUMCPU.Hyper.esi] 365 mov edi, [edx + CPUMCPU.Hyper.edi] 366 push dword [edx + CPUMCPU.Hyper.eflags] 370 367 popfd 371 368 DEBUG_CHAR('!') … … 377 374 %ifdef DEBUG_STUFF 378 375 COM_S_PRINT ';eip=' 379 mov eax, [edx + CPUM .Hyper.eip]376 mov eax, [edx + CPUMCPU.Hyper.eip] 380 377 COM_S_DWORD_REG eax 381 378 COM_S_CHAR ';' 382 379 %endif 383 mov eax, [edx + CPUM.Hyper.eip] 380 mov eax, [edx + CPUMCPU.Hyper.eip] 381 ; callees expect CPUM ptr 382 CPUM_FROM_CPUMCPU(edx) 383 384 384 %ifdef VBOX_WITH_STATISTICS 385 385 FIXUP FIX_GC_VM_OFF, 1, VM.StatSwitcherToGC … … 411 411 DEBUG_S_CHAR('R') 412 412 DEBUG_S_CHAR('x') 413 CPUMCPU_FROM_CPUM(edx)414 413 ; save host DR0-3. 415 414 mov eax, dr0 … … 421 420 mov eax, dr3 422 421 mov [edx + CPUMCPU.Host.dr3], eax 423 CPUM_FROM_CPUMCPU(edx)424 422 425 423 ; load hyper DR0-7 426 mov ebx, [edx + CPUM .Hyper.dr]424 mov ebx, [edx + CPUMCPU.Hyper.dr] 427 425 mov dr0, ebx 428 mov ecx, [edx + CPUM .Hyper.dr + 8*1]426 mov ecx, [edx + CPUMCPU.Hyper.dr + 8*1] 429 427 mov dr1, ecx 430 mov eax, [edx + CPUM .Hyper.dr + 8*2]428 mov eax, [edx + CPUMCPU.Hyper.dr + 8*2] 431 429 mov dr2, eax 432 mov ebx, [edx + CPUM .Hyper.dr + 8*3]430 mov ebx, [edx + CPUMCPU.Hyper.dr + 8*3] 433 431 mov dr3, ebx 434 ;mov eax, [edx + CPUM .Hyper.dr + 8*6]432 ;mov eax, [edx + CPUMCPU.Hyper.dr + 8*6] 435 433 mov ecx, 0ffff0ff0h 436 434 mov dr6, ecx 437 mov eax, [edx + CPUM .Hyper.dr + 8*7]435 mov eax, [edx + CPUMCPU.Hyper.dr + 8*7] 438 436 mov dr7, eax 439 437 jmp htg_debug_regs_guest_no … … 534 532 535 533 ; 536 ; Load the CPUM pointer.537 ; 538 FIXUP FIX_GC_CPUM _OFF, 1, 0534 ; Load the CPUMCPU pointer. 535 ; 536 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 539 537 mov edx, 0ffffffffh 540 538 … … 548 546 push eax 549 547 550 CPUMCPU_FROM_CPUM(edx)551 548 mov eax, [esp + 4 + CPUMCTXCORE.eax] 552 549 mov [edx + CPUMCPU.Guest.eax], eax … … 582 579 mov dword [edx + CPUMCPU.Guest.eip], eax 583 580 pop eax 584 CPUM_FROM_CPUMCPU(edx)585 581 586 582 add esp, CPUMCTXCORE_size ; skip CPUMCTXCORE structure … … 624 620 ; Load the CPUM pointer. 625 621 ; 626 FIXUP FIX_GC_CPUM _OFF, 1, 0622 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 627 623 mov edx, 0ffffffffh 628 624 … … 630 626 ; general purpose registers 631 627 mov eax, [ecx + CPUMCTXCORE.edi] 632 mov [edx + CPUM .Hyper.edi], eax628 mov [edx + CPUMCPU.Hyper.edi], eax 633 629 mov eax, [ecx + CPUMCTXCORE.esi] 634 mov [edx + CPUM .Hyper.esi], eax630 mov [edx + CPUMCPU.Hyper.esi], eax 635 631 mov eax, [ecx + CPUMCTXCORE.ebp] 636 mov [edx + CPUM .Hyper.ebp], eax632 mov [edx + CPUMCPU.Hyper.ebp], eax 637 633 mov eax, [ecx + CPUMCTXCORE.eax] 638 mov [edx + CPUM .Hyper.eax], eax634 mov [edx + CPUMCPU.Hyper.eax], eax 639 635 mov eax, [ecx + CPUMCTXCORE.ebx] 640 mov [edx + CPUM .Hyper.ebx], eax636 mov [edx + CPUMCPU.Hyper.ebx], eax 641 637 mov eax, [ecx + CPUMCTXCORE.edx] 642 mov [edx + CPUM .Hyper.edx], eax638 mov [edx + CPUMCPU.Hyper.edx], eax 643 639 mov eax, [ecx + CPUMCTXCORE.ecx] 644 mov [edx + CPUM .Hyper.ecx], eax640 mov [edx + CPUMCPU.Hyper.ecx], eax 645 641 mov eax, [ecx + CPUMCTXCORE.esp] 646 mov [edx + CPUM .Hyper.esp], eax642 mov [edx + CPUMCPU.Hyper.esp], eax 647 643 ; selectors 648 644 mov eax, [ecx + CPUMCTXCORE.ss] 649 mov [edx + CPUM .Hyper.ss], eax645 mov [edx + CPUMCPU.Hyper.ss], eax 650 646 mov eax, [ecx + CPUMCTXCORE.gs] 651 mov [edx + CPUM .Hyper.gs], eax647 mov [edx + CPUMCPU.Hyper.gs], eax 652 648 mov eax, [ecx + CPUMCTXCORE.fs] 653 mov [edx + CPUM .Hyper.fs], eax649 mov [edx + CPUMCPU.Hyper.fs], eax 654 650 mov eax, [ecx + CPUMCTXCORE.es] 655 mov [edx + CPUM .Hyper.es], eax651 mov [edx + CPUMCPU.Hyper.es], eax 656 652 mov eax, [ecx + CPUMCTXCORE.ds] 657 mov [edx + CPUM .Hyper.ds], eax653 mov [edx + CPUMCPU.Hyper.ds], eax 658 654 mov eax, [ecx + CPUMCTXCORE.cs] 659 mov [edx + CPUM .Hyper.cs], eax655 mov [edx + CPUMCPU.Hyper.cs], eax 660 656 ; flags 661 657 mov eax, [ecx + CPUMCTXCORE.eflags] 662 mov [edx + CPUM .Hyper.eflags], eax658 mov [edx + CPUMCPU.Hyper.eflags], eax 663 659 ; eip 664 660 mov eax, [ecx + CPUMCTXCORE.eip] 665 mov [edx + CPUM .Hyper.eip], eax661 mov [edx + CPUMCPU.Hyper.eip], eax 666 662 ; jump to common worker code. 667 663 pop eax ; restore return code. … … 700 696 701 697 ; 702 ; Load the CPUM pointer.703 ; 704 FIXUP FIX_GC_CPUM _OFF, 1, 0705 mov edx, 0ffffffffh 706 707 pop dword [edx + CPUM .Hyper.eip] ; call return from stack698 ; Load the CPUMCPU pointer. 699 ; 700 FIXUP FIX_GC_CPUMCPU_OFF, 1, 0 701 mov edx, 0ffffffffh 702 703 pop dword [edx + CPUMCPU.Hyper.eip] ; call return from stack 708 704 jmp short vmmGCGuestToHostAsm_EIPDone 709 705 … … 711 707 vmmGCGuestToHostAsm_EIPDone: 712 708 ; general registers which we care about. 713 mov dword [edx + CPUM .Hyper.ebx], ebx714 mov dword [edx + CPUM .Hyper.esi], esi715 mov dword [edx + CPUM .Hyper.edi], edi716 mov dword [edx + CPUM .Hyper.ebp], ebp717 mov dword [edx + CPUM .Hyper.esp], esp709 mov dword [edx + CPUMCPU.Hyper.ebx], ebx 710 mov dword [edx + CPUMCPU.Hyper.esi], esi 711 mov dword [edx + CPUMCPU.Hyper.edi], edi 712 mov dword [edx + CPUMCPU.Hyper.ebp], ebp 713 mov dword [edx + CPUMCPU.Hyper.esp], esp 718 714 719 715 ; special registers which may change. 720 716 vmmGCGuestToHostAsm_SkipHyperRegs: 721 ; str [edx + CPUM .Hyper.tr] - double fault only, and it won't be right then either.722 sldt [edx + CPUM .Hyper.ldtr]717 ; str [edx + CPUMCPU.Hyper.tr] - double fault only, and it won't be right then either. 718 sldt [edx + CPUMCPU.Hyper.ldtr] 723 719 724 720 ; No need to save CRx here. They are set dynamically according to Guest/Host requirements. … … 746 742 ;; 747 743 mov edi, eax ; save return code in EDI (careful with COM_DWORD_REG from here on!) 748 CPUMCPU_FROM_CPUM(edx)749 744 mov ecx, [edx + CPUMCPU.Host.cr3] 750 CPUM_FROM_CPUMCPU(edx)751 745 FIXUP SWITCHER_FIX_INTER_CR3_GC, 1 752 746 mov eax, 0ffffffffh -
trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.h
r16859 r18927 62 62 #define FIX_HC_64BIT_NOCHECK 35 63 63 #define FIX_GC_64_BIT_CPUM_OFF 36 64 #define FIX_GC_CPUMCPU_OFF 37 64 65 #define FIX_THE_END 255 65 66 /** @} */ -
trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.mac
r16859 r18927 106 106 %define FIX_HC_64BIT_NOCHECK 35 107 107 %define FIX_GC_64_BIT_CPUM_OFF 36 108 %define FIX_GC_CPUMCPU_OFF 37 108 109 %define FIX_THE_END 255 109 110 ;/** @} */
Note:
See TracChangeset
for help on using the changeset viewer.