VirtualBox

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


Ignore:
Timestamp:
Jan 16, 2018 7:05:36 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120319
Message:

updates (bugref:9087)

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:mergeinfo
      •  

        old new  
        88/branches/VBox-5.0:104445,104938,104943,104950,104952-104953,104987-104988,104990,106453
        99/branches/VBox-5.1:112367,115992,116543,116550,116568,116573
         10/branches/VBox-5.2:120083,120099,120213,120221,120239
        1011/branches/andy/draganddrop:90781-91268
        1112/branches/andy/guestctrl20:78916,78930
  • trunk/src/VBox

    • Property svn:mergeinfo
      •  

        old new  
        88/branches/VBox-5.0/src/VBox:104938,104943,104950,104987-104988,104990,106453
        99/branches/VBox-5.1/src/VBox:112367,116543,116550,116568,116573
         10/branches/VBox-5.2/src/VBox:120083,120099,120213,120221,120239
        1011/branches/andy/draganddrop/src/VBox:90781-91268
        1112/branches/andy/guestctrl20/src/VBox:78916,78930
  • trunk/src/VBox/VMM/VMMR0/HMR0A.asm

    r69221 r70606  
    4949; Use define because I'm too lazy to convert the struct.
    5050%define XMM_OFF_IN_X86FXSTATE   160
     51
     52;; Spectre filler for 32-bit mode.
     53; Some user space address that points to a 4MB page boundrary in hope that it
     54; will somehow make it less useful.
     55%define SPECTRE_FILLER32        0x227fffff
     56;; Spectre filler for 64-bit mode.
     57; Choosen to be an invalid address (also with 5 level paging).
     58%define SPECTRE_FILLER64        0x02204204207fffff
     59;; Spectre filler for the current CPU mode.
     60%ifdef RT_ARCH_AMD64
     61 %define SPECTRE_FILLER         SPECTRE_FILLER64
     62%else
     63 %define SPECTRE_FILLER         SPECTRE_FILLER32
     64%endif
    5165
    5266;;
     
    224238 %define MYPOPSEGS      MYPOPSEGS32
    225239%endif
     240
     241;;
     242; Creates an indirect branch prediction barrier on CPUs that need and supports that.
     243; @clobbers eax, edx, ecx
     244; @param    1   How to address CPUMCTX.
     245; @param    2   Which flag to test for (CPUMCTX_WSF_IBPB_ENTRY or CPUMCTX_WSF_IBPB_EXIT)
     246%macro INDIRECT_BRANCH_PREDICTION_BARRIER 2
     247    test    byte [%1 + CPUMCTX.fWorldSwitcher], %2
     248    jz      %%no_indirect_branch_barrier
     249    mov     ecx, MSR_IA32_PRED_CMD
     250    mov     eax, MSR_IA32_PRED_CMD_F_IBPB
     251    xor     edx, edx
     252    wrmsr
     253%%no_indirect_branch_barrier:
     254%endmacro
    226255
    227256
     
    11851214
    11861215    mov     [ss:xDI + CPUMCTX.eax], eax
     1216    mov     xAX, SPECTRE_FILLER
    11871217    mov     [ss:xDI + CPUMCTX.ebx], ebx
     1218    mov     xBX, xAX
    11881219    mov     [ss:xDI + CPUMCTX.ecx], ecx
     1220    mov     xCX, xAX
    11891221    mov     [ss:xDI + CPUMCTX.edx], edx
     1222    mov     xDX, xAX
    11901223    mov     [ss:xDI + CPUMCTX.esi], esi
     1224    mov     xSI, xAX
    11911225    mov     [ss:xDI + CPUMCTX.ebp], ebp
     1226    mov     xBP, xAX
    11921227    mov     xAX, cr2
    11931228    mov     [ss:xDI + CPUMCTX.cr2], xAX
     
    11991234    pop     dword [ss:xDI + CPUMCTX.edi]        ; The guest edi we pushed above.
    12001235 %endif
     1236
     1237    ; Fight spectre.
     1238    INDIRECT_BRANCH_PREDICTION_BARRIER ss:xDI, CPUMCTX_WSF_IBPB_EXIT
    12011239
    12021240 %ifndef VMX_SKIP_TR
     
    14161454    ; Don't mess with ESP anymore!!!
    14171455
     1456    ; Fight spectre.
     1457    INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
     1458
    14181459    ; Load guest general purpose registers.
    14191460    mov     eax, [xSI + CPUMCTX.eax]
     
    14901531
    14911532    mov     qword [xDI + CPUMCTX.eax], rax
     1533    mov     rax, SPECTRE_FILLER64
    14921534    mov     qword [xDI + CPUMCTX.ebx], rbx
     1535    mov     rbx, rax
    14931536    mov     qword [xDI + CPUMCTX.ecx], rcx
     1537    mov     rcx, rax
    14941538    mov     qword [xDI + CPUMCTX.edx], rdx
     1539    mov     rdx, rax
    14951540    mov     qword [xDI + CPUMCTX.esi], rsi
     1541    mov     rsi, rax
    14961542    mov     qword [xDI + CPUMCTX.ebp], rbp
     1543    mov     rbp, rax
    14971544    mov     qword [xDI + CPUMCTX.r8],  r8
     1545    mov     r8, rax
    14981546    mov     qword [xDI + CPUMCTX.r9],  r9
     1547    mov     r9, rax
    14991548    mov     qword [xDI + CPUMCTX.r10], r10
     1549    mov     r10, rax
    15001550    mov     qword [xDI + CPUMCTX.r11], r11
     1551    mov     r11, rax
    15011552    mov     qword [xDI + CPUMCTX.r12], r12
     1553    mov     r12, rax
    15021554    mov     qword [xDI + CPUMCTX.r13], r13
     1555    mov     r13, rax
    15031556    mov     qword [xDI + CPUMCTX.r14], r14
     1557    mov     r14, rax
    15041558    mov     qword [xDI + CPUMCTX.r15], r15
     1559    mov     r15, rax
    15051560    mov     rax, cr2
    15061561    mov     qword [xDI + CPUMCTX.cr2], rax
     
    15081563    pop     xAX                                 ; The guest rdi we pushed above
    15091564    mov     qword [xDI + CPUMCTX.edi], rax
     1565
     1566    ; Fight spectre.
     1567    INDIRECT_BRANCH_PREDICTION_BARRIER xDI, CPUMCTX_WSF_IBPB_EXIT
    15101568
    15111569 %ifndef VMX_SKIP_TR
     
    17041762    ; Note: assumes success!
    17051763    ; Don't mess with ESP anymore!!!
     1764
     1765    ; Fight spectre.
     1766    INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
    17061767
    17071768    ; Load guest general purpose registers.
     
    18331894    vmsave
    18341895
     1896    ; Fight spectre.
     1897    INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
     1898
    18351899    ; Setup xAX for VMLOAD.
    18361900    mov     xAX, [xBP + xCB * 2 + RTHCPHYS_CB]      ; HCPhysVmcb (64 bits physical address; x86: take low dword only)
     
    18701934
    18711935    mov     [ss:xAX + CPUMCTX.ebx], ebx
     1936    mov     xBX, SPECTRE_FILLER
    18721937    mov     [ss:xAX + CPUMCTX.ecx], ecx
     1938    mov     xCX, xBX
    18731939    mov     [ss:xAX + CPUMCTX.edx], edx
     1940    mov     xDX, xBX
    18741941    mov     [ss:xAX + CPUMCTX.esi], esi
     1942    mov     xSI, xBX
    18751943    mov     [ss:xAX + CPUMCTX.edi], edi
     1944    mov     xDI, xBX
    18761945    mov     [ss:xAX + CPUMCTX.ebp], ebp
     1946    mov     xBP, xBX
     1947
     1948    ; Fight spectre.  Note! Trashes xAX!
     1949    INDIRECT_BRANCH_PREDICTION_BARRIER ss:xAX, CPUMCTX_WSF_IBPB_EXIT
    18771950
    18781951    ; Restore the host xcr0 if necessary.
     
    19782051    vmsave
    19792052
     2053    ; Fight spectre.
     2054    INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY
     2055
    19802056    ; Setup rax for VMLOAD.
    19812057    mov     rax, [rbp + xCB * 2 + RTHCPHYS_CB]      ; HCPhysVmcb (64 bits physical address; take low dword only)
     
    20222098
    20232099    mov     qword [rax + CPUMCTX.ebx], rbx
     2100    mov     rbx, SPECTRE_FILLER64
    20242101    mov     qword [rax + CPUMCTX.ecx], rcx
     2102    mov     rcx, rbx
    20252103    mov     qword [rax + CPUMCTX.edx], rdx
     2104    mov     rdx, rbx
    20262105    mov     qword [rax + CPUMCTX.esi], rsi
     2106    mov     rsi, rbx
    20272107    mov     qword [rax + CPUMCTX.edi], rdi
     2108    mov     rdi, rbx
    20282109    mov     qword [rax + CPUMCTX.ebp], rbp
     2110    mov     rbp, rbx
    20292111    mov     qword [rax + CPUMCTX.r8],  r8
     2112    mov     r8, rbx
    20302113    mov     qword [rax + CPUMCTX.r9],  r9
     2114    mov     r9, rbx
    20312115    mov     qword [rax + CPUMCTX.r10], r10
     2116    mov     r10, rbx
    20322117    mov     qword [rax + CPUMCTX.r11], r11
     2118    mov     r11, rbx
    20332119    mov     qword [rax + CPUMCTX.r12], r12
     2120    mov     r12, rbx
    20342121    mov     qword [rax + CPUMCTX.r13], r13
     2122    mov     r13, rbx
    20352123    mov     qword [rax + CPUMCTX.r14], r14
     2124    mov     r14, rbx
    20362125    mov     qword [rax + CPUMCTX.r15], r15
     2126    mov     r15, rbx
     2127
     2128    ; Fight spectre.  Note! Trashes rax!
     2129    INDIRECT_BRANCH_PREDICTION_BARRIER rax, CPUMCTX_WSF_IBPB_EXIT
    20372130
    20382131    ; Restore the host xcr0 if necessary.
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