VirtualBox

Changeset 96491 in vbox


Ignore:
Timestamp:
Aug 25, 2022 2:22:17 PM (2 years ago)
Author:
vboxsync
Message:

VMM: updates. bugref:10282

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r96407 r96491  
    82668266 * @returns Strict VBox status code.
    82678267 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
     8268 * @param   off                 Offset from the top of the stack. This is zero
     8269 *                              except in the retf case.
    82688270 * @param   cbMem               The number of bytes to pop from the stack.
    82698271 * @param   ppvMem              Where to return the pointer to the stack memory.
     
    82738275 *                              called.
    82748276 */
    8275 VBOXSTRICTRC iemMemStackPopContinueSpecial(PVMCPUCC pVCpu, size_t cbMem, void const **ppvMem, uint64_t *puNewRsp) RT_NOEXCEPT
     8277VBOXSTRICTRC iemMemStackPopContinueSpecial(PVMCPUCC pVCpu, size_t off, size_t cbMem,
     8278                                           void const **ppvMem, uint64_t *puNewRsp) RT_NOEXCEPT
    82768279{
    82778280    Assert(cbMem < UINT8_MAX);
    82788281    RTUINT64U   NewRsp;
    82798282    NewRsp.u = *puNewRsp;
    8280     RTGCPTR     GCPtrTop = iemRegGetRspForPopEx(pVCpu, &NewRsp, 8);
     8283    RTGCPTR     GCPtrTop = iemRegGetRspForPopEx(pVCpu, &NewRsp, off + cbMem);
     8284    /** @todo The *puNewRsp value is never used by any of callers, so dispense
     8285     *        with it or convert it to a value-in-only parameter? */
    82818286    *puNewRsp = NewRsp.u;
    8282     return iemMemMap(pVCpu, (void **)ppvMem, cbMem, X86_SREG_SS, GCPtrTop, IEM_ACCESS_STACK_R,
     8287    return iemMemMap(pVCpu, (void **)ppvMem, cbMem, X86_SREG_SS, GCPtrTop + off, IEM_ACCESS_STACK_R,
    82838288                     0 /* checked in iemMemStackPopBeginSpecial */);
    82848289}
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp

    r96407 r96491  
    23622362    {
    23632363        /* Read the outer stack pointer stored *after* the parameters. */
    2364         rcStrict = iemMemStackPopContinueSpecial(pVCpu, cbPop + cbRetPtr, &uPtrFrame.pv, &uNewRsp);
     2364        rcStrict = iemMemStackPopContinueSpecial(pVCpu, cbPop /*off*/, cbRetPtr, &uPtrFrame.pv, &uNewRsp);
    23652365        if (rcStrict != VINF_SUCCESS)
    23662366            return rcStrict;
    2367 
    2368         uPtrFrame.pu8 += cbPop; /* Skip the parameters. */
    23692367
    23702368        uint16_t uNewOuterSs;
     
    23852383            uNewOuterSs  = uPtrFrame.pu16[4];
    23862384        }
    2387         uPtrFrame.pu8 -= cbPop; /* Put uPtrFrame back the way it was. */
    23882385        rcStrict = iemMemStackPopDoneSpecial(pVCpu, uPtrFrame.pv);
    23892386        if (RT_LIKELY(rcStrict == VINF_SUCCESS))
     
    30913088    VBOXSTRICTRC    rcStrict;
    30923089    RTCPTRUNION     uFrame;
    3093     rcStrict = iemMemStackPopContinueSpecial(pVCpu, 24, &uFrame.pv, &uNewRsp);
     3090    rcStrict = iemMemStackPopContinueSpecial(pVCpu, 0 /*off*/, 24 /*cbMem*/, &uFrame.pv, &uNewRsp);
    30943091    if (rcStrict != VINF_SUCCESS)
    30953092        return rcStrict;
     
    33303327        if (enmEffOpSize == IEMMODE_32BIT)
    33313328        {
    3332             rcStrict = iemMemStackPopContinueSpecial(pVCpu, 8, &uFrame.pv, &uNewRsp);
     3329            rcStrict = iemMemStackPopContinueSpecial(pVCpu, 0/*off*/, 8 /*cbMem*/, &uFrame.pv, &uNewRsp);
    33333330            if (rcStrict != VINF_SUCCESS)
    33343331                return rcStrict;
     
    33413338        else
    33423339        {
    3343             rcStrict = iemMemStackPopContinueSpecial(pVCpu, 4, &uFrame.pv, &uNewRsp);
     3340            rcStrict = iemMemStackPopContinueSpecial(pVCpu, 0 /*off*/, 4 /*cbMem*/, &uFrame.pv, &uNewRsp);
    33443341            if (rcStrict != VINF_SUCCESS)
    33453342                return rcStrict;
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r96454 r96491  
    36313631VBOXSTRICTRC    iemMemStackPopBeginSpecial(PVMCPUCC pVCpu, size_t cbMem, uint32_t cbAlign,
    36323632                                           void const **ppvMem, uint64_t *puNewRsp) RT_NOEXCEPT;
    3633 VBOXSTRICTRC    iemMemStackPopContinueSpecial(PVMCPUCC pVCpu, size_t cbMem, void const **ppvMem, uint64_t *puNewRsp) RT_NOEXCEPT;
     3633VBOXSTRICTRC    iemMemStackPopContinueSpecial(PVMCPUCC pVCpu, size_t off, size_t cbMem,
     3634                                              void const **ppvMem, uint64_t *puNewRsp) RT_NOEXCEPT;
    36343635VBOXSTRICTRC    iemMemStackPopDoneSpecial(PVMCPUCC pVCpu, void const *pvMem) RT_NOEXCEPT;
    36353636VBOXSTRICTRC    iemMemStackPopU16(PVMCPUCC pVCpu, uint16_t *pu16Value) RT_NOEXCEPT;
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