arch-arm: Correct SecureMonitorTrap vals for aarch32
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 28 Nov 2017 16:00:02 +0000 (16:00 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Thu, 8 Feb 2018 10:53:18 +0000 (10:53 +0000)
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>

src/arch/arm/faults.cc

index e3488f428be6d49c6c9d8cb1b97239dc6fc722e0..0f54906ac11eb46f1140c89f5e898250dfeb2868 100644 (file)
@@ -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,