VirtualBox

Changeset 103661 in vbox for trunk


Ignore:
Timestamp:
Mar 4, 2024 11:43:16 AM (7 months ago)
Author:
vboxsync
Message:

VMM/IEM: Some VMCPU/CPUMCTX access annotations for arm64 as well. bugref:10370

File:
1 edited

Legend:

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

    r103660 r103661  
    1412914129# endif
    1413014130    AssertMsgReturnVoid(rcCs == CS_ERR_OK, ("%d (%#x)\n", rcCs, rcCs));
     14131
     14132    //rcCs = cs_option(hDisasm, CS_OPT_DETAIL, CS_OPT_ON);  - not needed as pInstr->detail doesn't provide full memory detail.
     14133    //Assert(rcCs == CS_ERR_OK);
    1413114134#endif
    1413214135
     
    1447414477            {
    1447514478                Assert(cInstrs == 1);
     14479                const char *pszAnnotation = NULL;
     14480#  if defined(RT_ARCH_ARM64)
     14481                if (   (pInstr->id >= ARM64_INS_LD1 && pInstr->id < ARM64_INS_LSL)
     14482                    || (pInstr->id >= ARM64_INS_ST1 && pInstr->id < ARM64_INS_SUB))
     14483                {
     14484                    /* This is bit crappy, but the disassembler provides incomplete addressing details. */
     14485                    AssertCompile(IEMNATIVE_REG_FIXED_PVMCPU == 28 && IEMNATIVE_REG_FIXED_PCPUMCTX == 27);
     14486                    char *psz = strchr(pInstr->op_str, '[');
     14487                    if (psz && psz[1] == 'x' && psz[2] == '2' && (psz[3] == '7' || psz[3] == '8'))
     14488                    {
     14489                        uint32_t const offVCpu = psz[3] == '8'? 0 : RT_UOFFSETOF(VMCPU, cpum.GstCtx);
     14490                        int32_t        off     = -1;
     14491                        psz += 4;
     14492                        if (*psz == ']')
     14493                            off = 0;
     14494                        else if (*psz == ',')
     14495                        {
     14496                            psz = RTStrStripL(psz + 1);
     14497                            if (*psz == '#')
     14498                                off = RTStrToInt32(&psz[1]);
     14499                            /** @todo deal with index registers and LSL as well... */
     14500                        }
     14501                        if (off >= 0)
     14502                            pszAnnotation = iemNativeDbgVCpuOffsetToName(offVCpu + (uint32_t)off);
     14503                    }
     14504                }
     14505#  endif
     14506
     14507                size_t const cchOp = strlen(pInstr->op_str);
    1447614508#  if defined(RT_ARCH_AMD64)
    14477                 pHlp->pfnPrintf(pHlp, "    %p: %.*Rhxs %-7s %s\n",
    14478                                 pNativeCur, pInstr->size, pNativeCur, pInstr->mnemonic, pInstr->op_str);
     14509                if (pszAnnotation)
     14510                    pHlp->pfnPrintf(pHlp, "    %p: %.*Rhxs %-7s %s%*s ; %s\n",
     14511                                    pNativeCur, pInstr->size, pNativeCur, pInstr->mnemonic, pInstr->op_str,
     14512                                    cchOp < 55 ? 55 - cchOp : 0, "", pszAnnotation);
     14513                else
     14514                    pHlp->pfnPrintf(pHlp, "    %p: %.*Rhxs %-7s %s\n",
     14515                                    pNativeCur, pInstr->size, pNativeCur, pInstr->mnemonic, pInstr->op_str);
     14516
    1447914517#  else
    14480                 pHlp->pfnPrintf(pHlp, "    %p: %#010RX32 %-7s %s\n",
    14481                                 pNativeCur, *pNativeCur, pInstr->mnemonic, pInstr->op_str);
     14518                if (pszAnnotation)
     14519                    pHlp->pfnPrintf(pHlp, "    %p: %#010RX32 %-7s %s%*s ; %s\n",
     14520                                    pNativeCur, *pNativeCur, pInstr->mnemonic, pInstr->op_str,
     14521                                    cchOp < 55 ? 55 - cchOp : 0, "", pszAnnotation);
     14522                else
     14523                    pHlp->pfnPrintf(pHlp, "    %p: %#010RX32 %-7s %s\n",
     14524                                    pNativeCur, *pNativeCur, pInstr->mnemonic, pInstr->op_str);
    1448214525#  endif
    1448314526                offNative += pInstr->size / sizeof(*pNativeCur);
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