diff options
-rw-r--r-- | include/VBox/vmm/cpumctx-armv8.h | 8 | ||||
-rw-r--r-- | include/VBox/vmm/dbgf.h | 3 | ||||
-rw-r--r-- | src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp | 1 | ||||
-rw-r--r-- | src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp | 24 |
4 files changed, 21 insertions, 15 deletions
diff --git a/include/VBox/vmm/cpumctx-armv8.h b/include/VBox/vmm/cpumctx-armv8.h index a541328c82c..bef570f65a4 100644 --- a/include/VBox/vmm/cpumctx-armv8.h +++ b/include/VBox/vmm/cpumctx-armv8.h @@ -140,6 +140,8 @@ typedef struct CPUMCTX CPUMCTXSYSREG Elr; /** The SCTLR_EL1 register. */ CPUMCTXSYSREG Sctlr; + /** THe TCR_EL1 register. */ + CPUMCTXSYSREG Tcr; /** The TTBR0_EL1 register. */ CPUMCTXSYSREG Ttbr0; /** The TTBR1_EL1 register. */ @@ -157,7 +159,7 @@ typedef struct CPUMCTX /** Externalized state tracker, CPUMCTX_EXTRN_XXX. */ uint64_t fExtrn; - uint64_t au64Padding1[3]; + uint64_t au64Padding1[2]; } CPUMCTX; @@ -191,8 +193,8 @@ AssertCompileSizeAlignment(CPUMCTX, 8); #define CPUMCTX_EXTRN_SP UINT64_C(0x0000000000000020) /** The PSTATE value is kept externally. */ #define CPUMCTX_EXTRN_PSTATE UINT64_C(0x0000000000000040) -/** The SCTRL_EL1/TTBR{0,1}_EL1 system registers are kept externally. */ -#define CPUMCTX_EXTRN_SCTLR_TTBR UINT64_C(0x0000000000000080) +/** The SCTRL_EL1/TCR_EL1/TTBR{0,1}_EL1 system registers are kept externally. */ +#define CPUMCTX_EXTRN_SCTLR_TCR_TTBR UINT64_C(0x0000000000000080) /** The X0 register value is kept externally. */ #define CPUMCTX_EXTRN_X0 UINT64_C(0x0000000000000100) diff --git a/include/VBox/vmm/dbgf.h b/include/VBox/vmm/dbgf.h index 4e985ff0d8b..6169ae97111 100644 --- a/include/VBox/vmm/dbgf.h +++ b/include/VBox/vmm/dbgf.h @@ -2154,10 +2154,11 @@ typedef enum DBGFREG DBGFREG_ARMV8_SP_EL1, DBGFREG_ARMV8_SPSR_EL1, DBGFREG_ARMV8_SPSR_EL2, + DBGFREG_ARMV8_PSTATE = DBGFREG_ARMV8_SPSR_EL2, DBGFREG_ARMV8_SCTLR_EL1, + DBGFREG_ARMV8_TCR_EL1, DBGFREG_ARMV8_TTBR0_EL1, DBGFREG_ARMV8_TTBR1_EL1, - DBGFREG_ARMV8_PSTATE = DBGFREG_ARMV8_SPSR_EL2, DBGFREG_ARMV8_ELR_EL1, DBGFREG_ARMV8_LAST = DBGFREG_ARMV8_ELR_EL1, diff --git a/src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp b/src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp index 5c744595b14..1b65866167e 100644 --- a/src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp +++ b/src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp @@ -275,6 +275,7 @@ static DBGFREGDESC const g_aCpumRegGstDescs[] = CPU_REG_RW_AS("sp_el1", SP_EL1, U64, aSpReg[1], cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), CPU_REG_RW_AS("spsr_el1", SPSR_EL1, U64, Spsr, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), CPU_REG_RW_AS("sctlr_el1", SCTLR_EL1, U64, Sctlr, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), + CPU_REG_RW_AS("tcr_el1", TCR_EL1, U64, Tcr, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), CPU_REG_RW_AS("ttbr0_el1", TTBR0_EL1, U64, Ttbr0, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), CPU_REG_RW_AS("ttbr1_el1", TTBR1_EL1, U64, Ttbr1, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), CPU_REG_RW_AS("elr_el1", ELR_EL1, U64, Elr, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), diff --git a/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp b/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp index e2d24ff6484..790c63d6b05 100644 --- a/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp +++ b/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp @@ -176,13 +176,14 @@ static const struct uint32_t offCpumCtx; } s_aCpumSysRegs[] = { - { HV_SYS_REG_SP_EL0, CPUMCTX_EXTRN_SP, RT_UOFFSETOF(CPUMCTX, aSpReg[0].u64) }, - { HV_SYS_REG_SP_EL1, CPUMCTX_EXTRN_SP, RT_UOFFSETOF(CPUMCTX, aSpReg[1].u64) }, - { HV_SYS_REG_SPSR_EL1, CPUMCTX_EXTRN_SPSR, RT_UOFFSETOF(CPUMCTX, Spsr.u64) }, - { HV_SYS_REG_ELR_EL1, CPUMCTX_EXTRN_ELR, RT_UOFFSETOF(CPUMCTX, Elr.u64) }, - { HV_SYS_REG_SCTLR_EL1, CPUMCTX_EXTRN_SCTLR_TTBR, RT_UOFFSETOF(CPUMCTX, Sctlr.u64) }, - { HV_SYS_REG_TTBR0_EL1, CPUMCTX_EXTRN_SCTLR_TTBR, RT_UOFFSETOF(CPUMCTX, Ttbr0.u64) }, - { HV_SYS_REG_TTBR1_EL1, CPUMCTX_EXTRN_SCTLR_TTBR, RT_UOFFSETOF(CPUMCTX, Ttbr1.u64) }, + { HV_SYS_REG_SP_EL0, CPUMCTX_EXTRN_SP, RT_UOFFSETOF(CPUMCTX, aSpReg[0].u64) }, + { HV_SYS_REG_SP_EL1, CPUMCTX_EXTRN_SP, RT_UOFFSETOF(CPUMCTX, aSpReg[1].u64) }, + { HV_SYS_REG_SPSR_EL1, CPUMCTX_EXTRN_SPSR, RT_UOFFSETOF(CPUMCTX, Spsr.u64) }, + { HV_SYS_REG_ELR_EL1, CPUMCTX_EXTRN_ELR, RT_UOFFSETOF(CPUMCTX, Elr.u64) }, + { HV_SYS_REG_SCTLR_EL1, CPUMCTX_EXTRN_SCTLR_TCR_TTBR, RT_UOFFSETOF(CPUMCTX, Sctlr.u64) }, + { HV_SYS_REG_TCR_EL1, CPUMCTX_EXTRN_SCTLR_TCR_TTBR, RT_UOFFSETOF(CPUMCTX, Tcr.u64) }, + { HV_SYS_REG_TTBR0_EL1, CPUMCTX_EXTRN_SCTLR_TCR_TTBR, RT_UOFFSETOF(CPUMCTX, Ttbr0.u64) }, + { HV_SYS_REG_TTBR1_EL1, CPUMCTX_EXTRN_SCTLR_TCR_TTBR, RT_UOFFSETOF(CPUMCTX, Ttbr1.u64) }, }; @@ -418,7 +419,8 @@ static void nemR3DarwinLogState(PVMCC pVM, PVMCPUCC pVCpu) "x28=%016VR{x28} x29=%016VR{x29} x30=%016VR{x30}\n" "pc=%016VR{pc} pstate=%016VR{pstate}\n" "sp_el0=%016VR{sp_el0} sp_el1=%016VR{sp_el1} elr_el1=%016VR{elr_el1}\n" - "sctlr_el1=%016VR{sctlr_el1} ttbr0_el1=%016VR{ttbr0_el1} ttbr1_el1=%016VR{ttbr1_el1}\n" + "sctlr_el1=%016VR{sctlr_el1} tcr_el1=%016VR{tcr_el1}\n" + "ttbr0_el1=%016VR{ttbr0_el1} ttbr1_el1=%016VR{ttbr1_el1}\n" ); char szInstr[256]; RT_ZERO(szInstr); #if 0 @@ -461,7 +463,7 @@ static int nemR3DarwinCopyStateFromHv(PVMCC pVM, PVMCPUCC pVCpu, uint64_t fWhat) } if ( hrc == HV_SUCCESS - && (fWhat & (CPUMCTX_EXTRN_SPSR | CPUMCTX_EXTRN_ELR | CPUMCTX_EXTRN_SP | CPUMCTX_EXTRN_SCTLR_TTBR))) + && (fWhat & (CPUMCTX_EXTRN_SPSR | CPUMCTX_EXTRN_ELR | CPUMCTX_EXTRN_SP | CPUMCTX_EXTRN_SCTLR_TCR_TTBR))) { /* System registers. */ for (uint32_t i = 0; i < RT_ELEMENTS(s_aCpumSysRegs); i++) @@ -649,8 +651,8 @@ static int nemR3DarwinExportGuestState(PVMCC pVM, PVMCPUCC pVCpu) } if ( hrc == HV_SUCCESS - && (pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_SPSR | CPUMCTX_EXTRN_ELR | CPUMCTX_EXTRN_SP)) - != (CPUMCTX_EXTRN_SPSR | CPUMCTX_EXTRN_ELR | CPUMCTX_EXTRN_SP)) + && (pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_SPSR | CPUMCTX_EXTRN_ELR | CPUMCTX_EXTRN_SP | CPUMCTX_EXTRN_SCTLR_TCR_TTBR)) + != (CPUMCTX_EXTRN_SPSR | CPUMCTX_EXTRN_ELR | CPUMCTX_EXTRN_SP | CPUMCTX_EXTRN_SCTLR_TCR_TTBR)) { /* System registers. */ for (uint32_t i = 0; i < RT_ELEMENTS(s_aCpumSysRegs); i++) |