VirtualBox

Changeset 9131 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 26, 2008 4:02:50 PM (17 years ago)
Author:
vboxsync
Message:

Dropped the USE_EFFICIENT_ADDRESS flag. This breaks assumptions in CSAM about parameter flags.
Instead use DIS_IS_EFFECTIVE_ADDRESS.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmCore.cpp

    r9097 r9131  
    466466
    467467        // Should contain the parameter type on input
    468         pCpu->param1.parval = fpop->param1;
    469         pCpu->param2.parval = fpop->param2;
    470 #if 1 /** @todo bird: why parval above? fmul and similar needs dword/qword data in param. */
    471468        pCpu->param1.param = fpop->param1;
    472469        pCpu->param2.param = fpop->param2;
    473 #endif
    474470    }
    475471    else
     
    747743            {   /* SIB byte follows ModRM */
    748744                UseSIB(lpszCodeBlock, pOp, pParam, pCpu);
    749                 pParam->flags |= USE_EFFICIENT_ADDRESS;
    750745            }
    751746            else
     
    755750                if (pCpu->mode == CPUMODE_32BIT)
    756751                {
    757                     pParam->flags |= USE_DISPLACEMENT32 | USE_EFFICIENT_ADDRESS;
     752                    pParam->flags |= USE_DISPLACEMENT32;
    758753                    pParam->disp32 = pCpu->disp;
    759754                    disasmPrintDisp32(pParam);
     
    761756                else
    762757                {
    763                     pParam->flags |= USE_RIPDISPLACEMENT32 | USE_EFFICIENT_ADDRESS;
     758                    pParam->flags |= USE_RIPDISPLACEMENT32;
    764759                    pParam->disp32 = pCpu->disp;
    765760                    disasmAddStringF(pParam->szParam, sizeof(pParam->szParam), "RIP+");
     
    768763            }
    769764            else {//register address
    770                 pParam->flags |= USE_BASE | USE_EFFICIENT_ADDRESS;
     765                pParam->flags |= USE_BASE;
    771766                disasmModRMReg(pCpu, pOp, rm, pParam, 1);
    772767            }
     
    786781            }
    787782            pParam->disp8 = pCpu->disp;
    788             pParam->flags |= USE_DISPLACEMENT8 | USE_EFFICIENT_ADDRESS;
     783            pParam->flags |= USE_DISPLACEMENT8;
    789784
    790785            if (pParam->disp8 != 0)
     
    809804            }
    810805            pParam->disp32 = pCpu->disp;
    811             pParam->flags |= USE_DISPLACEMENT32 | USE_EFFICIENT_ADDRESS;
     806            pParam->flags |= USE_DISPLACEMENT32;
    812807
    813808            if (pParam->disp32 != 0)
     
    834829            {//16 bits displacement
    835830                pParam->disp16 = pCpu->disp;
    836                 pParam->flags |= USE_DISPLACEMENT16 | USE_EFFICIENT_ADDRESS;
     831                pParam->flags |= USE_DISPLACEMENT16;
    837832                disasmPrintDisp16(pParam);
    838833            }
    839834            else
    840835            {
    841                 pParam->flags |= USE_BASE | USE_EFFICIENT_ADDRESS;
     836                pParam->flags |= USE_BASE;
    842837                disasmModRMReg16(pCpu, pOp, rm, pParam);
    843838            }
     
    850845            disasmModRMReg16(pCpu, pOp, rm, pParam);
    851846            pParam->disp8 = pCpu->disp;
    852             pParam->flags |= USE_BASE | USE_DISPLACEMENT8 | USE_EFFICIENT_ADDRESS;
     847            pParam->flags |= USE_BASE | USE_DISPLACEMENT8;
    853848
    854849            if (pParam->disp8 != 0)
     
    866861            disasmModRMReg16(pCpu, pOp, rm, pParam);
    867862            pParam->disp16 = pCpu->disp;
    868             pParam->flags |= USE_BASE | USE_DISPLACEMENT16 | USE_EFFICIENT_ADDRESS;
     863            pParam->flags |= USE_BASE | USE_DISPLACEMENT16;
    869864
    870865            if (pParam->disp16 != 0)
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r9011 r9131  
    474474    memset(pParamVal, 0, sizeof(*pParamVal));
    475475
    476     if (pParam->flags & (USE_BASE|USE_INDEX|USE_DISPLACEMENT32|USE_DISPLACEMENT16|USE_DISPLACEMENT8|USE_RIPDISPLACEMENT32))
     476    if (DIS_IS_EFFECTIVE_ADDR(pParam->flags))
    477477    {
    478478        // Effective address
  • trunk/src/VBox/Disassembler/testcase/tstDisasm-2.cpp

    r9101 r9131  
    547547         */
    548548        if (    (pCpu->prefix & PREFIX_SEG)
    549             &&  !(pCpu->param1.flags & USE_EFFICIENT_ADDRESS)
    550             &&  !(pCpu->param2.flags & USE_EFFICIENT_ADDRESS)
    551             &&  !(pCpu->param3.flags & USE_EFFICIENT_ADDRESS))
     549            &&  !DIS_IS_EFFECTIVE_ADDR(pCpu->param1.flags)
     550            &&  !DIS_IS_EFFECTIVE_ADDR(pCpu->param2.flags)
     551            &&  !DIS_IS_EFFECTIVE_ADDR(pCpu->param3.flags))
    552552        {
    553553            PUT_STR(s_szSegPrefix[pCpu->prefix_seg], 2);
     
    600600
    601601                        PUT_FAR();
    602                         if (pParam->flags & USE_EFFICIENT_ADDRESS)
     602                        if (DIS_IS_EFFECTIVE_ADDR(pParam->flags))
    603603                        {
    604604                            /* Work around mov seg,[mem16]  and mov [mem16],seg as these always make a 16-bit mem
     
    623623                                PUT_SZ("dword ");
    624624                        }
    625                         if (pParam->flags & USE_EFFICIENT_ADDRESS)
     625                        if (DIS_IS_EFFECTIVE_ADDR(pParam->flags))
    626626                            PUT_SEGMENT_OVERRIDE();
    627627
    628628                        bool fBase =  (pParam->flags & USE_BASE) /* When exactly is USE_BASE supposed to be set? disasmModRMReg doesn't set it. */
    629629                                   || (   (pParam->flags & (USE_REG_GEN8 | USE_REG_GEN16 | USE_REG_GEN32 | USE_REG_GEN64))
    630                                        && !(pParam->flags & USE_EFFICIENT_ADDRESS));
     630                                       && !DIS_IS_EFFECTIVE_ADDR(pParam->flags));
    631631                        if (fBase)
    632632                        {
     
    683683                        }
    684684
    685                         if (pParam->flags & USE_EFFICIENT_ADDRESS)
     685                        if (DIS_IS_EFFECTIVE_ADDR(pParam->flags))
    686686                            PUT_C(']');
    687687                        break;
     
    10681068    if (fPrefixes & PREFIX_SEG)
    10691069    {
    1070         /* no efficient address which it may apply to. */
     1070        /* no effective address which it may apply to. */
    10711071        Assert((pState->Cpu.prefix & PREFIX_SEG) || pState->Cpu.mode == CPUMODE_64BIT);
    1072         if (    !(pState->Cpu.param1.flags & USE_EFFICIENT_ADDRESS)
    1073             &&  !(pState->Cpu.param2.flags & USE_EFFICIENT_ADDRESS)
    1074             &&  !(pState->Cpu.param3.flags & USE_EFFICIENT_ADDRESS))
     1072        if (    !DIS_IS_EFFECTIVE_ADDR(pState->Cpu.param1.flags)
     1073            &&  !DIS_IS_EFFECTIVE_ADDR(pState->Cpu.param2.flags)
     1074            &&  !DIS_IS_EFFECTIVE_ADDR(pState->Cpu.param3.flags))
    10751075            return true;
    10761076    }
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