VirtualBox

Changeset 42420 in vbox


Ignore:
Timestamp:
Jul 26, 2012 5:33:01 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
79521
Message:

Eliminating CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID and CPUMAreHiddenSelRegsValid. Addressing some LDTR and TR things (saved stated, transition to REM).

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/include/VBox/err.h

    r42396 r42420  
    592592/** Incompatible CPUM configuration. */
    593593#define VERR_CPUM_INCOMPATIBLE_CONFIG           (-1751)
     594/** CPUMR3DisasmInstrCPU unexpectedly failed to determin the hidden
     595 * parts of the CS register. */
     596#define VERR_CPUM_HIDDEN_CS_LOAD_ERROR          (-1752)
    594597/** @} */
    595598
  • TabularUnified trunk/include/VBox/vmm/cpum.h

    r42407 r42420  
    356356VMMDECL(int)            CPUMHandleLazyFPU(PVMCPU pVCpu);
    357357
    358 /** @name Changed flags
     358/** @name Changed flags.
    359359 * These flags are used to keep track of which important register that
    360360 * have been changed since last they were reset. The only one allowed
     
    370370#define CPUM_CHANGED_IDTR                       RT_BIT(6)
    371371#define CPUM_CHANGED_LDTR                       RT_BIT(7)
    372 #define CPUM_CHANGED_TR                         RT_BIT(8)
     372#define CPUM_CHANGED_TR                         RT_BIT(8)  /**@< Currently unused. */
    373373#define CPUM_CHANGED_SYSENTER_MSR               RT_BIT(9)
    374 #define CPUM_CHANGED_HIDDEN_SEL_REGS            RT_BIT(10)
     374#define CPUM_CHANGED_HIDDEN_SEL_REGS            RT_BIT(10) /**@< Currently unused. */
    375375#define CPUM_CHANGED_CPUID                      RT_BIT(11)
    376 /** All except CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID.  */
    377376#define CPUM_CHANGED_ALL                        (  CPUM_CHANGED_FPU_REM \
    378377                                                 | CPUM_CHANGED_CR0 \
     378                                                 | CPUM_CHANGED_CR4 \
    379379                                                 | CPUM_CHANGED_GLOBAL_TLB_FLUSH \
    380380                                                 | CPUM_CHANGED_CR3 \
    381                                                  | CPUM_CHANGED_CR4 \
    382381                                                 | CPUM_CHANGED_GDTR \
    383382                                                 | CPUM_CHANGED_IDTR \
     
    387386                                                 | CPUM_CHANGED_HIDDEN_SEL_REGS \
    388387                                                 | CPUM_CHANGED_CPUID )
    389 /** This one is used by raw-mode to indicate that the hidden register
    390  * information is not longer reliable and have to be re-determined.
    391  *
    392  * @remarks This must not be part of CPUM_CHANGED_ALL! */
    393 #define CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID    RT_BIT(12)
    394388/** @} */
    395389
     
    407401VMMDECL(void)           CPUMDeactivateHyperDebugState(PVMCPU pVCpu);
    408402VMMDECL(uint32_t)       CPUMGetGuestCPL(PVMCPU pVCpu);
    409 VMMDECL(bool)           CPUMAreHiddenSelRegsValid(PVMCPU pVCpu);
    410403VMMDECL(CPUMMODE)       CPUMGetGuestMode(PVMCPU pVCpu);
    411404VMMDECL(uint32_t)       CPUMGetGuestCodeBits(PVMCPU pVCpu);
  • TabularUnified trunk/include/VBox/vmm/dbgf.h

    r41764 r42420  
    873873/** No address in the output. */
    874874#define DBGF_DISAS_FLAGS_NO_ADDRESS         RT_BIT(5)
    875 /** Set if the hidden selector registers are known to be valid. (REM hack to
    876  *  avoid assertions.) */
    877 #define DBGF_DISAS_FLAGS_HID_SEL_REGS_VALID RT_BIT(6)
    878875/** Disassemble in the default mode of the specific context. */
    879876#define DBGF_DISAS_FLAGS_DEFAULT_MODE       UINT32_C(0x00000000)
  • TabularUnified trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp

    r42407 r42420  
    25312531}
    25322532
    2533 /**
    2534  * Checks if the hidden selector registers are valid for the specified CPU.
    2535  *
    2536  * @returns true if they are.
    2537  * @returns false if not.
    2538  * @param   pVCpu     Pointer to the VM.
    2539  */
    2540 VMMDECL(bool) CPUMAreHiddenSelRegsValid(PVMCPU pVCpu)
    2541 {
    2542     bool const fRc = !(pVCpu->cpum.s.fChanged & CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID);
    2543     Assert(fRc || !HWACCMIsEnabled(pVCpu->CTX_SUFF(pVM)));
    2544     Assert(!pVCpu->cpum.s.fRemEntered);
    2545     return fRc;
    2546 }
    2547 
    2548 
    25492533
    25502534/**
  • TabularUnified trunk/src/VBox/VMM/VMMAll/SELMAll.cpp

    r42407 r42420  
    104104    {
    105105        RTGCUINTPTR uFlat = (RTGCUINTPTR)Addr & 0xffff;
    106         if (CPUMAreHiddenSelRegsValid(pVCpu))
     106        if (CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSReg))
    107107            uFlat += pSReg->u64Base;
    108108        else
    109             uFlat += ((RTGCUINTPTR)pSReg->Sel << 4);
     109            uFlat += (RTGCUINTPTR)pSReg->Sel << 4;
    110110        return (RTGCPTR)uFlat;
    111111    }
  • TabularUnified trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r42410 r42420  
    8383#define CPUM_SAVED_STATE_VERSION_VER1_6         6
    8484
    85 #define CPUM_WITH_CHANGED_CPUMCTX
     85
     86/**
     87 * This was used in the saved state up to the early life of version 14.
     88 *
     89 * It indicates that we may have some out-of-sync hidden segement registers.
     90 * It is only relevant for raw-mode.
     91 */
     92#define CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID    RT_BIT(12)
     93
    8694
    8795/*******************************************************************************
     
    24982506                    pVCpu->cpum.s.Guest.ldtr.fFlags   = CPUMSELREG_FLAGS_VALID;
    24992507                    pVCpu->cpum.s.Guest.ldtr.ValidSel = pVCpu->cpum.s.Guest.ldtr.Sel;
    2500                     pVCpu->cpum.s.Guest.tr.fFlags     = CPUMSELREG_FLAGS_VALID;
    2501                     pVCpu->cpum.s.Guest.tr.ValidSel   = pVCpu->cpum.s.Guest.tr.Sel;
    25022508                }
    25032509                else
     
    25092515                    }
    25102516
    2511                     /** @todo fix this. We can get most of the details from SELM after restore is
    2512                      *        done. */
    2513                     pVCpu->cpum.s.Guest.ldtr.fFlags   = 0;
    2514                     pVCpu->cpum.s.Guest.ldtr.ValidSel = 0;
    2515                     pVCpu->cpum.s.Guest.tr.fFlags     = 0;
    2516                     pVCpu->cpum.s.Guest.tr.ValidSel   = 0;
     2517                    /* This might not be 104% correct, but I think it's close
     2518                       enough for all practical purposes...  (REM always loaded
     2519                       LDTR registers.) */
     2520                    pVCpu->cpum.s.Guest.ldtr.fFlags   = CPUMSELREG_FLAGS_VALID;
     2521                    pVCpu->cpum.s.Guest.ldtr.ValidSel = pVCpu->cpum.s.Guest.ldtr.Sel;
    25172522                }
    2518 
     2523                pVCpu->cpum.s.Guest.tr.fFlags     = CPUMSELREG_FLAGS_VALID;
     2524                pVCpu->cpum.s.Guest.tr.ValidSel   = pVCpu->cpum.s.Guest.tr.Sel;
    25192525            }
    25202526        }
    25212527
    2522         /* Older states does not set CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID for
    2523            raw-mode guest, so we have to do it ourselves. */
    2524 /** @todo eliminate CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID. */
    2525         if (   uVersion <= CPUM_SAVED_STATE_VERSION_VER3_2
    2526             && !HWACCMIsEnabled(pVM))
     2528        /* Clear CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID. */
     2529        if (   uVersion >  CPUM_SAVED_STATE_VERSION_VER3_2
     2530            && uVersion <= CPUM_SAVED_STATE_VERSION_MEM)
    25272531            for (VMCPUID iCpu = 0; iCpu < pVM->cCpus; iCpu++)
    2528                 pVM->aCpus[iCpu].cpum.s.fChanged |= CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID;
     2532                pVM->aCpus[iCpu].cpum.s.fChanged &= CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID;
    25292533
    25302534        /*
     
    39974001        &&   pCtx->eflags.Bits.u1VM == 0)
    39984002    {
    3999         if (CPUMAreHiddenSelRegsValid(pVCpu))
     4003        if (!CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, &pCtx->cs))
    40004004        {
    4001             State.f64Bits         = enmMode >= PGMMODE_AMD64 && pCtx->cs.Attr.n.u1Long;
    4002             State.GCPtrSegBase    = pCtx->cs.u64Base;
    4003             State.GCPtrSegEnd     = pCtx->cs.u32Limit + 1 + (RTGCUINTPTR)pCtx->cs.u64Base;
    4004             State.cbSegLimit      = pCtx->cs.u32Limit;
    4005             enmDisCpuMode         = (State.f64Bits)
    4006                                     ? DISCPUMODE_64BIT
    4007                                     : pCtx->cs.Attr.n.u1DefBig
    4008                                     ? DISCPUMODE_32BIT
    4009                                     : DISCPUMODE_16BIT;
     4005            CPUMGuestLazyLoadHiddenSelectorReg(pVCpu, &pCtx->cs);
     4006            if (!CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, &pCtx->cs))
     4007                return VERR_CPUM_HIDDEN_CS_LOAD_ERROR;
    40104008        }
    4011         else
    4012         {
    4013             DBGFSELINFO SelInfo;
    4014 
    4015             rc = SELMR3GetShadowSelectorInfo(pVM, pCtx->cs.Sel, &SelInfo);
    4016             if (RT_FAILURE(rc))
    4017             {
    4018                 AssertMsgFailed(("SELMR3GetShadowSelectorInfo failed for %04X:%RGv rc=%d\n", pCtx->cs.Sel, GCPtrPC, rc));
    4019                 return rc;
    4020             }
    4021 
    4022             /*
    4023              * Validate the selector.
    4024              */
    4025             rc = DBGFR3SelInfoValidateCS(&SelInfo, pCtx->ss.Sel);
    4026             if (RT_FAILURE(rc))
    4027             {
    4028                 AssertMsgFailed(("SELMSelInfoValidateCS failed for %04X:%RGv rc=%d\n", pCtx->cs.Sel, GCPtrPC, rc));
    4029                 return rc;
    4030             }
    4031             State.GCPtrSegBase    = SelInfo.GCPtrBase;
    4032             State.GCPtrSegEnd     = SelInfo.cbLimit + 1 + (RTGCUINTPTR)SelInfo.GCPtrBase;
    4033             State.cbSegLimit      = SelInfo.cbLimit;
    4034             enmDisCpuMode         = SelInfo.u.Raw.Gen.u1DefBig ? DISCPUMODE_32BIT : DISCPUMODE_16BIT;
    4035         }
     4009        State.f64Bits         = enmMode >= PGMMODE_AMD64 && pCtx->cs.Attr.n.u1Long;
     4010        State.GCPtrSegBase    = pCtx->cs.u64Base;
     4011        State.GCPtrSegEnd     = pCtx->cs.u32Limit + 1 + (RTGCUINTPTR)pCtx->cs.u64Base;
     4012        State.cbSegLimit      = pCtx->cs.u32Limit;
     4013        enmDisCpuMode         = (State.f64Bits)
     4014                              ? DISCPUMODE_64BIT
     4015                              : pCtx->cs.Attr.n.u1DefBig
     4016                              ? DISCPUMODE_32BIT
     4017                              : DISCPUMODE_16BIT;
    40364018    }
    40374019    else
     
    42054187        PATMRawEnter(pVM, pCtxCore);
    42064188    }
    4207 
    4208     /*
    4209      * Invalidate the hidden registers.
    4210      */
    4211     pVCpu->cpum.s.fChanged |= CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID;
    42124189
    42134190    /*
     
    43304307
    43314308    /*
    4332      * Get and reset the flags, leaving CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID set.
     4309     * Get and reset the flags.
    43334310     */
    43344311    uint32_t fFlags = pVCpu->cpum.s.fChanged;
    4335     pVCpu->cpum.s.fChanged &= CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID; /* leave it set */
     4312    pVCpu->cpum.s.fChanged = 0;
    43364313
    43374314    /** @todo change the switcher to use the fChanged flags. */
     
    43484325
    43494326/**
    4350  * Leaves REM and works the CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID flag.
     4327 * Leaves REM.
    43514328 *
    43524329 * @param   pVCpu               Pointer to the VMCPU.
     
    43594336    Assert(pVCpu->cpum.s.fRemEntered);
    43604337
    4361     if (fNoOutOfSyncSels)
    4362         pVCpu->cpum.s.fChanged &= ~CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID;
    4363     else
    4364         pVCpu->cpum.s.fChanged |= CPUM_CHANGED_HIDDEN_SEL_REGS_INVALID;
    4365 
    43664338    pVCpu->cpum.s.fRemEntered = false;
    43674339}
  • TabularUnified trunk/src/VBox/VMM/VMMR3/DBGFDisas.cpp

    r41965 r42420  
    340340    VMCPU_ASSERT_EMT(pVCpu);
    341341    RTGCPTR GCPtr = *pGCPtr;
     342    int     rc;
    342343
    343344    /*
     
    345346     */
    346347    PCCPUMCTXCORE  pCtxCore   = NULL;
    347     PCPUMSELREGHID pHiddenSel = NULL;
    348     int rc;
    349     if (fFlags & (DBGF_DISAS_FLAGS_CURRENT_GUEST | DBGF_DISAS_FLAGS_CURRENT_HYPER))
    350     {
    351         if (fFlags & DBGF_DISAS_FLAGS_CURRENT_GUEST)
    352             pCtxCore = CPUMGetGuestCtxCore(pVCpu);
     348    PCCPUMSELREG   pSRegCS    = NULL;
     349    if (fFlags & DBGF_DISAS_FLAGS_CURRENT_GUEST)
     350    {
     351        pCtxCore   = CPUMGetGuestCtxCore(pVCpu);
     352        Sel        = pCtxCore->cs.Sel;
     353        pSRegCS    = &pCtxCore->cs;
     354        GCPtr      = pCtxCore->rip;
     355    }
     356    else if (fFlags & DBGF_DISAS_FLAGS_CURRENT_HYPER)
     357    {
     358        pCtxCore   = CPUMGetHyperCtxCore(pVCpu);
     359        Sel        = pCtxCore->cs.Sel;
     360        GCPtr      = pCtxCore->rip;
     361    }
     362    /*
     363     * Check if the selector matches the guest CS, use the hidden
     364     * registers from that if they are valid. Saves time and effort.
     365     */
     366    else
     367    {
     368        pCtxCore = CPUMGetGuestCtxCore(pVCpu);
     369        if (pCtxCore->cs.Sel == Sel && Sel != DBGF_SEL_FLAT)
     370            pSRegCS = &pCtxCore->cs;
    353371        else
    354             pCtxCore = CPUMGetHyperCtxCore(pVCpu);
    355         Sel        = pCtxCore->cs.Sel;
    356         pHiddenSel = (PCPUMSELREGHID)&pCtxCore->cs;
    357         GCPtr      = pCtxCore->rip;
     372            pCtxCore = NULL;
    358373    }
    359374
    360375    /*
    361376     * Read the selector info - assume no stale selectors and nasty stuff like that.
    362      * Since the selector flags in the CPUMCTX structures aren't up to date unless
    363      * we recently visited REM, we'll not search for the selector there.
     377     *
     378     * Note! We CANNOT load invalid hidden selector registers since that would
     379     *       mean that log/debug statements or the debug will influence the
     380     *       guest state and make things behave differently.
    364381     */
    365382    DBGFSELINFO     SelInfo;
     
    367384    bool            fRealModeAddress = false;
    368385
    369     if (    pHiddenSel
    370         &&  (   (fFlags & DBGF_DISAS_FLAGS_HID_SEL_REGS_VALID)
    371              || CPUMAreHiddenSelRegsValid(pVCpu)))
     386    if (   pSRegCS
     387        && CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSRegCS))
    372388    {
    373389        SelInfo.Sel                     = Sel;
    374390        SelInfo.SelGate                 = 0;
    375         SelInfo.GCPtrBase               = pHiddenSel->u64Base;
    376         SelInfo.cbLimit                 = pHiddenSel->u32Limit;
     391        SelInfo.GCPtrBase               = pSRegCS->u64Base;
     392        SelInfo.cbLimit                 = pSRegCS->u32Limit;
    377393        SelInfo.fFlags                  = PGMMODE_IS_LONG_MODE(enmMode)
    378394                                        ? DBGFSELINFO_FLAGS_LONG_MODE
    379                                         : enmMode != PGMMODE_REAL && (!pCtxCore || !pCtxCore->eflags.Bits.u1VM)
     395                                        : enmMode != PGMMODE_REAL && !pCtxCore->eflags.Bits.u1VM
    380396                                        ? DBGFSELINFO_FLAGS_PROT_MODE
    381397                                        : DBGFSELINFO_FLAGS_REAL_MODE;
     
    385401        SelInfo.u.Raw.Gen.u16LimitLow   = 0xffff;
    386402        SelInfo.u.Raw.Gen.u4LimitHigh   = 0xf;
    387         SelInfo.u.Raw.Gen.u1Present     = pHiddenSel->Attr.n.u1Present;
    388         SelInfo.u.Raw.Gen.u1Granularity = pHiddenSel->Attr.n.u1Granularity;;
    389         SelInfo.u.Raw.Gen.u1DefBig      = pHiddenSel->Attr.n.u1DefBig;
    390         SelInfo.u.Raw.Gen.u1Long        = pHiddenSel->Attr.n.u1Long;
    391         SelInfo.u.Raw.Gen.u1DescType    = pHiddenSel->Attr.n.u1DescType;
    392         SelInfo.u.Raw.Gen.u4Type        = pHiddenSel->Attr.n.u4Type;
     403        SelInfo.u.Raw.Gen.u1Present     = pSRegCS->Attr.n.u1Present;
     404        SelInfo.u.Raw.Gen.u1Granularity = pSRegCS->Attr.n.u1Granularity;;
     405        SelInfo.u.Raw.Gen.u1DefBig      = pSRegCS->Attr.n.u1DefBig;
     406        SelInfo.u.Raw.Gen.u1Long        = pSRegCS->Attr.n.u1Long;
     407        SelInfo.u.Raw.Gen.u1DescType    = pSRegCS->Attr.n.u1DescType;
     408        SelInfo.u.Raw.Gen.u4Type        = pSRegCS->Attr.n.u4Type;
    393409        fRealModeAddress                = !!(SelInfo.fFlags & DBGFSELINFO_FLAGS_REAL_MODE);
    394410    }
     
    409425        SelInfo.u.Raw.Gen.u4LimitHigh   = 0xf;
    410426
    411         if (   (fFlags & DBGF_DISAS_FLAGS_HID_SEL_REGS_VALID)
    412             || CPUMAreHiddenSelRegsValid(pVCpu))
    413         {   /* Assume the current CS defines the execution mode. */
    414             pCtxCore   = CPUMGetGuestCtxCore(pVCpu);
    415             pHiddenSel = (CPUMSELREGHID *)&pCtxCore->cs;
    416 
    417             SelInfo.u.Raw.Gen.u1Present     = pHiddenSel->Attr.n.u1Present;
    418             SelInfo.u.Raw.Gen.u1Granularity = pHiddenSel->Attr.n.u1Granularity;;
    419             SelInfo.u.Raw.Gen.u1DefBig      = pHiddenSel->Attr.n.u1DefBig;
    420             SelInfo.u.Raw.Gen.u1Long        = pHiddenSel->Attr.n.u1Long;
    421             SelInfo.u.Raw.Gen.u1DescType    = pHiddenSel->Attr.n.u1DescType;
    422             SelInfo.u.Raw.Gen.u4Type        = pHiddenSel->Attr.n.u4Type;
     427        pSRegCS = &CPUMGetGuestCtxCore(pVCpu)->cs;
     428        if (CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSRegCS))
     429        {
     430            /* Assume the current CS defines the execution mode. */
     431            SelInfo.u.Raw.Gen.u1Present     = pSRegCS->Attr.n.u1Present;
     432            SelInfo.u.Raw.Gen.u1Granularity = pSRegCS->Attr.n.u1Granularity;;
     433            SelInfo.u.Raw.Gen.u1DefBig      = pSRegCS->Attr.n.u1DefBig;
     434            SelInfo.u.Raw.Gen.u1Long        = pSRegCS->Attr.n.u1Long;
     435            SelInfo.u.Raw.Gen.u1DescType    = pSRegCS->Attr.n.u1DescType;
     436            SelInfo.u.Raw.Gen.u4Type        = pSRegCS->Attr.n.u4Type;
    423437        }
    424438        else
    425439        {
     440            pSRegCS  = NULL;
    426441            SelInfo.u.Raw.Gen.u1Present     = 1;
    427442            SelInfo.u.Raw.Gen.u1Granularity = 1;
  • TabularUnified trunk/src/recompiler/VBoxREMWrapper.cpp

    r41939 r42420  
    12001200static REMFNDESC g_aVMMImports[] =
    12011201{
    1202     { "CPUMAreHiddenSelRegsValid",              VMM_FN(CPUMAreHiddenSelRegsValid),      &g_aArgsVMCPU[0],                           RT_ELEMENTS(g_aArgsVMCPU),                             REMFNDESC_FLAGS_RET_INT,    sizeof(bool),       NULL },
    12031202    { "CPUMR3RemEnter",                         VMM_FN(CPUMR3RemEnter),                 &g_aArgsCPUMR3RemEnter[0],                  RT_ELEMENTS(g_aArgsCPUMR3RemEnter),                    REMFNDESC_FLAGS_RET_INT,    sizeof(uint32_t),   NULL },
    12041203    { "CPUMR3RemLeave",                         VMM_FN(CPUMR3RemLeave),                 &g_aArgsCPUMR3RemLeave[0],                  RT_ELEMENTS(g_aArgsCPUMR3RemLeave),                    REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
  • TabularUnified trunk/src/recompiler/VBoxRecompiler.c

    r42407 r42420  
    11261126                                0, /* GCPtr */
    11271127                                DBGF_DISAS_FLAGS_CURRENT_GUEST
    1128                                 | DBGF_DISAS_FLAGS_DEFAULT_MODE
    1129                                 | DBGF_DISAS_FLAGS_HID_SEL_REGS_VALID,
     1128                                | DBGF_DISAS_FLAGS_DEFAULT_MODE,
    11301129                                szBuf,
    11311130                                sizeof(szBuf),
     
    23302329            if (pCtx->ldtr.fFlags & CPUMSELREG_FLAGS_VALID)
    23312330            {
    2332                 pVM->rem.s.Env.ldt.selector = pCtx->ldtr.Sel;
    2333                 pVM->rem.s.Env.ldt.base     = pCtx->ldtr.u64Base;
    2334                 pVM->rem.s.Env.ldt.limit    = pCtx->ldtr.u32Limit;
    2335                 pVM->rem.s.Env.ldt.flags    = (pCtx->ldtr.Attr.u << 8) & 0xFFFFFF;
     2331                pVM->rem.s.Env.ldt.selector    = pCtx->ldtr.Sel;
     2332                pVM->rem.s.Env.ldt.newselector = 0;
     2333                pVM->rem.s.Env.ldt.fVBoxFlags  = pCtx->ldtr.fFlags;
     2334                pVM->rem.s.Env.ldt.base        = pCtx->ldtr.u64Base;
     2335                pVM->rem.s.Env.ldt.limit       = pCtx->ldtr.u32Limit;
     2336                pVM->rem.s.Env.ldt.flags       = (pCtx->ldtr.Attr.u << 8) & 0xFFFFFF;
    23362337            }
    23372338            else
     2339            {
     2340                AssertFailed(); /* Shouldn't happen, see cpumR3LoadExec. */
    23382341                sync_ldtr(&pVM->rem.s.Env, pCtx->ldtr.Sel);
     2342            }
    23392343        }
    23402344
     
    39974001                                    0, /* GCPtr */
    39984002                                    DBGF_DISAS_FLAGS_CURRENT_GUEST
    3999                                     | DBGF_DISAS_FLAGS_DEFAULT_MODE
    4000                                     | DBGF_DISAS_FLAGS_HID_SEL_REGS_VALID,
     4003                                    | DBGF_DISAS_FLAGS_DEFAULT_MODE,
    40014004                                    szBuf,
    40024005                                    sizeof(szBuf),
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