VirtualBox

Changeset 107031 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Nov 18, 2024 3:00:29 PM (3 months ago)
Author:
vboxsync
Message:

VMM/CPUM-armv8: Allow reading/writing the debug control/value registers through CPUMQueryGuestSysReg/CPUMSetGuestSysReg, bugreef:10393

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/CPUMAllSysRegs-armv8.cpp

    r106476 r107031  
    5353#define CPUM_SYSREG_ASSERT_CPUMCPU_OFFSET_RETURN(a_pVCpu, a_pRange, a_Type, a_VarName) \
    5454    AssertMsgReturn(   (a_pRange)->offCpumCpu >= 8 \
    55                     && (a_pRange)->offCpumCpu < sizeof(CPUMCPU) \
     55                    && (a_pRange)->offCpumCpu < sizeof(CPUMCTX) \
    5656                    && !((a_pRange)->offCpumCpu & (RT_MIN(sizeof(a_Type), 8) - 1)) \
    5757                    , ("offCpumCpu=%#x %s\n", (a_pRange)->offCpumCpu, (a_pRange)->szName), \
    5858                    VERR_CPUM_MSR_BAD_CPUMCPU_OFFSET); \
    59     a_Type *a_VarName = (a_Type *)((uintptr_t)&(a_pVCpu)->cpum.s + (a_pRange)->offCpumCpu)
     59    a_Type *a_VarName = (a_Type *)((uintptr_t)&(a_pVCpu)->cpum.s.Guest + (a_pRange)->offCpumCpu)
    6060
    6161
     
    146146
    147147
     148/** @callback_method_impl{FNCPUMRDSYSREG} */
     149static DECLCALLBACK(VBOXSTRICTRC) cpumSysRegRd_ReadCpumOff(PVMCPUCC pVCpu, uint32_t idSysReg, PCCPUMSYSREGRANGE pRange, uint64_t *puValue)
     150{
     151    RT_NOREF(idSysReg);
     152
     153    CPUM_SYSREG_ASSERT_CPUMCPU_OFFSET_RETURN(pVCpu, pRange, CPUMCTXSYSREG, pSysReg);
     154    *puValue = pSysReg->u64;
     155    return VINF_SUCCESS;
     156}
     157
     158
     159/** @callback_method_impl{FNCPUMWRSYSREG} */
     160static DECLCALLBACK(VBOXSTRICTRC) cpumSysRegWr_WriteCpumOff(PVMCPUCC pVCpu, uint32_t idSysReg, PCCPUMSYSREGRANGE pRange, uint64_t uValue, uint64_t uRawValue)
     161{
     162    RT_NOREF(idSysReg, uRawValue);
     163
     164    CPUM_SYSREG_ASSERT_CPUMCPU_OFFSET_RETURN(pVCpu, pRange, CPUMCTXSYSREG, pSysReg);
     165    pSysReg->u64 = uValue;
     166    return VINF_SUCCESS;
     167}
     168
    148169
    149170/** @callback_method_impl{FNCPUMRDSYSREG} */
     
    209230    { NULL }, /* Alias */
    210231    { cpumSysRegRd_WriteOnly },
     232    { cpumSysRegRd_ReadCpumOff },
    211233    { cpumSysRegRd_GicV3Icc  },
    212234    { cpumSysRegRd_OslsrEl1  },
     
    224246    { cpumSysRegWr_ReadOnly },
    225247    { NULL }, /* Alias */
     248    { cpumSysRegWr_WriteCpumOff },
    226249    { cpumSysRegWr_GicV3Icc },
    227250    { cpumSysRegWr_OslarEl1 },
     
    468491    CPUM_ASSERT_RD_SYSREG_FN(FixedValue);
    469492    CPUM_ASSERT_RD_SYSREG_FN(WriteOnly);
     493    CPUM_ASSERT_RD_SYSREG_FN(ReadCpumOff);
    470494    CPUM_ASSERT_RD_SYSREG_FN(GicV3Icc);
    471495    CPUM_ASSERT_RD_SYSREG_FN(OslsrEl1);
     496    CPUM_ASSERT_RD_SYSREG_FN(Pmu);
    472497
    473498    AssertReturn(g_aCpumWrSysRegFns[kCpumSysRegWrFn_Invalid].pfnWrSysReg == NULL, VERR_CPUM_IPE_2);
    474499    CPUM_ASSERT_WR_SYSREG_FN(IgnoreWrite);
    475500    CPUM_ASSERT_WR_SYSREG_FN(ReadOnly);
     501    CPUM_ASSERT_WR_SYSREG_FN(WriteCpumOff);
    476502    CPUM_ASSERT_WR_SYSREG_FN(GicV3Icc);
    477503    CPUM_ASSERT_WR_SYSREG_FN(OslarEl1);
     504    CPUM_ASSERT_WR_SYSREG_FN(Pmu);
    478505
    479506    return VINF_SUCCESS;
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