VirtualBox

Changeset 2756 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
May 22, 2007 8:25:23 AM (18 years ago)
Author:
vboxsync
Message:

Manually save and restore GDTR & IDTR.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HWACCMR0A.asm

    r2751 r2756  
    188188    push    xSI
    189189
     190    ; VMX only saves the base of the GDTR & IDTR and resets the limit to 0xffff; we must restore the limit correctly!
     191    sub     xSP, xS*2
     192    sgdt    [xSP]
     193
     194    sub     xSP, xS*2
     195    sidt    [xSP]
     196
    190197    ; Save LDTR
    191198    xor     eax, eax
     
    218225    jnc     .vmxstart_good
    219226
     227    ; Restore base and limit of the IDTR & GDTR
     228    lidt    [xSP]
     229    add     xSP, xS*2
     230    lgdt    [xSP]
     231    add     xSP, xS*2
     232
    220233    pop     xAX         ; saved LDTR
    221234    lldt    ax
     
    233246.vmxstart_good:
    234247    jnz     .vmxstart_success
     248
     249    ; Restore base and limit of the IDTR & GDTR
     250    lidt    [xSP]
     251    add     xSP, xS*2
     252    lgdt    [xSP]
     253    add     xSP, xS*2
    235254
    236255    pop     xAX         ; saved LDTR
     
    263282    pop     dword [ss:xDI + CPUMCTX.edi]        ; the guest edi we pushed above
    264283%endif
     284
     285    ; Restore base and limit of the IDTR & GDTR
     286    lidt    [xSP]
     287    add     xSP, xS*2
     288    lgdt    [xSP]
     289    add     xSP, xS*2
    265290
    266291    pop     xAX         ; saved LDTR
     
    337362    push    xSI
    338363
     364    ; VMX only saves the base of the GDTR & IDTR and resets the limit to 0xffff; we must restore the limit correctly!
     365    sub     xSP, xS*2
     366    sgdt    [xSP]
     367
     368    sub     xSP, xS*2
     369    sidt    [xSP]
     370
    339371    ; Save LDTR
    340372    xor     eax, eax
     
    367399    jnc     vmresume_good
    368400
     401    ; Restore base and limit of the IDTR & GDTR
     402    lidt    [xSP]
     403    add     xSP, xS*2
     404    lgdt    [xSP]
     405    add     xSP, xS*2
     406
    369407    pop     xAX                         ; saved LDTR
    370408    lldt    ax
     
    382420vmresume_good:
    383421    jnz     vmresume_success
     422
     423    ; Restore base and limit of the IDTR & GDTR
     424    lidt    [xSP]
     425    add     xSP, xS*2
     426    lgdt    [xSP]
     427    add     xSP, xS*2
    384428
    385429    pop     xAX                         ; saved LDTR
     
    412456    pop     dword [ss:xDI + CPUMCTX.edi]        ; the guest edi we pushed above
    413457%endif
     458
     459    ; Restore base and limit of the IDTR & GDTR
     460    lidt    [xSP]
     461    add     xSP, xS*2
     462    lgdt    [xSP]
     463    add     xSP, xS*2
    414464
    415465    pop     xAX          ; saved LDTR
Note: See TracChangeset for help on using the changeset viewer.

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