VirtualBox

Changeset 97203 in vbox


Ignore:
Timestamp:
Oct 18, 2022 12:28:22 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154179
Message:

VMM/SELM,DIS: Changed SELMToFlat and SELMToFlatEx to use PCPUMCTX instead of PCPUMCTXCORE and use X86_SREG_XX indexes instead of DISSELREG.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/dis.h

    r96407 r97203  
    790790DISDECL(int) DISFetchReg64(PCCPUMCTXCORE pCtx, unsigned reg64, uint64_t *pVal);
    791791DISDECL(int) DISFetchRegSeg(PCCPUMCTXCORE pCtx, DISSELREG sel, RTSEL *pVal);
    792 DISDECL(int) DISFetchRegSegEx(PCPUMCTXCORE pCtx, DISSELREG sel, PCPUMSELREG *ppSelReg);
    793792DISDECL(int) DISWriteReg8(PCPUMCTXCORE pRegFrame, unsigned reg8, uint8_t val8);
    794793DISDECL(int) DISWriteReg16(PCPUMCTXCORE pRegFrame, unsigned reg32, uint16_t val16);
  • trunk/include/VBox/vmm/selm.h

    r96407 r97203  
    5454
    5555VMMDECL(int)            SELMGetTSSInfo(PVM pVM, PVMCPU pVCpu, PRTGCUINTPTR pGCPtrTss, PRTGCUINTPTR pcbTss, bool *pfCanHaveIOBitmap);
    56 VMMDECL(RTGCPTR)        SELMToFlat(PVMCC pVM, DISSELREG SelReg, PCPUMCTXCORE pCtxCore, RTGCPTR Addr);
     56VMMDECL(RTGCPTR)        SELMToFlat(PVMCPUCC pVCpu, unsigned idxSeg, PCPUMCTX pCtx, RTGCPTR Addr);
    5757VMMDECL(RTGCPTR)        SELMToFlatBySel(PVM pVM, RTSEL Sel, RTGCPTR Addr);
    5858
     
    7676/** @} */
    7777
    78 VMMDECL(int)            SELMToFlatEx(PVMCPU pVCpu, DISSELREG SelReg, PCPUMCTXCORE pCtxCore, RTGCPTR Addr, uint32_t fFlags,
    79                                      PRTGCPTR ppvGC);
     78VMMDECL(int)            SELMToFlatEx(PVMCPU pVCpu, unsigned idxSeg, PCPUMCTX pCtx, RTGCPTR Addr, uint32_t fFlags, PRTGCPTR ppvGC);
    8079VMMDECL(int)            SELMValidateAndConvertCSAddr(PVMCPU pVCpu, X86EFLAGS eflags, RTSEL SelCPL, RTSEL SelCS,
    8180                                                     PCPUMSELREG pSRegCS, RTGCPTR Addr, PRTGCPTR ppvFlat);
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r96407 r97203  
    452452
    453453/**
    454  * Returns the value of the specified segment register including a pointer to the hidden register in the supplied cpu context
    455  *
    456  */
    457 DISDECL(int) DISFetchRegSegEx(PCPUMCTXCORE pCtx, DISSELREG sel, PCPUMSELREG *ppSelReg)
    458 {
    459     AssertReturnStmt((unsigned)sel < RT_ELEMENTS(g_aRegSegIndex), *ppSelReg = NULL, VERR_INVALID_PARAMETER);
    460     *ppSelReg = (CPUMSELREG *)((uintptr_t)pCtx + g_aRegHidSegIndex[sel]);
    461     return VINF_SUCCESS;
    462 }
    463 
    464 /**
    465454 * Updates the value of the specified 64 bits general purpose register
    466455 *
  • trunk/src/VBox/VMM/VMMAll/SELMAll.cpp

    r96407 r97203  
    5656 *
    5757 * @returns Flat address.
    58  * @param   pVM         The cross context VM structure.
    59  * @param   SelReg      Selector register
    60  * @param   pCtxCore    CPU context
     58 * @param   pVCpu       The cross context virtual CPU structure.
     59 * @param   idxSeg      The selector register to use (X86_SREG_XXX).
     60 * @param   pCtx        Pointer to the register context for the CPU.
    6161 * @param   Addr        Address part.
    6262 */
    63 VMMDECL(RTGCPTR) SELMToFlat(PVMCC pVM, DISSELREG SelReg, PCPUMCTXCORE pCtxCore, RTGCPTR Addr)
    64 {
    65     PCPUMSELREG    pSReg;
    66     PVMCPUCC       pVCpu = VMMGetCpu(pVM);
    67 
    68     int rc = DISFetchRegSegEx(pCtxCore, SelReg, &pSReg); AssertRC(rc);
     63VMMDECL(RTGCPTR) SELMToFlat(PVMCPUCC pVCpu, unsigned idxSeg, PCPUMCTX pCtx, RTGCPTR Addr)
     64{
     65    Assert(idxSeg < RT_ELEMENTS(pCtx->aSRegs));
     66    PCPUMSELREG pSReg = &pCtx->aSRegs[idxSeg];
    6967
    7068    /*
    7169     * Deal with real & v86 mode first.
    7270     */
    73     if (    pCtxCore->eflags.Bits.u1VM
     71    if (    pCtx->eflags.Bits.u1VM
    7472        ||  CPUMIsGuestInRealMode(pVCpu))
    7573    {
     
    8381
    8482    Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSReg));
    85     Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, &pCtxCore->cs));
     83    Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, &pCtx->cs));
    8684
    8785    /* 64 bits mode: CS, DS, ES and SS are treated as if each segment base is 0
    8886       (Intel(r) 64 and IA-32 Architectures Software Developer's Manual: 3.4.2.1). */
    89     if (    pCtxCore->cs.Attr.n.u1Long
     87    if (    pCtx->cs.Attr.n.u1Long
    9088        &&  CPUMIsGuestInLongMode(pVCpu))
    9189    {
    92         switch (SelReg)
    93         {
    94             case DISSELREG_FS:
    95             case DISSELREG_GS:
     90        switch (idxSeg)
     91        {
     92            case X86_SREG_FS:
     93            case X86_SREG_GS:
    9694                return (RTGCPTR)(pSReg->u64Base + Addr);
    9795
     
    114112 * @returns VBox status
    115113 * @param   pVCpu       The cross context virtual CPU structure.
    116  * @param   SelReg      Selector register.
    117  * @param   pCtxCore    CPU context.
     114 * @param   idxSeg      The selector register to use (X86_SREG_XXX).
     115 * @param   pCtx        Pointer to the register context for the CPU.
    118116 * @param   Addr        Address part.
    119117 * @param   fFlags      SELMTOFLAT_FLAGS_*
     
    121119 * @param   ppvGC       Where to store the GC flat address.
    122120 */
    123 VMMDECL(int) SELMToFlatEx(PVMCPU pVCpu, DISSELREG SelReg, PCPUMCTXCORE pCtxCore, RTGCPTR Addr, uint32_t fFlags, PRTGCPTR ppvGC)
    124 {
    125     /*
    126      * Fetch the selector first.
    127      */
    128     PCPUMSELREG pSReg;
    129     int rc = DISFetchRegSegEx(pCtxCore, SelReg, &pSReg);
    130     AssertRCReturn(rc, rc); AssertPtr(pSReg);
     121VMMDECL(int) SELMToFlatEx(PVMCPU pVCpu, unsigned idxSeg, PCPUMCTX pCtx, RTGCPTR Addr, uint32_t fFlags, PRTGCPTR ppvGC)
     122{
     123    AssertReturn(idxSeg < RT_ELEMENTS(pCtx->aSRegs), VERR_INVALID_PARAMETER);
     124    PCPUMSELREG pSReg = &pCtx->aSRegs[idxSeg];
    131125
    132126    /*
    133127     * Deal with real & v86 mode first.
    134128     */
    135     if (    pCtxCore->eflags.Bits.u1VM
     129    if (    pCtx->eflags.Bits.u1VM
    136130        ||  CPUMIsGuestInRealMode(pVCpu))
    137131    {
     
    148142
    149143    Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSReg));
    150     Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, &pCtxCore->cs));
     144    Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, &pCtx->cs));
    151145
    152146    /* 64 bits mode: CS, DS, ES and SS are treated as if each segment base is 0
     
    154148    RTGCPTR  pvFlat;
    155149    bool     fCheckLimit   = true;
    156     if (    pCtxCore->cs.Attr.n.u1Long
     150    if (    pCtx->cs.Attr.n.u1Long
    157151        &&  CPUMIsGuestInLongMode(pVCpu))
    158152    {
    159153        fCheckLimit = false;
    160         switch (SelReg)
    161         {
    162             case DISSELREG_FS:
    163             case DISSELREG_GS:
     154        switch (idxSeg)
     155        {
     156            case X86_SREG_FS:
     157            case X86_SREG_GS:
    164158                pvFlat = pSReg->u64Base + Addr;
    165159                break;
  • trunk/src/VBox/VMM/VMMR3/EMHM.cpp

    r96894 r97203  
    301301        /** @todo this should be skipped! */
    302302        CPUM_IMPORT_EXTRN_RET(pVCpu, CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_SS);
    303         rc = PGMPrefetchPage(pVCpu, SELMToFlat(pVM, DISSELREG_CS, CPUMCTX2CORE(&pVCpu->cpum.GstCtx), pVCpu->cpum.GstCtx.rip));
     303        rc = PGMPrefetchPage(pVCpu, SELMToFlat(pVCpu, X86_SREG_CS, &pVCpu->cpum.GstCtx, pVCpu->cpum.GstCtx.rip));
    304304        if (rc == VINF_SUCCESS)
    305             rc = PGMPrefetchPage(pVCpu, SELMToFlat(pVM, DISSELREG_SS, CPUMCTX2CORE(&pVCpu->cpum.GstCtx), pVCpu->cpum.GstCtx.rsp));
     305            rc = PGMPrefetchPage(pVCpu, SELMToFlat(pVCpu, X86_SREG_SS, &pVCpu->cpum.GstCtx, pVCpu->cpum.GstCtx.rsp));
    306306        if (rc != VINF_SUCCESS)
    307307        {
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