summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2017-11-28 16:00:02 +0000
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2018-02-08 10:53:18 +0000
commit718b53dc441abb80a8ba40d2ae22b40fd1c83427 (patch)
tree89ead18b8aecd4746939ce649be868c8171d96c0
parent73b1160bd808cc523f49db37df597e4b2f3b9877 (diff)
downloadgem5-718b53dc441abb80a8ba40d2ae22b40fd1c83427.tar.xz
arch-arm: Correct SecureMonitorTrap vals for aarch32
This patch replaces the dummy values which were defined for the SecureMonitorTrap thus enabling its usage in aarch32 mode. 1) It changes the vector table offset from 0x14 to 0x4 in compliance with the armv8 documentation. 2) When trapping in monitor mode for aarch32, the mon_lr is updated with the pc + a non zero offset (+4/2 depending on the current instruction set: +4 for A32, +2 for T32). Change-Id: I01e1e52bf5ecd405e7472e31e01cf9a599153b08 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8041 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
-rw-r--r--src/arch/arm/faults.cc9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/arch/arm/faults.cc b/src/arch/arm/faults.cc
index e3488f428..0f54906ac 100644
--- a/src/arch/arm/faults.cc
+++ b/src/arch/arm/faults.cc
@@ -237,6 +237,10 @@ template<> ArmFault::FaultVals ArmFaultVals<HypervisorTrap>::vals = {
"Hypervisor Trap", 0x014, 0x000, 0x200, 0x400, 0x600, MODE_HYP,
0, 0, 0, 0, false, false, false, EC_UNKNOWN, FaultStat()
};
+template<> ArmFault::FaultVals ArmFaultVals<SecureMonitorTrap>::vals = {
+ "Secure Monitor Trap", 0x004, 0x000, 0x200, 0x400, 0x600, MODE_MON,
+ 4, 2, 0, 0, false, false, false, EC_UNKNOWN, FaultStat()
+};
template<> ArmFault::FaultVals ArmFaultVals<Interrupt>::vals = {
"IRQ", 0x018, 0x080, 0x280, 0x480, 0x680, MODE_IRQ,
4, 4, 0, 0, false, true, false, EC_UNKNOWN, FaultStat()
@@ -258,11 +262,6 @@ template<> ArmFault::FaultVals ArmFaultVals<SupervisorTrap>::vals = {
"Supervisor Trap", 0x014, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
0, 0, 0, 0, false, false, false, EC_UNKNOWN, FaultStat()
};
-template<> ArmFault::FaultVals ArmFaultVals<SecureMonitorTrap>::vals = {
- // Some dummy values (SecureMonitorTrap is AArch64-only)
- "Secure Monitor Trap", 0x014, 0x000, 0x200, 0x400, 0x600, MODE_MON,
- 0, 0, 0, 0, false, false, false, EC_UNKNOWN, FaultStat()
-};
template<> ArmFault::FaultVals ArmFaultVals<PCAlignmentFault>::vals = {
// Some dummy values (PCAlignmentFault is AArch64-only)
"PC Alignment Fault", 0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,