summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/VBox/vmm/cpumctx-armv8.h8
-rw-r--r--include/VBox/vmm/dbgf.h3
-rw-r--r--src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp1
-rw-r--r--src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp24
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++)