VirtualBox

Changeset 100727 in vbox for trunk/src


Ignore:
Timestamp:
Jul 28, 2023 11:29:26 AM (19 months ago)
Author:
vboxsync
Message:

VMM/ARM: Some preliminary saved state handling and logging for the vCPU state, bugref:10387

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/CPUM-armv8.cpp

    r99956 r100727  
    139139
    140140
    141 #if 0 /** @todo Will come later. */
    142141/** Saved state field descriptors for CPUMCTX. */
    143142static const SSMFIELD g_aCpumCtxFields[] =
     
    211210    SSMFIELD_ENTRY(         CPUMCTX, Spsr.u64),
    212211    SSMFIELD_ENTRY(         CPUMCTX, Elr.u64),
     212    SSMFIELD_ENTRY(         CPUMCTX, Sctlr.u64),
     213    SSMFIELD_ENTRY(         CPUMCTX, Tcr.u64),
     214    SSMFIELD_ENTRY(         CPUMCTX, Ttbr0.u64),
     215    SSMFIELD_ENTRY(         CPUMCTX, Ttbr1.u64),
     216    SSMFIELD_ENTRY(         CPUMCTX, VBar.u64),
     217    SSMFIELD_ENTRY(         CPUMCTX, aBp[0].Ctrl.u64),
     218    SSMFIELD_ENTRY(         CPUMCTX, aBp[0].Value.u64),
     219    SSMFIELD_ENTRY(         CPUMCTX, aBp[1].Ctrl.u64),
     220    SSMFIELD_ENTRY(         CPUMCTX, aBp[1].Value.u64),
     221    SSMFIELD_ENTRY(         CPUMCTX, aBp[2].Ctrl.u64),
     222    SSMFIELD_ENTRY(         CPUMCTX, aBp[2].Value.u64),
     223    SSMFIELD_ENTRY(         CPUMCTX, aBp[3].Ctrl.u64),
     224    SSMFIELD_ENTRY(         CPUMCTX, aBp[3].Value.u64),
     225    SSMFIELD_ENTRY(         CPUMCTX, aBp[4].Ctrl.u64),
     226    SSMFIELD_ENTRY(         CPUMCTX, aBp[4].Value.u64),
     227    SSMFIELD_ENTRY(         CPUMCTX, aBp[5].Ctrl.u64),
     228    SSMFIELD_ENTRY(         CPUMCTX, aBp[5].Value.u64),
     229    SSMFIELD_ENTRY(         CPUMCTX, aBp[6].Ctrl.u64),
     230    SSMFIELD_ENTRY(         CPUMCTX, aBp[6].Value.u64),
     231    SSMFIELD_ENTRY(         CPUMCTX, aBp[7].Ctrl.u64),
     232    SSMFIELD_ENTRY(         CPUMCTX, aBp[7].Value.u64),
     233    SSMFIELD_ENTRY(         CPUMCTX, aBp[8].Ctrl.u64),
     234    SSMFIELD_ENTRY(         CPUMCTX, aBp[8].Value.u64),
     235    SSMFIELD_ENTRY(         CPUMCTX, aBp[9].Ctrl.u64),
     236    SSMFIELD_ENTRY(         CPUMCTX, aBp[9].Value.u64),
     237    SSMFIELD_ENTRY(         CPUMCTX, aBp[10].Ctrl.u64),
     238    SSMFIELD_ENTRY(         CPUMCTX, aBp[10].Value.u64),
     239    SSMFIELD_ENTRY(         CPUMCTX, aBp[11].Ctrl.u64),
     240    SSMFIELD_ENTRY(         CPUMCTX, aBp[11].Value.u64),
     241    SSMFIELD_ENTRY(         CPUMCTX, aBp[12].Ctrl.u64),
     242    SSMFIELD_ENTRY(         CPUMCTX, aBp[12].Value.u64),
     243    SSMFIELD_ENTRY(         CPUMCTX, aBp[13].Ctrl.u64),
     244    SSMFIELD_ENTRY(         CPUMCTX, aBp[13].Value.u64),
     245    SSMFIELD_ENTRY(         CPUMCTX, aBp[14].Ctrl.u64),
     246    SSMFIELD_ENTRY(         CPUMCTX, aBp[14].Value.u64),
     247    SSMFIELD_ENTRY(         CPUMCTX, aBp[15].Ctrl.u64),
     248    SSMFIELD_ENTRY(         CPUMCTX, aBp[15].Value.u64),
     249    SSMFIELD_ENTRY(         CPUMCTX, aWp[0].Ctrl.u64),
     250    SSMFIELD_ENTRY(         CPUMCTX, aWp[0].Value.u64),
     251    SSMFIELD_ENTRY(         CPUMCTX, aWp[1].Ctrl.u64),
     252    SSMFIELD_ENTRY(         CPUMCTX, aWp[1].Value.u64),
     253    SSMFIELD_ENTRY(         CPUMCTX, aWp[2].Ctrl.u64),
     254    SSMFIELD_ENTRY(         CPUMCTX, aWp[2].Value.u64),
     255    SSMFIELD_ENTRY(         CPUMCTX, aWp[3].Ctrl.u64),
     256    SSMFIELD_ENTRY(         CPUMCTX, aWp[3].Value.u64),
     257    SSMFIELD_ENTRY(         CPUMCTX, aWp[4].Ctrl.u64),
     258    SSMFIELD_ENTRY(         CPUMCTX, aWp[4].Value.u64),
     259    SSMFIELD_ENTRY(         CPUMCTX, aWp[5].Ctrl.u64),
     260    SSMFIELD_ENTRY(         CPUMCTX, aWp[5].Value.u64),
     261    SSMFIELD_ENTRY(         CPUMCTX, aWp[6].Ctrl.u64),
     262    SSMFIELD_ENTRY(         CPUMCTX, aWp[6].Value.u64),
     263    SSMFIELD_ENTRY(         CPUMCTX, aWp[7].Ctrl.u64),
     264    SSMFIELD_ENTRY(         CPUMCTX, aWp[7].Value.u64),
     265    SSMFIELD_ENTRY(         CPUMCTX, aWp[8].Ctrl.u64),
     266    SSMFIELD_ENTRY(         CPUMCTX, aWp[8].Value.u64),
     267    SSMFIELD_ENTRY(         CPUMCTX, aWp[9].Ctrl.u64),
     268    SSMFIELD_ENTRY(         CPUMCTX, aWp[9].Value.u64),
     269    SSMFIELD_ENTRY(         CPUMCTX, aWp[10].Ctrl.u64),
     270    SSMFIELD_ENTRY(         CPUMCTX, aWp[10].Value.u64),
     271    SSMFIELD_ENTRY(         CPUMCTX, aWp[11].Ctrl.u64),
     272    SSMFIELD_ENTRY(         CPUMCTX, aWp[11].Value.u64),
     273    SSMFIELD_ENTRY(         CPUMCTX, aWp[12].Ctrl.u64),
     274    SSMFIELD_ENTRY(         CPUMCTX, aWp[12].Value.u64),
     275    SSMFIELD_ENTRY(         CPUMCTX, aWp[13].Ctrl.u64),
     276    SSMFIELD_ENTRY(         CPUMCTX, aWp[13].Value.u64),
     277    SSMFIELD_ENTRY(         CPUMCTX, aWp[14].Ctrl.u64),
     278    SSMFIELD_ENTRY(         CPUMCTX, aWp[14].Value.u64),
     279    SSMFIELD_ENTRY(         CPUMCTX, aWp[15].Ctrl.u64),
     280    SSMFIELD_ENTRY(         CPUMCTX, aWp[15].Value.u64),
     281    SSMFIELD_ENTRY(         CPUMCTX, Mdscr.u64),
     282    SSMFIELD_ENTRY(         CPUMCTX, Apda.Low.u64),
     283    SSMFIELD_ENTRY(         CPUMCTX, Apda.High.u64),
     284    SSMFIELD_ENTRY(         CPUMCTX, Apdb.Low.u64),
     285    SSMFIELD_ENTRY(         CPUMCTX, Apdb.High.u64),
     286    SSMFIELD_ENTRY(         CPUMCTX, Apga.Low.u64),
     287    SSMFIELD_ENTRY(         CPUMCTX, Apga.High.u64),
     288    SSMFIELD_ENTRY(         CPUMCTX, Apia.Low.u64),
     289    SSMFIELD_ENTRY(         CPUMCTX, Apia.High.u64),
     290    SSMFIELD_ENTRY(         CPUMCTX, Apib.Low.u64),
     291    SSMFIELD_ENTRY(         CPUMCTX, Apib.High.u64),
     292    SSMFIELD_ENTRY(         CPUMCTX, Afsr0.u64),
     293    SSMFIELD_ENTRY(         CPUMCTX, Afsr1.u64),
     294    SSMFIELD_ENTRY(         CPUMCTX, Amair.u64),
     295    SSMFIELD_ENTRY(         CPUMCTX, CntKCtl.u64),
     296    SSMFIELD_ENTRY(         CPUMCTX, ContextIdr.u64),
     297    SSMFIELD_ENTRY(         CPUMCTX, Cpacr.u64),
     298    SSMFIELD_ENTRY(         CPUMCTX, Csselr.u64),
     299    SSMFIELD_ENTRY(         CPUMCTX, Esr.u64),
     300    SSMFIELD_ENTRY(         CPUMCTX, Far.u64),
     301    SSMFIELD_ENTRY(         CPUMCTX, Mair.u64),
     302    SSMFIELD_ENTRY(         CPUMCTX, Par.u64),
     303    SSMFIELD_ENTRY(         CPUMCTX, TpIdrRoEl0.u64),
     304    SSMFIELD_ENTRY(         CPUMCTX, aTpIdr[0].u64),
     305    SSMFIELD_ENTRY(         CPUMCTX, aTpIdr[1].u64),
     306    SSMFIELD_ENTRY(         CPUMCTX, MDccInt.u64),
    213307    SSMFIELD_ENTRY(         CPUMCTX, fpcr),
    214308    SSMFIELD_ENTRY(         CPUMCTX, fpsr),
    215309    SSMFIELD_ENTRY(         CPUMCTX, fPState),
    216     /** @todo */
     310    SSMFIELD_ENTRY(         CPUMCTX, fOsLck),
     311    SSMFIELD_ENTRY(         CPUMCTX, CntvCtlEl0),
     312    SSMFIELD_ENTRY(         CPUMCTX, CntvCValEl0),
    217313    SSMFIELD_ENTRY_TERM()
    218314};
    219 #endif
    220315
    221316
     
    411506     */
    412507    SSMR3PutU32(pSSM, pVM->cCpus);
    413     /** @todo */
     508    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
     509    {
     510        PVMCPU const   pVCpu   = pVM->apCpusR3[idCpu];
     511        PCPUMCTX const pGstCtx = &pVCpu->cpum.s.Guest;
     512
     513        SSMR3PutStructEx(pSSM, pGstCtx, sizeof(*pGstCtx), 0, g_aCpumCtxFields, NULL);
     514
     515        SSMR3PutU32(pSSM, pVCpu->cpum.s.fChanged);
     516    }
    414517    return VINF_SUCCESS;
    415518}
     
    435538     * Validate version.
    436539     */
    437     /** @todo */ RT_NOREF(pSSM, uVersion);
     540    if (uVersion != CPUM_SAVED_STATE_VERSION)
     541    {
     542        AssertMsgFailed(("cpumR3LoadExec: Invalid version uVersion=%d!\n", uVersion));
     543        return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
     544    }
    438545
    439546    if (uPass == SSM_PASS_FINAL)
    440547    {
    441         /** @todo */
     548        /*
     549         * Do the per-CPU restoring.
     550         */
     551        for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
     552        {
     553            PVMCPU   pVCpu   = pVM->apCpusR3[idCpu];
     554            PCPUMCTX pGstCtx = &pVCpu->cpum.s.Guest;
     555
     556            /*
     557             * Start by restoring the CPUMCTX structure and the X86FXSAVE bits of the extended state.
     558             */
     559            int rc = SSMR3GetStructEx(pSSM, pGstCtx,                  sizeof(*pGstCtx),                0, g_aCpumCtxFields, NULL);
     560            AssertRCReturn(rc, rc);
     561
     562            /*
     563             * Restore a couple of flags.
     564             */
     565            SSMR3GetU32(pSSM, &pVCpu->cpum.s.fChanged);
     566        }
    442567    }
    443568
     
    496621    }   s_aFlags[] =
    497622    {
    498         { NULL, NULL, 0 }, /** @todo */
     623        { "SP", "nSP", ARMV8_SPSR_EL2_AARCH64_SP },
     624        { "M4", "nM4", ARMV8_SPSR_EL2_AARCH64_M4 },
     625        { "T",  "nT",  ARMV8_SPSR_EL2_AARCH64_T  },
     626        { "nF", "F",   ARMV8_SPSR_EL2_AARCH64_F  },
     627        { "nI", "I",   ARMV8_SPSR_EL2_AARCH64_I  },
     628        { "nA", "A",   ARMV8_SPSR_EL2_AARCH64_A  },
     629        { "nD", "D",   ARMV8_SPSR_EL2_AARCH64_D  },
     630        { "V",  "nV",  ARMV8_SPSR_EL2_AARCH64_V  },
     631        { "C",  "nC",  ARMV8_SPSR_EL2_AARCH64_C  },
     632        { "Z",  "nZ",  ARMV8_SPSR_EL2_AARCH64_Z  },
     633        { "N",  "nN",  ARMV8_SPSR_EL2_AARCH64_N  },
    499634    };
    500635    char *psz = pszPState;
     
    520655 * @param   pHlp        Output functions.
    521656 * @param   enmType     The dump type.
    522  * @param   pszPrefix   Register name prefix.
    523  */
    524 static void cpumR3InfoOne(PVM pVM, PCPUMCTX pCtx, PCDBGFINFOHLP pHlp, CPUMDUMPTYPE enmType, const char *pszPrefix)
    525 {
    526     RT_NOREF(pVM, pHlp, enmType, pszPrefix);
     657 */
     658static void cpumR3InfoOne(PVM pVM, PCPUMCTX pCtx, PCDBGFINFOHLP pHlp, CPUMDUMPTYPE enmType)
     659{
     660    RT_NOREF(pVM);
    527661
    528662    /*
     
    532666    cpumR3InfoFormatPState(&szPState[0], pCtx->fPState);
    533667
    534     /** @todo */
     668    /*
     669     * Format the registers.
     670     */
     671    switch (enmType)
     672    {
     673        case CPUMDUMPTYPE_TERSE:
     674            if (CPUMIsGuestIn64BitCodeEx(pCtx))
     675                pHlp->pfnPrintf(pHlp,
     676                    "x0=%016RX64 x1=%016RX64 x2=%016RX64 x3=%016RX64\n"
     677                    "x4=%016RX64 x5=%016RX64 x6=%016RX64 x7=%016RX64\n"
     678                    "x8=%016RX64 x9=%016RX64 x10=%016RX64 x11=%016RX64\n"
     679                    "x12=%016RX64 x13=%016RX64 x14=%016RX64 x15=%016RX64\n"
     680                    "x16=%016RX64 x17=%016RX64 x18=%016RX64 x19=%016RX64\n"
     681                    "x20=%016RX64 x21=%016RX64 x22=%016RX64 x23=%016RX64\n"
     682                    "x24=%016RX64 x25=%016RX64 x26=%016RX64 x27=%016RX64\n"
     683                    "x28=%016RX64 x29=%016RX64 x30=%016RX64\n"
     684                    "pc=%016RX64 pstate=%016RX64 %s\n"
     685                    "sp_el0=%016RX64 sp_el1=%016RX64\n",
     686                    pCtx->aGRegs[0],  pCtx->aGRegs[1],  pCtx->aGRegs[2],  pCtx->aGRegs[3],
     687                    pCtx->aGRegs[4],  pCtx->aGRegs[5],  pCtx->aGRegs[6],  pCtx->aGRegs[7],
     688                    pCtx->aGRegs[8],  pCtx->aGRegs[9],  pCtx->aGRegs[10], pCtx->aGRegs[11],
     689                    pCtx->aGRegs[12], pCtx->aGRegs[13], pCtx->aGRegs[14], pCtx->aGRegs[15],
     690                    pCtx->aGRegs[16], pCtx->aGRegs[17], pCtx->aGRegs[18], pCtx->aGRegs[19],
     691                    pCtx->aGRegs[20], pCtx->aGRegs[21], pCtx->aGRegs[22], pCtx->aGRegs[23],
     692                    pCtx->aGRegs[24], pCtx->aGRegs[25], pCtx->aGRegs[26], pCtx->aGRegs[27],
     693                    pCtx->aGRegs[28], pCtx->aGRegs[29], pCtx->aGRegs[30],
     694                    pCtx->Pc.u64, pCtx->fPState, szPState,
     695                    pCtx->aSpReg[0].u64, pCtx->aSpReg[1].u64);
     696            else
     697                AssertFailed();
     698            break;
     699
     700        case CPUMDUMPTYPE_DEFAULT:
     701            if (CPUMIsGuestIn64BitCodeEx(pCtx))
     702                pHlp->pfnPrintf(pHlp,
     703                    "x0=%016RX64 x1=%016RX64 x2=%016RX64 x3=%016RX64\n"
     704                    "x4=%016RX64 x5=%016RX64 x6=%016RX64 x7=%016RX64\n"
     705                    "x8=%016RX64 x9=%016RX64 x10=%016RX64 x11=%016RX64\n"
     706                    "x12=%016RX64 x13=%016RX64 x14=%016RX64 x15=%016RX64\n"
     707                    "x16=%016RX64 x17=%016RX64 x18=%016RX64 x19=%016RX64\n"
     708                    "x20=%016RX64 x21=%016RX64 x22=%016RX64 x23=%016RX64\n"
     709                    "x24=%016RX64 x25=%016RX64 x26=%016RX64 x27=%016RX64\n"
     710                    "x28=%016RX64 x29=%016RX64 x30=%016RX64\n"
     711                    "pc=%016RX64 pstate=%016RX64 %s\n"
     712                    "sp_el0=%016RX64 sp_el1=%016RX64 sctlr_el1=%016RX64\n"
     713                    "tcr_el1=%016RX64 ttbr0_el1=%016RX64 ttbr1_el1=%016RX64\n"
     714                    "vbar_el1=%016RX64 elr_el1=%016RX64 esr_el1=%016RX64\n",
     715                    pCtx->aGRegs[0],  pCtx->aGRegs[1],  pCtx->aGRegs[2],  pCtx->aGRegs[3],
     716                    pCtx->aGRegs[4],  pCtx->aGRegs[5],  pCtx->aGRegs[6],  pCtx->aGRegs[7],
     717                    pCtx->aGRegs[8],  pCtx->aGRegs[9],  pCtx->aGRegs[10], pCtx->aGRegs[11],
     718                    pCtx->aGRegs[12], pCtx->aGRegs[13], pCtx->aGRegs[14], pCtx->aGRegs[15],
     719                    pCtx->aGRegs[16], pCtx->aGRegs[17], pCtx->aGRegs[18], pCtx->aGRegs[19],
     720                    pCtx->aGRegs[20], pCtx->aGRegs[21], pCtx->aGRegs[22], pCtx->aGRegs[23],
     721                    pCtx->aGRegs[24], pCtx->aGRegs[25], pCtx->aGRegs[26], pCtx->aGRegs[27],
     722                    pCtx->aGRegs[28], pCtx->aGRegs[29], pCtx->aGRegs[30],
     723                    pCtx->Pc.u64, pCtx->fPState, szPState,
     724                    pCtx->aSpReg[0].u64, pCtx->aSpReg[1].u64, pCtx->Sctlr.u64,
     725                    pCtx->Tcr.u64, pCtx->Ttbr0.u64, pCtx->Ttbr1.u64,
     726                    pCtx->VBar.u64, pCtx->Elr.u64, pCtx->Esr.u64);
     727            else
     728                AssertFailed();
     729            break;
     730
     731        case CPUMDUMPTYPE_VERBOSE:
     732            if (CPUMIsGuestIn64BitCodeEx(pCtx))
     733                pHlp->pfnPrintf(pHlp,
     734                    "x0=%016RX64 x1=%016RX64 x2=%016RX64 x3=%016RX64\n"
     735                    "x4=%016RX64 x5=%016RX64 x6=%016RX64 x7=%016RX64\n"
     736                    "x8=%016RX64 x9=%016RX64 x10=%016RX64 x11=%016RX64\n"
     737                    "x12=%016RX64 x13=%016RX64 x14=%016RX64 x15=%016RX64\n"
     738                    "x16=%016RX64 x17=%016RX64 x18=%016RX64 x19=%016RX64\n"
     739                    "x20=%016RX64 x21=%016RX64 x22=%016RX64 x23=%016RX64\n"
     740                    "x24=%016RX64 x25=%016RX64 x26=%016RX64 x27=%016RX64\n"
     741                    "x28=%016RX64 x29=%016RX64 x30=%016RX64\n"
     742                    "pc=%016RX64 pstate=%016RX64 %s\n"
     743                    "sp_el0=%016RX64 sp_el1=%016RX64 sctlr_el1=%016RX64\n"
     744                    "tcr_el1=%016RX64 ttbr0_el1=%016RX64 ttbr1_el1=%016RX64\n"
     745                    "vbar_el1=%016RX64 elr_el1=%016RX64 esr_el1=%016RX64\n"
     746                    "contextidr_el1=%016RX64 tpidrr0_el0=%016RX64\n"
     747                    "tpidr_el0=%016RX64 tpidr_el1=%016RX64\n"
     748                    "far_el1=%016RX64 mair_el1=%016RX64 par_el1=%016RX64\n"
     749                    "cntv_ctl_el0=%016RX64 cntv_val_el0=%016RX64\n"
     750                    "afsr0_el1=%016RX64 afsr0_el1=%016RX64 amair_el1=%016RX64\n"
     751                    "cntkctl_el1=%016RX64 cpacr_el1=%016RX64 csselr_el1=%016RX64\n"
     752                    "mdccint_el1=%016RX64\n",
     753                    pCtx->aGRegs[0],  pCtx->aGRegs[1],  pCtx->aGRegs[2],  pCtx->aGRegs[3],
     754                    pCtx->aGRegs[4],  pCtx->aGRegs[5],  pCtx->aGRegs[6],  pCtx->aGRegs[7],
     755                    pCtx->aGRegs[8],  pCtx->aGRegs[9],  pCtx->aGRegs[10], pCtx->aGRegs[11],
     756                    pCtx->aGRegs[12], pCtx->aGRegs[13], pCtx->aGRegs[14], pCtx->aGRegs[15],
     757                    pCtx->aGRegs[16], pCtx->aGRegs[17], pCtx->aGRegs[18], pCtx->aGRegs[19],
     758                    pCtx->aGRegs[20], pCtx->aGRegs[21], pCtx->aGRegs[22], pCtx->aGRegs[23],
     759                    pCtx->aGRegs[24], pCtx->aGRegs[25], pCtx->aGRegs[26], pCtx->aGRegs[27],
     760                    pCtx->aGRegs[28], pCtx->aGRegs[29], pCtx->aGRegs[30],
     761                    pCtx->Pc.u64, pCtx->fPState, szPState,
     762                    pCtx->aSpReg[0].u64, pCtx->aSpReg[1].u64, pCtx->Sctlr.u64,
     763                    pCtx->Tcr.u64, pCtx->Ttbr0.u64, pCtx->Ttbr1.u64,
     764                    pCtx->VBar.u64, pCtx->Elr.u64, pCtx->Esr.u64,
     765                    pCtx->ContextIdr.u64, pCtx->TpIdrRoEl0.u64,
     766                    pCtx->aTpIdr[0].u64, pCtx->aTpIdr[1].u64,
     767                    pCtx->Far.u64, pCtx->Mair.u64, pCtx->Par.u64,
     768                    pCtx->CntvCtlEl0, pCtx->CntvCValEl0,
     769                    pCtx->Afsr0.u64, pCtx->Afsr1.u64, pCtx->Amair.u64,
     770                    pCtx->CntKCtl.u64, pCtx->Cpacr.u64, pCtx->Csselr.u64,
     771                    pCtx->MDccInt.u64);
     772            else
     773                AssertFailed();
     774
     775            pHlp->pfnPrintf(pHlp, "fpcr=%016RX64 fpsr=%016RX64\n", pCtx->fpcr, pCtx->fpsr);
     776            for (unsigned i = 0; i < RT_ELEMENTS(pCtx->aVRegs); i++)
     777                pHlp->pfnPrintf(pHlp,
     778                                i & 1
     779                                ? "q%u%s=%08RX32'%08RX32'%08RX32'%08RX32\n"
     780                                : "q%u%s=%08RX32'%08RX32'%08RX32'%08RX32  ",
     781                                i, i < 10 ? " " : "",
     782                                pCtx->aVRegs[i].au32[3],
     783                                pCtx->aVRegs[i].au32[2],
     784                                pCtx->aVRegs[i].au32[1],
     785                                pCtx->aVRegs[i].au32[0]);
     786
     787            pHlp->pfnPrintf(pHlp, "mdscr_el1=%016RX64\n", pCtx->Mdscr.u64);
     788            for (unsigned i = 0; i < RT_ELEMENTS(pCtx->aBp); i++)
     789                pHlp->pfnPrintf(pHlp, "DbgBp%u%s: Control=%016RX64 Value=%016RX64\n",
     790                                i, i < 10 ? " " : "",
     791                                pCtx->aBp[i].Ctrl, pCtx->aBp[i].Value);
     792
     793            for (unsigned i = 0; i < RT_ELEMENTS(pCtx->aWp); i++)
     794                pHlp->pfnPrintf(pHlp, "DbgWp%u%s: Control=%016RX64 Value=%016RX64\n",
     795                                i, i < 10 ? " " : "",
     796                                pCtx->aWp[i].Ctrl, pCtx->aWp[i].Value);
     797
     798            pHlp->pfnPrintf(pHlp, "APDAKey=%016RX64'%016RX64\n", pCtx->Apda.High.u64, pCtx->Apda.Low.u64);
     799            pHlp->pfnPrintf(pHlp, "APDBKey=%016RX64'%016RX64\n", pCtx->Apdb.High.u64, pCtx->Apdb.Low.u64);
     800            pHlp->pfnPrintf(pHlp, "APGAKey=%016RX64'%016RX64\n", pCtx->Apga.High.u64, pCtx->Apga.Low.u64);
     801            pHlp->pfnPrintf(pHlp, "APIAKey=%016RX64'%016RX64\n", pCtx->Apia.High.u64, pCtx->Apia.Low.u64);
     802            pHlp->pfnPrintf(pHlp, "APIBKey=%016RX64'%016RX64\n", pCtx->Apib.High.u64, pCtx->Apib.Low.u64);
     803
     804            break;
     805    }
    535806}
    536807
     
    611882
    612883    PCPUMCTX pCtx = &pVCpu->cpum.s.Guest;
    613     cpumR3InfoOne(pVM, pCtx, pHlp, enmType, "");
     884    cpumR3InfoOne(pVM, pCtx, pHlp, enmType);
    614885}
    615886
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