VirtualBox

Changeset 106745 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Oct 28, 2024 12:07:28 PM (3 months ago)
Author:
vboxsync
Message:

VMM/ARM: Treat DISOPTYPE_INTERRUPT insutrctions (like svc, hvc, ...) as call instructions, bugref:10393

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/DBGFR3Flow.cpp

    r106743 r106745  
    251251 * @returns Flag whether the given instruction is a call.
    252252 * @param   uOpc        The opcode value from the disassembler.
    253  */
    254 DECL_FORCE_INLINE(bool) dbgfR3FlowDisOpcIsCall(uint16_t uOpc)
     253 * @param   fOpType     The opcode type flags for the given opcode.
     254 */
     255DECL_FORCE_INLINE(bool) dbgfR3FlowDisOpcIsCall(uint16_t uOpc, uint32_t fOpType)
    255256{
    256257#ifdef VBOX_VMM_TARGET_ARMV8
     
    263264        return true;
    264265
     266    /* Treat instructions like svc/hvc as calls. */
     267    if (fOpType & DISOPTYPE_INTERRUPT)
     268        return true;
     269
    265270    return false;
    266271#else
     272    RT_NOREF(fOpType);
    267273    return uOpc == OP_CALL;
    268274#endif
     
    13181324                    uint16_t uOpc = DisState.pCurInstr->uOpcode;
    13191325
    1320                     if (dbgfR3FlowDisOpcIsCall(uOpc))
     1326                    if (dbgfR3FlowDisOpcIsCall(uOpc, DisState.pCurInstr->fOpType))
    13211327                        pThis->cCallInsns++;
    13221328
     
    13691375                        }
    13701376                    }
    1371                     else if (!dbgfR3FlowDisOpcIsCall(uOpc))
     1377                    else if (!dbgfR3FlowDisOpcIsCall(uOpc, DisState.pCurInstr->fOpType))
    13721378                    {
    13731379                        Assert(DisState.pCurInstr->fOpType & DISOPTYPE_COND_CONTROLFLOW);
     
    14271433
    14281434                    /* Quit disassembling. */
    1429                     if (   (   !dbgfR3FlowDisOpcIsCall(uOpc)
     1435                    if (   (   !dbgfR3FlowDisOpcIsCall(uOpc, DisState.pCurInstr->fOpType)
    14301436                            || (pThis->fFlags & DBGF_FLOW_CREATE_F_CALL_INSN_SEPARATE_BB))
    14311437                        || RT_FAILURE(rc))
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