VirtualBox

Ignore:
Timestamp:
Apr 12, 2011 11:19:47 AM (14 years ago)
Author:
vboxsync
Message:

EFI64: initialization of task register before switch to compatible mode. (xTracker/5643).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Thunk/EfiThunk.asm

    r28800 r36650  
    7676        dw      0xffff, 0, 0x9300, 0x00cf       ; 32 bit flat stack segment (0x30)
    7777        dw      0xffff, 0, 0x9a00, 0x00af       ; 64 bit flat code segment (0x38)
    78         dw      0,      0, 0,      0            ; ditto
     78        dw      0xffff, 0, 0x8900, 0x0080       ; 64 bit TSS descriptor (0x40)
    7979        dw      0,      0, 0,      0            ; ditto
    8080
     
    9292        db      0x0f                            ; base  23:16
    9393        db      0x00                            ; unused
    94        
     94
    9595BITS 32
    9696
     
    224224%endmacro
    225225
    226 %define base 0x800000;0xfffff000 
     226%define base 0x800000;0xfffff000
    227227        mov ecx, 0x800 ; pde size
    228228        mov ebx, base - (6 << X86_PAGE_4K_SHIFT)
    229229        xor eax, eax
    230         ;; or flags to eax 
    231         or eax, (X86_PDE_P|X86_PDE_A|X86_PDE_PS|X86_PDE_PCD|X86_PDE_RW|RT_BIT(6)) 
     230        ;; or flags to eax
     231        or eax, (X86_PDE_P|X86_PDE_A|X86_PDE_PS|X86_PDE_PCD|X86_PDE_RW|RT_BIT(6))
    232232        fill_pkt (1 << X86_PAGE_2M_SHIFT)
    233233
    234234        ;; pdpt (1st 4 entries describe 4Gb)
    235235        mov ebx, base - (2 << X86_PAGE_4K_SHIFT)
    236         mov eax, base - (6 << X86_PAGE_4K_SHIFT) ;; 
    237         or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
    238         mov [ebx],eax
    239         xor edx,edx
    240         mov [ebx + 4], edx
    241         add ebx, 8
    242 
    243         mov eax, base - 5 * (1 << X86_PAGE_4K_SHIFT) ;; 
    244         or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
    245         mov [ebx],eax
    246         xor edx,edx
    247         mov [ebx + 4], edx
    248         add ebx, 8
    249 
    250         mov eax, base - 4 * (1 << X86_PAGE_4K_SHIFT) ;; 
    251         or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
    252         mov [ebx],eax
    253         xor edx,edx
    254         mov [ebx + 4], edx
    255         add ebx, 8
    256 
    257         mov eax, base - 3 * (1 << X86_PAGE_4K_SHIFT) ;; 
     236        mov eax, base - (6 << X86_PAGE_4K_SHIFT) ;;
     237        or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
     238        mov [ebx],eax
     239        xor edx,edx
     240        mov [ebx + 4], edx
     241        add ebx, 8
     242
     243        mov eax, base - 5 * (1 << X86_PAGE_4K_SHIFT) ;;
     244        or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
     245        mov [ebx],eax
     246        xor edx,edx
     247        mov [ebx + 4], edx
     248        add ebx, 8
     249
     250        mov eax, base - 4 * (1 << X86_PAGE_4K_SHIFT) ;;
     251        or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
     252        mov [ebx],eax
     253        xor edx,edx
     254        mov [ebx + 4], edx
     255        add ebx, 8
     256
     257        mov eax, base - 3 * (1 << X86_PAGE_4K_SHIFT) ;;
    258258        or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
    259259        mov [ebx],eax
     
    264264        mov ecx, 0x1f7 ; pdte size
    265265        mov ebx, base - 2 * (1 << X86_PAGE_4K_SHIFT) + 4 * 8
    266         mov eax, base - 6 * (1 << X86_PAGE_4K_SHIFT);; 
    267         or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
    268         ;; or flags to eax 
     266        mov eax, base - 6 * (1 << X86_PAGE_4K_SHIFT);;
     267        or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD)
     268        ;; or flags to eax
    269269        fill_pkt 3 * (1 << X86_PAGE_4K_SHIFT)
    270        
     270
    271271        mov ecx, 0x200 ; pml4 size
    272272        mov ebx, base - (1 << X86_PAGE_4K_SHIFT)
    273         mov eax, base - 2 * (1 << X86_PAGE_4K_SHIFT) ;; 
     273        mov eax, base - 2 * (1 << X86_PAGE_4K_SHIFT) ;;
    274274        or eax, (X86_PML4E_P|X86_PML4E_PCD|X86_PML4E_A|X86_PML4E_RW)
    275         ;; or flags to eax 
     275        ;; or flags to eax
    276276        fill_pkt 0
    277277
     
    283283        or eax, X86_CR4_PAE|X86_CR4_OSFSXR|X86_CR4_OSXMMEEXCPT
    284284        mov cr4,eax
    285        
     285
    286286        mov ecx, MSR_K6_EFER
    287287        rdmsr
    288288        or  eax, MSR_K6_EFER_LME
    289289        wrmsr
     290
     291        mov ax, 0x40
     292        ltr ax
    290293
    291294        mov     eax, cr0
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