VirtualBox

Changeset 18927 in vbox for trunk/src/VBox/VMM/VMMSwitcher


Ignore:
Timestamp:
Apr 16, 2009 11:41:38 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
46003
Message:

Big step to separate VMM data structures for guest SMP. (pgm, em)

Location:
trunk/src/VBox/VMM/VMMSwitcher
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac

    r16859 r18927  
    305305    DEBUG_CHAR('b')                     ; trashes esi
    306306    ;; @todo Switcher cleanup: Determine base CR4 during CPUMR0Init / VMMR3SelectSwitcher putting it
    307     ;                          in CPUM.Hyper.cr4 (which isn't currently being used). That should
     307    ;                          in CPUMCPU.Hyper.cr4 (which isn't currently being used). That should
    308308    ;                          simplify this operation a bit (and improve locality of the data).
    309309
     
    326326
    327327    ; 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]
    329329    DEBUG_CHAR('1')                     ; trashes esi
    330330
    331331    ; Store the hypervisor cr3 for later loading
    332     mov     ebp, [rdx + CPUM.Hyper.cr3]
     332    mov     ebp, [rdx + r8 + CPUMCPU.Hyper.cr3]
    333333
    334334    ;;
     
    458458    mov     fs, eax
    459459    ; Load pCpum into EDX
    460     FIXUP FIX_GC_CPUM_OFF, 1, 0
     460    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
    461461    mov     edx, 0ffffffffh
    462462    ; Activate guest IDT
    463463    DEBUG_CHAR('2')
    464     lidt    [edx + CPUM.Hyper.idtr]
     464    lidt    [edx + CPUMCPU.Hyper.idtr]
    465465
    466466    ; Setup stack; use the lss_esp, ss pair for lss
    467467    DEBUG_CHAR('3')
    468     mov     eax, [edx + CPUM.Hyper.esp]
    469     mov     [edx + CPUM.Hyper.lss_esp], eax
    470     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]
    471471
    472472    ; Restore TSS selector; must mark it as not busy before using ltr (!)
     
    475475    and     dword [0ffffffffh], ~0200h      ; clear busy flag (2nd type2 bit)
    476476    DEBUG_CHAR('5')
    477     ltr     word [edx + CPUM.Hyper.tr]
     477    ltr     word [edx + CPUMCPU.Hyper.tr]
    478478    DEBUG_CHAR('6')
    479479
    480480    ; Activate the ldt (now we can safely crash).
    481     lldt    [edx + CPUM.Hyper.ldtr]
     481    lldt    [edx + CPUMCPU.Hyper.ldtr]
    482482    DEBUG_CHAR('7')
    483483
    484484    ;; use flags.
    485     mov     esi, [edx + CPUM.ulOffCPUMCPU]
    486     mov     esi, [edx + esi + CPUMCPU.fUseFlags]
     485    mov     esi, [edx + CPUMCPU.fUseFlags]
    487486
    488487    ; debug registers
     
    494493
    495494    ; 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]
    501500    popfd
    502501    DEBUG_CHAR('!')
     
    508507%ifdef DEBUG_STUFF
    509508    COM32_S_PRINT ';eip='
    510     mov     eax, [edx + CPUM.Hyper.eip]
     509    mov     eax, [edx + CPUMCPU.Hyper.eip]
    511510    COM32_S_DWORD_REG eax
    512511    COM32_S_CHAR ';'
    513512%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   
    515517%ifdef VBOX_WITH_STATISTICS
    516518    FIXUP FIX_GC_VM_OFF, 1, VM.StatSwitcherToGC
     
    530532    DEBUG_S_CHAR('x')
    531533    ; load hyper DR0-7
    532     mov     ebx, [edx + CPUM.Hyper.dr]
     534    mov     ebx, [edx + CPUMCPU.Hyper.dr]
    533535    mov     dr0, ebx
    534     mov     ecx, [edx + CPUM.Hyper.dr + 8*1]
     536    mov     ecx, [edx + CPUMCPU.Hyper.dr + 8*1]
    535537    mov     dr1, ecx
    536     mov     eax, [edx + CPUM.Hyper.dr + 8*2]
     538    mov     eax, [edx + CPUMCPU.Hyper.dr + 8*2]
    537539    mov     dr2, eax
    538     mov     ebx, [edx + CPUM.Hyper.dr + 8*3]
     540    mov     ebx, [edx + CPUMCPU.Hyper.dr + 8*3]
    539541    mov     dr3, ebx
    540     ;mov     eax, [edx + CPUM.Hyper.dr + 8*6]
     542    ;mov     eax, [edx + CPUMCPU.Hyper.dr + 8*6]
    541543    mov     ecx, 0ffff0ff0h
    542544    mov     dr6, ecx
    543     mov     eax, [edx + CPUM.Hyper.dr + 8*7]
     545    mov     eax, [edx + CPUMCPU.Hyper.dr + 8*7]
    544546    mov     dr7, eax
    545547    jmp     htg_debug_regs_guest_no
     
    640642
    641643    ;
    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
    648648
    649649    ; Skip return address (assumes called!)
     
    692692    ; jump to common worker code.
    693693    pop     eax                         ; restore return code.
    694     ; Load CPUM into edx again
    695     sub     edx, [edx + CPUMCPU.ulOffCPUM]
    696694
    697695    add     esp, CPUMCTXCORE_size      ; skip CPUMCTXCORE structure
     
    735733    ; Load the CPUM pointer.
    736734    ;
    737     FIXUP FIX_GC_CPUM_OFF, 1, 0
     735    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
    738736    mov     edx, 0ffffffffh
    739737
     
    741739    ; general purpose registers
    742740    mov     eax, [ecx + CPUMCTXCORE.edi]
    743     mov     [edx + CPUM.Hyper.edi], eax
     741    mov     [edx + CPUMCPU.Hyper.edi], eax
    744742    mov     eax, [ecx + CPUMCTXCORE.esi]
    745     mov     [edx + CPUM.Hyper.esi], eax
     743    mov     [edx + CPUMCPU.Hyper.esi], eax
    746744    mov     eax, [ecx + CPUMCTXCORE.ebp]
    747     mov     [edx + CPUM.Hyper.ebp], eax
     745    mov     [edx + CPUMCPU.Hyper.ebp], eax
    748746    mov     eax, [ecx + CPUMCTXCORE.eax]
    749     mov     [edx + CPUM.Hyper.eax], eax
     747    mov     [edx + CPUMCPU.Hyper.eax], eax
    750748    mov     eax, [ecx + CPUMCTXCORE.ebx]
    751     mov     [edx + CPUM.Hyper.ebx], eax
     749    mov     [edx + CPUMCPU.Hyper.ebx], eax
    752750    mov     eax, [ecx + CPUMCTXCORE.edx]
    753     mov     [edx + CPUM.Hyper.edx], eax
     751    mov     [edx + CPUMCPU.Hyper.edx], eax
    754752    mov     eax, [ecx + CPUMCTXCORE.ecx]
    755     mov     [edx + CPUM.Hyper.ecx], eax
     753    mov     [edx + CPUMCPU.Hyper.ecx], eax
    756754    mov     eax, [ecx + CPUMCTXCORE.esp]
    757     mov     [edx + CPUM.Hyper.esp], eax
     755    mov     [edx + CPUMCPU.Hyper.esp], eax
    758756    ; selectors
    759757    mov     eax, [ecx + CPUMCTXCORE.ss]
    760     mov     [edx + CPUM.Hyper.ss], eax
     758    mov     [edx + CPUMCPU.Hyper.ss], eax
    761759    mov     eax, [ecx + CPUMCTXCORE.gs]
    762     mov     [edx + CPUM.Hyper.gs], eax
     760    mov     [edx + CPUMCPU.Hyper.gs], eax
    763761    mov     eax, [ecx + CPUMCTXCORE.fs]
    764     mov     [edx + CPUM.Hyper.fs], eax
     762    mov     [edx + CPUMCPU.Hyper.fs], eax
    765763    mov     eax, [ecx + CPUMCTXCORE.es]
    766     mov     [edx + CPUM.Hyper.es], eax
     764    mov     [edx + CPUMCPU.Hyper.es], eax
    767765    mov     eax, [ecx + CPUMCTXCORE.ds]
    768     mov     [edx + CPUM.Hyper.ds], eax
     766    mov     [edx + CPUMCPU.Hyper.ds], eax
    769767    mov     eax, [ecx + CPUMCTXCORE.cs]
    770     mov     [edx + CPUM.Hyper.cs], eax
     768    mov     [edx + CPUMCPU.Hyper.cs], eax
    771769    ; flags
    772770    mov     eax, [ecx + CPUMCTXCORE.eflags]
    773     mov     [edx + CPUM.Hyper.eflags], eax
     771    mov     [edx + CPUMCPU.Hyper.eflags], eax
    774772    ; eip
    775773    mov     eax, [ecx + CPUMCTXCORE.eip]
    776     mov     [edx + CPUM.Hyper.eip], eax
     774    mov     [edx + CPUMCPU.Hyper.eip], eax
    777775    ; jump to common worker code.
    778776    pop     eax                         ; restore return code.
     
    813811    ; Load the CPUM pointer.
    814812    ;
    815     FIXUP FIX_GC_CPUM_OFF, 1, 0
    816     mov     edx, 0ffffffffh
    817 
    818     pop     dword [edx + CPUM.Hyper.eip] ; call return from stack
     813    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
     814    mov     edx, 0ffffffffh
     815
     816    pop     dword [edx + CPUMCPU.Hyper.eip] ; call return from stack
    819817    jmp short vmmGCGuestToHostAsm_EIPDone
    820818
     
    822820vmmGCGuestToHostAsm_EIPDone:
    823821    ; general registers which we care about.
    824     mov     dword [edx + CPUM.Hyper.ebx], ebx
    825     mov     dword [edx + CPUM.Hyper.esi], esi
    826     mov     dword [edx + CPUM.Hyper.edi], edi
    827     mov     dword [edx + CPUM.Hyper.ebp], ebp
    828     mov     dword [edx + CPUM.Hyper.esp], esp
     822    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
    829827
    830828    ; special registers which may change.
     
    839837.if_clear_out:
    840838%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]
    843841
    844842    ; No need to save CRx here. They are set dynamically according to Guest/Host requirements.
     
    935933    DEBUG_CHAR('9')
    936934
    937     ; Clear high dword of the CPUM pointer
     935    ; Clear high dword of the CPUMCPU pointer
    938936    and     rdx, 0ffffffffh
    939937
    940     ; Load the CPUMCPU offset.
    941     mov     r8, [rdx + CPUM.ulOffCPUMCPU]
    942 
    943938    ; load final cr3
    944     mov     rsi, [rdx + r8 + CPUMCPU.Host.cr3]
     939    mov     rsi, [rdx + CPUMCPU.Host.cr3]
    945940    mov     cr3, rsi
    946941    DEBUG_CHAR('@')
  • trunk/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac

    r15962 r18927  
    173173%endif
    174174
    175     CPUM_FROM_CPUMCPU(edx)
    176175    ; 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
    181179    mov dword [edx + CPUMCPU.Guest.dr + 4*8], 4
    182     CPUM_FROM_CPUMCPU(edx)
    183180%endif
    184181
     
    285282    ; Load CPUM pointer into rdx
    286283    mov     rdx, [NAME(pCpumIC) wrt rip]
     284    CPUMCPU_FROM_CPUM(edx)
    287285
    288286    mov     rax, cs
     
    296294
    297295%ifdef VBOX_WITH_CRASHDUMP_MAGIC
    298     CPUMCPU_FROM_CPUM(edx)
    299296    mov dword [rdx + CPUMCPU.Guest.dr + 4*8], 5
    300     CPUM_FROM_CPUMCPU(edx)
    301297%endif
    302298
     
    304300    DEBUG_CHAR('7')
    305301    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
    312307    mov dword [rdx + CPUMCPU.Guest.dr + 4*8], 6
    313     CPUM_FROM_CPUMCPU(edx)
    314308%endif
    315309
    316310
    317311    ; 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   
    322314    ; Check if we need to restore the guest FPU state
    323315    mov     esi, [rdx + CPUMCPU.fUseFlags] ; esi == use flags.
     
    517509    mov     es, eax
    518510
    519     FIXUP FIX_GC_CPUM_OFF, 1, 0
     511    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
    520512    mov     edx, 0ffffffffh
    521     CPUMCPU_FROM_CPUM(edx)
    522513    mov     esi, [edx + CPUMCPU.Host.cr3]
    523514    mov     cr3, esi
  • trunk/src/VBox/VMM/VMMSwitcher/PAEand32Bit.mac

    r16859 r18927  
    191191    mov     ecx, [edx + CPUMCPU.Guest.cr4]
    192192    ;; @todo Switcher cleanup: Determin base CR4 during CPUMR0Init / VMMR3SelectSwitcher putting it
    193     ;                          in CPUM.Hyper.cr4 (which isn't currently being used). That should
     193    ;                          in CPUMCPU.Hyper.cr4 (which isn't currently being used). That should
    194194    ;                          simplify this operation a bit (and improve locality of the data).
    195195
     
    210210    mov     cr0, eax
    211211
    212     CPUM_FROM_CPUMCPU(edx)
    213212    ; 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]
    215214    DEBUG_CHAR('1')                     ; trashes esi
    216215
    217216    ; Store the hypervisor cr3 for later loading
    218     mov     ebp, [edx + CPUM.Hyper.cr3]
     217    mov     ebp, [edx + CPUMCPU.Hyper.cr3]
    219218   
    220219    ;;
     
    279278    ;; Setup the rest of the VMM state.
    280279    ;;
    281     FIXUP FIX_GC_CPUM_OFF, 1, 0
     280    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
    282281    mov     edx, 0ffffffffh
    283282    ; Activate guest IDT
    284283    DEBUG_CHAR('1')
    285     lidt    [edx + CPUM.Hyper.idtr]
     284    lidt    [edx + CPUMCPU.Hyper.idtr]
    286285    ; Load selectors
    287286    DEBUG_CHAR('2')
     
    296295    ; Setup stack; use the lss_esp, ss pair for lss
    297296    DEBUG_CHAR('3')
    298     mov     eax, [edx + CPUM.Hyper.esp]
    299     mov     [edx + CPUM.Hyper.lss_esp], eax
    300     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]
    301300
    302301    ; Restore TSS selector; must mark it as not busy before using ltr (!)
     
    305304    and     dword [0ffffffffh], ~0200h      ; clear busy flag (2nd type2 bit)
    306305    DEBUG_CHAR('5')
    307     ltr     word [edx + CPUM.Hyper.tr]
     306    ltr     word [edx + CPUMCPU.Hyper.tr]
    308307    DEBUG_CHAR('6')
    309308
    310309    ; Activate the ldt (now we can safely crash).
    311     lldt    [edx + CPUM.Hyper.ldtr]
     310    lldt    [edx + CPUMCPU.Hyper.ldtr]
    312311    DEBUG_CHAR('7')
    313312
    314     CPUMCPU_FROM_CPUM(edx)
    315313    ;; use flags.
    316314    mov     esi, [edx + CPUMCPU.fUseFlags]
    317     CPUM_FROM_CPUMCPU(edx)
    318315
    319316    ; debug registers
     
    363360
    364361    ; 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]
    370367    popfd
    371368    DEBUG_CHAR('!')
     
    377374%ifdef DEBUG_STUFF
    378375    COM_S_PRINT ';eip='
    379     mov     eax, [edx + CPUM.Hyper.eip]
     376    mov     eax, [edx + CPUMCPU.Hyper.eip]
    380377    COM_S_DWORD_REG eax
    381378    COM_S_CHAR ';'
    382379%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   
    384384%ifdef VBOX_WITH_STATISTICS
    385385    FIXUP FIX_GC_VM_OFF, 1, VM.StatSwitcherToGC
     
    411411    DEBUG_S_CHAR('R')
    412412    DEBUG_S_CHAR('x')
    413     CPUMCPU_FROM_CPUM(edx)
    414413    ; save host DR0-3.
    415414    mov     eax, dr0
     
    421420    mov     eax, dr3
    422421    mov     [edx + CPUMCPU.Host.dr3], eax
    423     CPUM_FROM_CPUMCPU(edx)
    424422   
    425423    ; load hyper DR0-7
    426     mov     ebx, [edx + CPUM.Hyper.dr]
     424    mov     ebx, [edx + CPUMCPU.Hyper.dr]
    427425    mov     dr0, ebx
    428     mov     ecx, [edx + CPUM.Hyper.dr + 8*1]
     426    mov     ecx, [edx + CPUMCPU.Hyper.dr + 8*1]
    429427    mov     dr1, ecx
    430     mov     eax, [edx + CPUM.Hyper.dr + 8*2]
     428    mov     eax, [edx + CPUMCPU.Hyper.dr + 8*2]
    431429    mov     dr2, eax
    432     mov     ebx, [edx + CPUM.Hyper.dr + 8*3]
     430    mov     ebx, [edx + CPUMCPU.Hyper.dr + 8*3]
    433431    mov     dr3, ebx
    434     ;mov     eax, [edx + CPUM.Hyper.dr + 8*6]
     432    ;mov     eax, [edx + CPUMCPU.Hyper.dr + 8*6]
    435433    mov     ecx, 0ffff0ff0h
    436434    mov     dr6, ecx
    437     mov     eax, [edx + CPUM.Hyper.dr + 8*7]
     435    mov     eax, [edx + CPUMCPU.Hyper.dr + 8*7]
    438436    mov     dr7, eax
    439437    jmp     htg_debug_regs_guest_no
     
    534532
    535533    ;
    536     ; Load the CPUM pointer.
    537     ;
    538     FIXUP FIX_GC_CPUM_OFF, 1, 0
     534    ; Load the CPUMCPU pointer.
     535    ;
     536    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
    539537    mov     edx, 0ffffffffh
    540538
     
    548546    push    eax
    549547
    550     CPUMCPU_FROM_CPUM(edx)
    551548    mov     eax, [esp + 4 + CPUMCTXCORE.eax]
    552549    mov     [edx + CPUMCPU.Guest.eax], eax
     
    582579    mov     dword [edx + CPUMCPU.Guest.eip], eax
    583580    pop     eax
    584     CPUM_FROM_CPUMCPU(edx)
    585581
    586582    add     esp, CPUMCTXCORE_size      ; skip CPUMCTXCORE structure
     
    624620    ; Load the CPUM pointer.
    625621    ;
    626     FIXUP FIX_GC_CPUM_OFF, 1, 0
     622    FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
    627623    mov     edx, 0ffffffffh
    628624
     
    630626    ; general purpose registers
    631627    mov     eax, [ecx + CPUMCTXCORE.edi]
    632     mov     [edx + CPUM.Hyper.edi], eax
     628    mov     [edx + CPUMCPU.Hyper.edi], eax
    633629    mov     eax, [ecx + CPUMCTXCORE.esi]
    634     mov     [edx + CPUM.Hyper.esi], eax
     630    mov     [edx + CPUMCPU.Hyper.esi], eax
    635631    mov     eax, [ecx + CPUMCTXCORE.ebp]
    636     mov     [edx + CPUM.Hyper.ebp], eax
     632    mov     [edx + CPUMCPU.Hyper.ebp], eax
    637633    mov     eax, [ecx + CPUMCTXCORE.eax]
    638     mov     [edx + CPUM.Hyper.eax], eax
     634    mov     [edx + CPUMCPU.Hyper.eax], eax
    639635    mov     eax, [ecx + CPUMCTXCORE.ebx]
    640     mov     [edx + CPUM.Hyper.ebx], eax
     636    mov     [edx + CPUMCPU.Hyper.ebx], eax
    641637    mov     eax, [ecx + CPUMCTXCORE.edx]
    642     mov     [edx + CPUM.Hyper.edx], eax
     638    mov     [edx + CPUMCPU.Hyper.edx], eax
    643639    mov     eax, [ecx + CPUMCTXCORE.ecx]
    644     mov     [edx + CPUM.Hyper.ecx], eax
     640    mov     [edx + CPUMCPU.Hyper.ecx], eax
    645641    mov     eax, [ecx + CPUMCTXCORE.esp]
    646     mov     [edx + CPUM.Hyper.esp], eax
     642    mov     [edx + CPUMCPU.Hyper.esp], eax
    647643    ; selectors
    648644    mov     eax, [ecx + CPUMCTXCORE.ss]
    649     mov     [edx + CPUM.Hyper.ss], eax
     645    mov     [edx + CPUMCPU.Hyper.ss], eax
    650646    mov     eax, [ecx + CPUMCTXCORE.gs]
    651     mov     [edx + CPUM.Hyper.gs], eax
     647    mov     [edx + CPUMCPU.Hyper.gs], eax
    652648    mov     eax, [ecx + CPUMCTXCORE.fs]
    653     mov     [edx + CPUM.Hyper.fs], eax
     649    mov     [edx + CPUMCPU.Hyper.fs], eax
    654650    mov     eax, [ecx + CPUMCTXCORE.es]
    655     mov     [edx + CPUM.Hyper.es], eax
     651    mov     [edx + CPUMCPU.Hyper.es], eax
    656652    mov     eax, [ecx + CPUMCTXCORE.ds]
    657     mov     [edx + CPUM.Hyper.ds], eax
     653    mov     [edx + CPUMCPU.Hyper.ds], eax
    658654    mov     eax, [ecx + CPUMCTXCORE.cs]
    659     mov     [edx + CPUM.Hyper.cs], eax
     655    mov     [edx + CPUMCPU.Hyper.cs], eax
    660656    ; flags
    661657    mov     eax, [ecx + CPUMCTXCORE.eflags]
    662     mov     [edx + CPUM.Hyper.eflags], eax
     658    mov     [edx + CPUMCPU.Hyper.eflags], eax
    663659    ; eip
    664660    mov     eax, [ecx + CPUMCTXCORE.eip]
    665     mov     [edx + CPUM.Hyper.eip], eax
     661    mov     [edx + CPUMCPU.Hyper.eip], eax
    666662    ; jump to common worker code.
    667663    pop     eax                         ; restore return code.
     
    700696
    701697    ;
    702     ; Load the CPUM pointer.
    703     ;
    704     FIXUP FIX_GC_CPUM_OFF, 1, 0
    705     mov     edx, 0ffffffffh
    706 
    707     pop     dword [edx + CPUM.Hyper.eip] ; call return from stack
     698    ; 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
    708704    jmp short vmmGCGuestToHostAsm_EIPDone
    709705
     
    711707vmmGCGuestToHostAsm_EIPDone:
    712708    ; general registers which we care about.
    713     mov     dword [edx + CPUM.Hyper.ebx], ebx
    714     mov     dword [edx + CPUM.Hyper.esi], esi
    715     mov     dword [edx + CPUM.Hyper.edi], edi
    716     mov     dword [edx + CPUM.Hyper.ebp], ebp
    717     mov     dword [edx + CPUM.Hyper.esp], esp
     709    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
    718714
    719715    ; special registers which may change.
    720716vmmGCGuestToHostAsm_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]
    723719
    724720    ; No need to save CRx here. They are set dynamically according to Guest/Host requirements.
     
    746742    ;;
    747743    mov     edi, eax                    ; save return code in EDI (careful with COM_DWORD_REG from here on!)
    748     CPUMCPU_FROM_CPUM(edx)
    749744    mov     ecx, [edx + CPUMCPU.Host.cr3]
    750     CPUM_FROM_CPUMCPU(edx)
    751745    FIXUP SWITCHER_FIX_INTER_CR3_GC, 1
    752746    mov     eax, 0ffffffffh
  • trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.h

    r16859 r18927  
    6262#define FIX_HC_64BIT_NOCHECK    35
    6363#define FIX_GC_64_BIT_CPUM_OFF  36
     64#define FIX_GC_CPUMCPU_OFF      37
    6465#define FIX_THE_END             255
    6566/** @} */
  • trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.mac

    r16859 r18927  
    106106%define FIX_HC_64BIT_NOCHECK    35
    107107%define FIX_GC_64_BIT_CPUM_OFF  36
     108%define FIX_GC_CPUMCPU_OFF      37
    108109%define FIX_THE_END             255
    109110;/** @} */
Note: See TracChangeset for help on using the changeset viewer.

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