VirtualBox

儲存庫 vbox 的更動 100109


忽略:
時間撮記:
2023-6-7 下午08:21:40 (21 月 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
157802
訊息:

VMM/IEM: Make it compile and link again with VBOX_WITH_IEM_RECOMPILER=1. bugref:10369

位置:
trunk/src/VBox/VMM
檔案:
修改 3 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/Config.kmk

    r98835 r100109  
    6868 VMM_COMMON_DEFS += IEM_WITHOUT_VEX
    6969endif
    70 ifdef VBOX_WITH_IEM_TLB ## @todo VMX code doesn't compile with TLBs enabled.
     70ifdef VBOX_WITH_IEM_RECOMPILER # Selectely removing hwvirt doesn't work yet with the recompiler. Python code doesn't check #ifdefs.
     71 VMM_COMMON_DEFS += VBOX_WITH_IEM_RECOMPILER IEM_WITH_CODE_TLB IEM_WITH_DATA_TLB
     72 VMM_COMMON_DEFS += VBOX_WITH_NESTED_HWVIRT_VMX
     73 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT # Busted with TLB enabled.
     74 # VMM_COMMON_DEFS += VBOX_WITH_NESTED_HWVIRT_VMX_EPT
     75 #endif
     76 ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
     77  VMM_COMMON_DEFS += VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
     78 endif
     79else ifdef VBOX_WITH_IEM_TLB ## @todo VMX code doesn't compile with TLBs enabled.
    7180 VMM_COMMON_DEFS  += IEM_WITH_CODE_TLB IEM_WITH_DATA_TLB
    7281else
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp

    r100052 r100109  
    98419841
    98429842
    9843 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT
     9843#if defined(VBOX_WITH_NESTED_HWVIRT_VMX_EPT) || defined(VBOX_WITH_IEM_RECOMPILER) /* HACK ALERT: Linking trick. */
    98449844/**
    98459845 * Implements 'INVEPT'.
     
    98479847IEM_CIMPL_DEF_3(iemCImpl_invept, uint8_t, iEffSeg, RTGCPTR, GCPtrInveptDesc, uint64_t, uInveptType)
    98489848{
     9849# ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT
    98499850    return iemVmxInvept(pVCpu, cbInstr, iEffSeg, GCPtrInveptDesc, uInveptType, NULL /* pExitInfo */);
     9851# else
     9852    RT_NOREF(pVCpu, cbInstr, iEffSeg, GCPtrInveptDesc, uInveptType);
     9853    AssertFailedReturn(VERR_IEM_ASPECT_NOT_IMPLEMENTED);
     9854# endif
    98509855}
    98519856#endif
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThreadedRecompiler.cpp

    r100072 r100109  
    268268 */
    269269
    270 static VBOXSTRICTRC iemThreadedCompile(PVMCCV pVM, PVMCPUCC pVCpu)
    271 {
    272     RT_NOREF(pVM, pVCpu, pTb);
     270static VBOXSTRICTRC iemThreadedCompile(PVMCC pVM, PVMCPUCC pVCpu)
     271{
     272    RT_NOREF(pVM, pVCpu);
    273273    return VERR_NOT_IMPLEMENTED;
    274274}
    275275
    276276
    277 static VBOXSTRICTRC iemThreadedCompileLongJumped(PVMCCV pVM, PVMCPUCC pVCpu, VBOXSTRICTRC rcStrict)
     277static VBOXSTRICTRC iemThreadedCompileLongJumped(PVMCC pVM, PVMCPUCC pVCpu, VBOXSTRICTRC rcStrict)
    278278{
    279279    RT_NOREF(pVM, pVCpu);
     
    282282
    283283
    284 static PIEMTB iemThreadedTbLookup(PVMCCV pVM, PVMCPUCC pVCpu, RTGCPHYS GCPhysPC, uint64_t uPc)
     284static PIEMTB iemThreadedTbLookup(PVMCC pVM, PVMCPUCC pVCpu, RTGCPHYS GCPhysPC, uint64_t uPc)
    285285{
    286286    RT_NOREF(pVM, pVCpu, GCPhysPC, uPc);
     
    289289
    290290
    291 static VBOXSTRICTRC iemThreadedTbExec(PVMCCV pVM, PVMCPUCC pVCpu, PIEMTB pTb)
     291static VBOXSTRICTRC iemThreadedTbExec(PVMCC pVM, PVMCPUCC pVCpu, PIEMTB pTb)
    292292{
    293293    RT_NOREF(pVM, pVCpu, pTb);
     
    309309    pVCpu->iem.s.cbInstrBufTotal  = 0;
    310310
     311    RT_NOREF(uPc, pPhys);
     312    return 0;
    311313}
    312314
     
    315317DECL_INLINE_THROW(uint64_t) iemGetPcWithPhysAndCode(PVMCPUCC pVCpu, PRTGCPHYS pPhys)
    316318{
    317     Assert(pVCpu->cpum.GstCtx.cs.u64Base == 0 || pVCpu->iem.s.enmCpuMode != IEMMODE_64BIT);
     319    Assert(pVCpu->cpum.GstCtx.cs.u64Base == 0 || !IEM_IS_64BIT_CODE(pVCpu));
    318320    uint64_t const uPc = pVCpu->cpum.GstCtx.rip + pVCpu->cpum.GstCtx.cs.u64Base;
    319321    if (pVCpu->iem.s.pbInstrBuf)
     
    361363            {
    362364                /* Translate PC to physical address, we'll need this for both lookup and compilation. */
    363                 RTGCPHYS       GCPhysPC;
    364                 uint64_t const uPC = iemGetPcWithPhysAndCode(pVCpu, &GCPhysPC);
    365 
    366                 pTb = iemThreadedTbLookup(pVM, pVCpu, GCPhysPC, uPc);
     365                RTGCPHYS       GCPhysPc;
     366                uint64_t const uPc = iemGetPcWithPhysAndCode(pVCpu, &GCPhysPc);
     367
     368                pTb = iemThreadedTbLookup(pVM, pVCpu, GCPhysPc, uPc);
    367369                if (pTb)
    368370                    rcStrict = iemThreadedTbExec(pVM, pVCpu, pTb);
    369371                else
    370                     rcStrict = iemThreadedCompile(pVM, pVCpu, GCPhysPC, uPc);
     372                    rcStrict = iemThreadedCompile(pVM, pVCpu /*, GCPhysPc, uPc*/);
    371373                if (rcStrict == VINF_SUCCESS)
    372374                { /* likely */ }
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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