arch-arm: Use scoped enum for ExceptionClass

Change-Id: I42ce3c31dfe89b75658db4a79c6a29a43fd0d82b
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/64411
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Richard Cooper <richard.cooper@arm.com>
diff --git a/src/arch/arm/faults.cc b/src/arch/arm/faults.cc
index 76320f6..d2696a2 100644
--- a/src/arch/arm/faults.cc
+++ b/src/arch/arm/faults.cc
@@ -205,106 +205,106 @@
     // Some dummy values (the reset vector has an IMPLEMENTATION DEFINED
     // location in AArch64)
     "Reset",                 0x000, 0x000, 0x000, 0x000, 0x000, MODE_SVC,
-    0, 0, 0, 0, false, true,  true,  EC_UNKNOWN
+    0, 0, 0, 0, false, true,  true,  ExceptionClass::UNKNOWN
 );
 template<> ArmFault::FaultVals ArmFaultVals<UndefinedInstruction>::vals(
     "Undefined Instruction", 0x004, 0x000, 0x200, 0x400, 0x600, MODE_UNDEFINED,
-    4, 2, 0, 0, true,  false, false, EC_UNKNOWN
+    4, 2, 0, 0, true,  false, false, ExceptionClass::UNKNOWN
 );
 template<> ArmFault::FaultVals ArmFaultVals<SupervisorCall>::vals(
     "Supervisor Call",       0x008, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    4, 2, 4, 2, true,  false, false, EC_SVC_TO_HYP
+    4, 2, 4, 2, true,  false, false, ExceptionClass::SVC_TO_HYP
 );
 template<> ArmFault::FaultVals ArmFaultVals<SecureMonitorCall>::vals(
     "Secure Monitor Call",   0x008, 0x000, 0x200, 0x400, 0x600, MODE_MON,
-    4, 4, 4, 4, false, true,  true,  EC_SMC_TO_HYP
+    4, 4, 4, 4, false, true,  true,  ExceptionClass::SMC_TO_HYP
 );
 template<> ArmFault::FaultVals ArmFaultVals<HypervisorCall>::vals(
     "Hypervisor Call",       0x008, 0x000, 0x200, 0x400, 0x600, MODE_HYP,
-    4, 4, 4, 4, true,  false, false, EC_HVC
+    4, 4, 4, 4, true,  false, false, ExceptionClass::HVC
 );
 template<> ArmFault::FaultVals ArmFaultVals<PrefetchAbort>::vals(
     "Prefetch Abort",        0x00C, 0x000, 0x200, 0x400, 0x600, MODE_ABORT,
-    4, 4, 0, 0, true,  true,  false, EC_PREFETCH_ABORT_TO_HYP
+    4, 4, 0, 0, true,  true,  false, ExceptionClass::PREFETCH_ABORT_TO_HYP
 );
 template<> ArmFault::FaultVals ArmFaultVals<DataAbort>::vals(
     "Data Abort",            0x010, 0x000, 0x200, 0x400, 0x600, MODE_ABORT,
-    8, 8, 0, 0, true,  true,  false, EC_DATA_ABORT_TO_HYP
+    8, 8, 0, 0, true,  true,  false, ExceptionClass::DATA_ABORT_TO_HYP
 );
 template<> ArmFault::FaultVals ArmFaultVals<VirtualDataAbort>::vals(
     "Virtual Data Abort",    0x010, 0x000, 0x200, 0x400, 0x600, MODE_ABORT,
-    8, 8, 0, 0, true,  true,  false, EC_INVALID
+    8, 8, 0, 0, true,  true,  false, ExceptionClass::INVALID
 );
 template<> ArmFault::FaultVals ArmFaultVals<HypervisorTrap>::vals(
     // @todo: double check these values
     "Hypervisor Trap",       0x014, 0x000, 0x200, 0x400, 0x600, MODE_HYP,
-    0, 0, 0, 0, false, false, false, EC_UNKNOWN
+    0, 0, 0, 0, false, false, false, ExceptionClass::UNKNOWN
 );
 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
+    4, 2, 0, 0, false, false, false, ExceptionClass::UNKNOWN
 );
 template<> ArmFault::FaultVals ArmFaultVals<Interrupt>::vals(
     "IRQ",                   0x018, 0x080, 0x280, 0x480, 0x680, MODE_IRQ,
-    4, 4, 0, 0, false, true,  false, EC_UNKNOWN
+    4, 4, 0, 0, false, true,  false, ExceptionClass::UNKNOWN
 );
 template<> ArmFault::FaultVals ArmFaultVals<VirtualInterrupt>::vals(
     "Virtual IRQ",           0x018, 0x080, 0x280, 0x480, 0x680, MODE_IRQ,
-    4, 4, 0, 0, false, true,  false, EC_INVALID
+    4, 4, 0, 0, false, true,  false, ExceptionClass::INVALID
 );
 template<> ArmFault::FaultVals ArmFaultVals<FastInterrupt>::vals(
     "FIQ",                   0x01C, 0x100, 0x300, 0x500, 0x700, MODE_FIQ,
-    4, 4, 0, 0, false, true,  true,  EC_UNKNOWN
+    4, 4, 0, 0, false, true,  true,  ExceptionClass::UNKNOWN
 );
 template<> ArmFault::FaultVals ArmFaultVals<VirtualFastInterrupt>::vals(
     "Virtual FIQ",           0x01C, 0x100, 0x300, 0x500, 0x700, MODE_FIQ,
-    4, 4, 0, 0, false, true,  true,  EC_INVALID
+    4, 4, 0, 0, false, true,  true,  ExceptionClass::INVALID
 );
 template<> ArmFault::FaultVals ArmFaultVals<IllegalInstSetStateFault>::vals(
     "Illegal Inst Set State Fault",   0x004, 0x000, 0x200, 0x400, 0x600, MODE_UNDEFINED,
-    4, 2, 0, 0, true, false, false, EC_ILLEGAL_INST
+    4, 2, 0, 0, true, false, false, ExceptionClass::ILLEGAL_INST
 );
 template<> ArmFault::FaultVals ArmFaultVals<SupervisorTrap>::vals(
     // Some dummy values (SupervisorTrap is AArch64-only)
     "Supervisor Trap",   0x014, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, false, false, false, EC_UNKNOWN
+    0, 0, 0, 0, false, false, false, ExceptionClass::UNKNOWN
 );
 template<> ArmFault::FaultVals ArmFaultVals<PCAlignmentFault>::vals(
     // Some dummy values (PCAlignmentFault is AArch64-only)
     "PC Alignment Fault",   0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, true, false, false, EC_PC_ALIGNMENT
+    0, 0, 0, 0, true, false, false, ExceptionClass::PC_ALIGNMENT
 );
 template<> ArmFault::FaultVals ArmFaultVals<SPAlignmentFault>::vals(
     // Some dummy values (SPAlignmentFault is AArch64-only)
     "SP Alignment Fault",   0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, true, false, false, EC_STACK_PTR_ALIGNMENT
+    0, 0, 0, 0, true, false, false, ExceptionClass::STACK_PTR_ALIGNMENT
 );
 template<> ArmFault::FaultVals ArmFaultVals<SystemError>::vals(
     // Some dummy values (SError is AArch64-only)
     "SError",                0x000, 0x180, 0x380, 0x580, 0x780, MODE_SVC,
-    0, 0, 0, 0, false, true,  true,  EC_SERROR
+    0, 0, 0, 0, false, true,  true,  ExceptionClass::SERROR
 );
 template<> ArmFault::FaultVals ArmFaultVals<SoftwareBreakpoint>::vals(
     // Some dummy values (SoftwareBreakpoint is AArch64-only)
     "Software Breakpoint",   0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, true, false, false,  EC_SOFTWARE_BREAKPOINT
+    0, 0, 0, 0, true, false, false,  ExceptionClass::SOFTWARE_BREAKPOINT
 );
 template<> ArmFault::FaultVals ArmFaultVals<HardwareBreakpoint>::vals(
     "Hardware Breakpoint",   0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, true, false, false,  EC_HW_BREAKPOINT
+    0, 0, 0, 0, true, false, false,  ExceptionClass::HW_BREAKPOINT
 );
 template<> ArmFault::FaultVals ArmFaultVals<Watchpoint>::vals(
     "Watchpoint",   0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, true, false, false,  EC_WATCHPOINT
+    0, 0, 0, 0, true, false, false,  ExceptionClass::WATCHPOINT
 );
 template<> ArmFault::FaultVals ArmFaultVals<SoftwareStepFault>::vals(
     "SoftwareStep",   0x000, 0x000, 0x200, 0x400, 0x600, MODE_SVC,
-    0, 0, 0, 0, true, false, false,  EC_SOFTWARE_STEP
+    0, 0, 0, 0, true, false, false,  ExceptionClass::SOFTWARE_STEP
 );
 template<> ArmFault::FaultVals ArmFaultVals<ArmSev>::vals(
     // Some dummy values
     "ArmSev Flush",          0x000, 0x000, 0x000, 0x000, 0x000, MODE_SVC,
-    0, 0, 0, 0, false, true,  true,  EC_UNKNOWN
+    0, 0, 0, 0, false, true,  true,  ExceptionClass::UNKNOWN
 );
 
 Addr
@@ -605,7 +605,7 @@
         break;
       case MODE_UNDEFINED:
         tc->setMiscReg(MISCREG_SPSR_UND, saved_cpsr);
-        if (ec(tc) != EC_UNKNOWN)
+        if (ec(tc) != ExceptionClass::UNKNOWN)
             setSyndrome(tc, MISCREG_HSR);
         break;
       case MODE_HYP:
@@ -841,7 +841,7 @@
         return 0;
     }
 
-    if (overrideEc == EC_INVALID)
+    if (overrideEc == ExceptionClass::INVALID)
         return issRaw;
 
     uint32_t new_iss = 0;
@@ -891,8 +891,8 @@
 ExceptionClass
 SupervisorCall::ec(ThreadContext *tc) const
 {
-    return (overrideEc != EC_INVALID) ? overrideEc :
-        (from64 ? EC_SVC_64 : vals.ec);
+    return (overrideEc != ExceptionClass::INVALID) ? overrideEc :
+        (from64 ? ExceptionClass::SVC_64 : vals.ec);
 }
 
 uint32_t
@@ -917,9 +917,9 @@
     // If UndefinedInstruction is routed to hypervisor,
     // HSR.EC field is 0.
     if (hypRouted)
-        return EC_UNKNOWN;
+        return ExceptionClass::UNKNOWN;
     else
-        return (overrideEc != EC_INVALID) ? overrideEc : vals.ec;
+        return (overrideEc != ExceptionClass::INVALID) ? overrideEc : vals.ec;
 }
 
 
@@ -944,13 +944,13 @@
 ExceptionClass
 HypervisorCall::ec(ThreadContext *tc) const
 {
-    return from64 ? EC_HVC_64 : vals.ec;
+    return from64 ? ExceptionClass::HVC_64 : vals.ec;
 }
 
 ExceptionClass
 HypervisorTrap::ec(ThreadContext *tc) const
 {
-    return (overrideEc != EC_INVALID) ? overrideEc : vals.ec;
+    return (overrideEc != ExceptionClass::INVALID) ? overrideEc : vals.ec;
 }
 
 template<class T>
@@ -1027,7 +1027,7 @@
 ExceptionClass
 SecureMonitorCall::ec(ThreadContext *tc) const
 {
-    return (from64 ? EC_SMC_64 : vals.ec);
+    return (from64 ? ExceptionClass::SMC_64 : vals.ec);
 }
 
 bool
@@ -1051,16 +1051,16 @@
 SupervisorTrap::ec(ThreadContext *tc) const
 {
     if (hypRouted)
-        return EC_UNKNOWN;
+        return ExceptionClass::UNKNOWN;
     else
-        return (overrideEc != EC_INVALID) ? overrideEc : vals.ec;
+        return (overrideEc != ExceptionClass::INVALID) ? overrideEc : vals.ec;
 }
 
 ExceptionClass
 SecureMonitorTrap::ec(ThreadContext *tc) const
 {
-    return (overrideEc != EC_INVALID) ? overrideEc :
-        (from64 ? EC_SMC_64 : vals.ec);
+    return (overrideEc != ExceptionClass::INVALID) ? overrideEc :
+        (from64 ? ExceptionClass::SMC_64 : vals.ec);
 }
 
 template<class T>
@@ -1268,9 +1268,9 @@
     if (to64) {
         // AArch64
         if (toEL == fromEL)
-            return EC_PREFETCH_ABORT_CURR_EL;
+            return ExceptionClass::PREFETCH_ABORT_CURR_EL;
         else
-            return EC_PREFETCH_ABORT_LOWER_EL;
+            return ExceptionClass::PREFETCH_ABORT_LOWER_EL;
     } else {
         // AArch32
         // Abort faults have different EC codes depending on whether
@@ -1336,9 +1336,9 @@
                     "SystemErrors (SErrors)!");
         }
         if (toEL == fromEL)
-            return EC_DATA_ABORT_CURR_EL;
+            return ExceptionClass::DATA_ABORT_CURR_EL;
         else
-            return EC_DATA_ABORT_LOWER_EL;
+            return ExceptionClass::DATA_ABORT_LOWER_EL;
     } else {
         // AArch32
         // Abort faults have different EC codes depending on whether
@@ -1625,7 +1625,7 @@
 ExceptionClass
 SoftwareBreakpoint::ec(ThreadContext *tc) const
 {
-    return from64 ? EC_SOFTWARE_BREAKPOINT_64 : vals.ec;
+    return from64 ? ExceptionClass::SOFTWARE_BREAKPOINT_64 : vals.ec;
 }
 
 HardwareBreakpoint::HardwareBreakpoint(Addr vaddr,  uint32_t _iss)
@@ -1646,9 +1646,9 @@
 {
         // AArch64
     if (toEL == fromEL)
-        return EC_HW_BREAKPOINT_CURR_EL;
+        return ExceptionClass::HW_BREAKPOINT_CURR_EL;
     else
-        return EC_HW_BREAKPOINT_LOWER_EL;
+        return ExceptionClass::HW_BREAKPOINT_LOWER_EL;
 }
 
 void
@@ -1734,9 +1734,9 @@
 {
         // AArch64
         if (toEL == fromEL)
-            return EC_WATCHPOINT_CURR_EL;
+            return ExceptionClass::WATCHPOINT_CURR_EL;
         else
-            return EC_WATCHPOINT_LOWER_EL;
+            return ExceptionClass::WATCHPOINT_LOWER_EL;
 }
 
 SoftwareStepFault::SoftwareStepFault(ExtMachInst mach_inst, bool is_ldx,
@@ -1762,9 +1762,9 @@
 {
     // AArch64
     if (toEL == fromEL)
-        return EC_SOFTWARE_STEP_CURR_EL;
+        return ExceptionClass::SOFTWARE_STEP_CURR_EL;
     else
-        return EC_SOFTWARE_STEP_LOWER_EL;
+        return ExceptionClass::SOFTWARE_STEP_LOWER_EL;
 }
 
 uint32_t
diff --git a/src/arch/arm/faults.hh b/src/arch/arm/faults.hh
index 6c0cda6..ec60d62 100644
--- a/src/arch/arm/faults.hh
+++ b/src/arch/arm/faults.hh
@@ -306,7 +306,8 @@
     il(ThreadContext *tc) const override
     {
         // ESR.IL = 1 if exception cause is unknown (EC = 0)
-        return ec(tc) == EC_UNKNOWN || !machInst.thumb || machInst.bigThumb;
+        return ec(tc) == ExceptionClass::UNKNOWN ||
+            !machInst.thumb || machInst.bigThumb;
     }
     uint32_t iss() const override { return issRaw; }
 };
@@ -336,7 +337,7 @@
                          bool _disabled = false) :
         ArmFaultVals<UndefinedInstruction>(mach_inst),
         unknown(_unknown), disabled(_disabled),
-        overrideEc(EC_INVALID), mnemonic(_mnemonic)
+        overrideEc(ExceptionClass::INVALID), mnemonic(_mnemonic)
     {}
     UndefinedInstruction(ExtMachInst mach_inst, uint32_t _iss,
             ExceptionClass _overrideEc, const char *_mnemonic = NULL) :
@@ -361,7 +362,7 @@
     ExceptionClass overrideEc;
   public:
     SupervisorCall(ExtMachInst mach_inst, uint32_t _iss,
-                   ExceptionClass _overrideEc = EC_INVALID) :
+                   ExceptionClass _overrideEc = ExceptionClass::INVALID) :
         ArmFaultVals<SupervisorCall>(mach_inst, _iss),
         overrideEc(_overrideEc)
     {
@@ -404,7 +405,7 @@
 
   public:
     SupervisorTrap(ExtMachInst mach_inst, uint32_t _iss,
-                   ExceptionClass _overrideEc = EC_INVALID) :
+                   ExceptionClass _overrideEc = ExceptionClass::INVALID) :
         ArmFaultVals<SupervisorTrap>(mach_inst, _iss),
         overrideEc(_overrideEc)
     {}
@@ -424,7 +425,7 @@
 
   public:
     SecureMonitorTrap(ExtMachInst mach_inst, uint32_t _iss,
-                      ExceptionClass _overrideEc = EC_INVALID) :
+                      ExceptionClass _overrideEc = ExceptionClass::INVALID) :
         ArmFaultVals<SecureMonitorTrap>(mach_inst, _iss),
         overrideEc(_overrideEc)
     {}
@@ -454,7 +455,7 @@
 
   public:
     HypervisorTrap(ExtMachInst mach_inst, uint32_t _iss,
-                   ExceptionClass _overrideEc = EC_INVALID) :
+                   ExceptionClass _overrideEc = ExceptionClass::INVALID) :
       ArmFaultVals<HypervisorTrap>(mach_inst, _iss),
       overrideEc(_overrideEc)
     {}
diff --git a/src/arch/arm/insts/misc64.cc b/src/arch/arm/insts/misc64.cc
index 58d6bd3..0fde077 100644
--- a/src/arch/arm/insts/misc64.cc
+++ b/src/arch/arm/insts/misc64.cc
@@ -104,7 +104,7 @@
 Fault
 MiscRegOp64::generateTrap(ExceptionLevel el) const
 {
-    return generateTrap(el, EC_TRAPPED_MSR_MRS_64, iss());
+    return generateTrap(el, ExceptionClass::TRAPPED_MSR_MRS_64, iss());
 }
 
 Fault
diff --git a/src/arch/arm/insts/static_inst.cc b/src/arch/arm/insts/static_inst.cc
index ba0e1cf..c07fb39 100644
--- a/src/arch/arm/insts/static_inst.cc
+++ b/src/arch/arm/insts/static_inst.cc
@@ -656,14 +656,14 @@
 {
     switch (el) {
       case EL1:
-        return std::make_shared<SupervisorTrap>(machInst, 0x1E00000,
-                                                EC_TRAPPED_SIMD_FP);
+        return std::make_shared<SupervisorTrap>(
+            machInst, 0x1E00000, ExceptionClass::TRAPPED_SIMD_FP);
       case EL2:
-        return std::make_shared<HypervisorTrap>(machInst, 0x1E00000,
-                                                EC_TRAPPED_SIMD_FP);
+        return std::make_shared<HypervisorTrap>(
+            machInst, 0x1E00000, ExceptionClass::TRAPPED_SIMD_FP);
       case EL3:
-        return std::make_shared<SecureMonitorTrap>(machInst, 0x1E00000,
-                                                   EC_TRAPPED_SIMD_FP);
+        return std::make_shared<SecureMonitorTrap>(
+            machInst, 0x1E00000, ExceptionClass::TRAPPED_SIMD_FP);
 
       default:
         panic("Illegal EL in advSIMDFPAccessTrap64\n");
@@ -781,11 +781,11 @@
             if (cur_el == EL2) {
                 return std::make_shared<UndefinedInstruction>(
                     machInst, iss,
-                    EC_TRAPPED_HCPTR, mnemonic);
+                    ExceptionClass::TRAPPED_HCPTR, mnemonic);
             } else {
                 return std::make_shared<HypervisorTrap>(
                     machInst, iss,
-                    EC_TRAPPED_HCPTR);
+                    ExceptionClass::TRAPPED_HCPTR);
             }
 
         }
@@ -852,13 +852,15 @@
           case EL1:
             return std::make_shared<UndefinedInstruction>(
                 machInst, iss,
-                EC_TRAPPED_WFI_WFE, mnemonic);
+                ExceptionClass::TRAPPED_WFI_WFE, mnemonic);
           case EL2:
-            return std::make_shared<HypervisorTrap>(machInst, iss,
-                                                    EC_TRAPPED_WFI_WFE);
+            return std::make_shared<HypervisorTrap>(
+                machInst, iss,
+                ExceptionClass::TRAPPED_WFI_WFE);
           case EL3:
-            return std::make_shared<SecureMonitorTrap>(machInst, iss,
-                                                       EC_TRAPPED_WFI_WFE);
+            return std::make_shared<SecureMonitorTrap>(
+                machInst, iss,
+                ExceptionClass::TRAPPED_WFI_WFE);
           default:
             panic("Unrecognized Exception Level: %d\n", targetEL);
         }
@@ -883,14 +885,17 @@
                               0x1E00000;  /* WFI Instruction syndrome */
         switch (targetEL) {
           case EL1:
-            return std::make_shared<SupervisorTrap>(machInst, iss,
-                                                    EC_TRAPPED_WFI_WFE);
+            return std::make_shared<SupervisorTrap>(
+                machInst, iss,
+                ExceptionClass::TRAPPED_WFI_WFE);
           case EL2:
-            return std::make_shared<HypervisorTrap>(machInst, iss,
-                                                    EC_TRAPPED_WFI_WFE);
+            return std::make_shared<HypervisorTrap>(
+                machInst, iss,
+                ExceptionClass::TRAPPED_WFI_WFE);
           case EL3:
-            return std::make_shared<SecureMonitorTrap>(machInst, iss,
-                                                       EC_TRAPPED_WFI_WFE);
+            return std::make_shared<SecureMonitorTrap>(
+                machInst, iss,
+                ExceptionClass::TRAPPED_WFI_WFE);
           default:
             panic("Unrecognized Exception Level: %d\n", targetEL);
         }
@@ -972,7 +977,7 @@
         // ArmFault class.
         return std::make_shared<UndefinedInstruction>(
             machInst, 0,
-            EC_UNKNOWN, mnemonic);
+            ExceptionClass::UNKNOWN, mnemonic);
     }
 }
 
@@ -983,11 +988,14 @@
     switch (pstateEL) {
       case EL0:
       case EL1:
-        return std::make_shared<SupervisorTrap>(machInst, 0, EC_UNKNOWN);
+        return std::make_shared<SupervisorTrap>(
+            machInst, 0, ExceptionClass::UNKNOWN);
       case EL2:
-        return std::make_shared<HypervisorTrap>(machInst, 0, EC_UNKNOWN);
+        return std::make_shared<HypervisorTrap>(
+            machInst, 0, ExceptionClass::UNKNOWN);
       case EL3:
-        return std::make_shared<SecureMonitorTrap>(machInst, 0, EC_UNKNOWN);
+        return std::make_shared<SecureMonitorTrap>(
+            machInst, 0, ExceptionClass::UNKNOWN);
       default:
         panic("Unrecognized Exception Level: %d\n", pstateEL);
         break;
@@ -1001,12 +1009,14 @@
 {
     switch (el) {
       case EL1:
-        return std::make_shared<SupervisorTrap>(machInst, 0, EC_TRAPPED_SVE);
+        return std::make_shared<SupervisorTrap>(
+            machInst, 0, ExceptionClass::TRAPPED_SVE);
       case EL2:
-        return std::make_shared<HypervisorTrap>(machInst, 0, EC_TRAPPED_SVE);
+        return std::make_shared<HypervisorTrap>(
+            machInst, 0, ExceptionClass::TRAPPED_SVE);
       case EL3:
-        return std::make_shared<SecureMonitorTrap>(machInst, 0,
-                                                   EC_TRAPPED_SVE);
+        return std::make_shared<SecureMonitorTrap>(
+            machInst, 0, ExceptionClass::TRAPPED_SVE);
 
       default:
         panic("Illegal EL in sveAccessTrap\n");
diff --git a/src/arch/arm/isa/insts/branch.isa b/src/arch/arm/isa/insts/branch.isa
index c14e1f8..23ec1e1 100644
--- a/src/arch/arm/isa/insts/branch.isa
+++ b/src/arch/arm/isa/insts/branch.isa
@@ -153,7 +153,8 @@
 
     if (ArmSystem::haveEL(xc->tcBase(), EL2) && hstr.tjdbx &&
         !isSecure(xc->tcBase()) && (cpsr.mode != MODE_HYP)) {
-       fault = std::make_shared<HypervisorTrap>(machInst, op1, EC_TRAPPED_BXJ);
+       fault = std::make_shared<HypervisorTrap>(
+            machInst, op1, ExceptionClass::TRAPPED_BXJ);
     }
     IWNPC = Op1;
     '''
diff --git a/src/arch/arm/isa/insts/fp.isa b/src/arch/arm/isa/insts/fp.isa
index e0df71c..1d54324 100644
--- a/src/arch/arm/isa/insts/fp.isa
+++ b/src/arch/arm/isa/insts/fp.isa
@@ -225,7 +225,7 @@
         }
         if (hypTrap) {
             return std::make_shared<HypervisorTrap>(machInst, imm,
-                EC_TRAPPED_CP10_MRC_VMRS);
+                ExceptionClass::TRAPPED_CP10_MRC_VMRS);
         }
     }
     Dest = MiscOp1;
diff --git a/src/arch/arm/isa/insts/misc.isa b/src/arch/arm/isa/insts/misc.isa
index 96c0d63..bfcb693 100644
--- a/src/arch/arm/isa/insts/misc.isa
+++ b/src/arch/arm/isa/insts/misc.isa
@@ -96,8 +96,9 @@
 
     if ((cpsr.mode != MODE_USER) && FullSystem) {
         if (EL2Enabled(xc->tcBase()) && (cpsr.mode != MODE_HYP) && hcr.tsc) {
-            fault = std::make_shared<HypervisorTrap>(machInst, 0,
-                                                     EC_SMC_TO_HYP);
+            fault = std::make_shared<HypervisorTrap>(
+                machInst, 0,
+                ExceptionClass::SMC_TO_HYP);
         } else {
             if (scr.scd) {
                 fault = disabledFault();
@@ -898,8 +899,9 @@
                                                       mnemonic);
     }
     if (mcrMrc14TrapToHyp((MiscRegIndex) op1, xc->tcBase(), imm)) {
-        return std::make_shared<HypervisorTrap>(machInst, imm,
-                                                EC_TRAPPED_CP14_MCR_MRC);
+        return std::make_shared<HypervisorTrap>(
+            machInst, imm,
+            ExceptionClass::TRAPPED_CP14_MCR_MRC);
     }
     Dest = MiscOp1;
     '''
@@ -922,8 +924,9 @@
                                                       mnemonic);
     }
     if (mcrMrc14TrapToHyp(miscReg, xc->tcBase(), imm)) {
-        return std::make_shared<HypervisorTrap>(machInst, imm,
-                                                EC_TRAPPED_CP14_MCR_MRC);
+        return std::make_shared<HypervisorTrap>(
+            machInst, imm,
+            ExceptionClass::TRAPPED_CP14_MCR_MRC);
     }
     MiscDest = Op1;
     '''
@@ -1197,7 +1200,7 @@
         if ((imm != 0) && mcrMrc15TrapToHyp(MISCREG_CP15ISB,
             xc->tcBase(), imm)) {
             return std::make_shared<HypervisorTrap>(machInst, imm,
-                EC_TRAPPED_CP15_MCR_MRC);
+                ExceptionClass::TRAPPED_CP15_MCR_MRC);
         }
     '''
     isbIop = ArmInstObjParams("isb", "Isb", "ImmOp",
@@ -1213,7 +1216,7 @@
         if ((imm != 0) && mcrMrc15TrapToHyp(MISCREG_CP15DSB,
             xc->tcBase(), imm)) {
             return std::make_shared<HypervisorTrap>(machInst, imm,
-                EC_TRAPPED_CP15_MCR_MRC);
+                ExceptionClass::TRAPPED_CP15_MCR_MRC);
         }
     '''
     dsbIop = ArmInstObjParams("dsb", "Dsb", "ImmOp",
@@ -1230,7 +1233,7 @@
         if ((imm != 0) && mcrMrc15TrapToHyp(MISCREG_CP15DMB,
             xc->tcBase(), imm)) {
             return std::make_shared<HypervisorTrap>(machInst, imm,
-                EC_TRAPPED_CP15_MCR_MRC);
+                ExceptionClass::TRAPPED_CP15_MCR_MRC);
         }
     '''
     dmbIop = ArmInstObjParams("dmb", "Dmb", "ImmOp",
diff --git a/src/arch/arm/pauth_helpers.cc b/src/arch/arm/pauth_helpers.cc
index 7b3270c..3e8f18e 100644
--- a/src/arch/arm/pauth_helpers.cc
+++ b/src/arch/arm/pauth_helpers.cc
@@ -121,9 +121,11 @@
 
     switch (target_el) {
        case EL2:
-            return std::make_shared<HypervisorTrap>(0x0, 0, EC_TRAPPED_PAC);
+            return std::make_shared<HypervisorTrap>(
+                0x0, 0, ExceptionClass::TRAPPED_PAC);
        case EL3:
-            return std::make_shared<SecureMonitorTrap>(0x0, 0, EC_TRAPPED_PAC);
+            return std::make_shared<SecureMonitorTrap>(
+                0x0, 0, ExceptionClass::TRAPPED_PAC);
        default:
             return NoFault;
     }
diff --git a/src/arch/arm/regs/misc.cc b/src/arch/arm/regs/misc.cc
index 12ac831..6b62e21 100644
--- a/src/arch/arm/regs/misc.cc
+++ b/src/arch/arm/regs/misc.cc
@@ -1311,18 +1311,23 @@
     const bool in_host = hcr.e2h && hcr.tge;
     if (!(el2_enabled && in_host) && cpacr.fpen != 0b11) {
         if (el2_enabled && hcr.tge) {
-            return inst.generateTrap(EL2, EC_UNKNOWN, inst.iss());
+            return inst.generateTrap(EL2, ExceptionClass::UNKNOWN, inst.iss());
         } else {
-            return inst.generateTrap(EL1, EC_TRAPPED_SIMD_FP, 0x1E00000);
+            return inst.generateTrap(EL1,
+                ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
         }
     } else if (el2_enabled && in_host && cptr_el2.fpen != 0b11) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL3,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else {
         return NoFault;
     }
@@ -1339,13 +1344,17 @@
     const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
     const bool el2_enabled = EL2Enabled(tc);
     if ((cpacr.fpen & 0b1) == 0b0) {
-        return inst.generateTrap(EL1, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL1,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (el2_enabled && !hcr.e2h && cptr_el2.tfp) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (el2_enabled && hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL3,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else {
         return NoFault;
     }
@@ -1360,11 +1369,14 @@
 
     const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
     if (!hcr.e2h && cptr_el2.tfp) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (hcr.e2h && ((cptr_el2.fpen & 0b1) == 0b0)) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL2,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else if (ArmSystem::haveEL(tc, EL3) && cptr_el3.tfp) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL3,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else {
         return NoFault;
     }
@@ -1376,7 +1388,8 @@
 {
     const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
     if (cptr_el3.tfp) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SIMD_FP, 0x1E00000);
+        return inst.generateTrap(EL3,
+            ExceptionClass::TRAPPED_SIMD_FP, 0x1E00000);
     } else {
         return NoFault;
     }
@@ -1562,13 +1575,13 @@
     const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
     const bool el2_enabled = EL2Enabled(tc);
     if (!(cpacr_el1.zen & 0x1)) {
-        return inst.generateTrap(EL1, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL1, ExceptionClass::TRAPPED_SVE, 0);
     } else if (el2_enabled && !hcr.e2h && cptr_el2.tz) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
     } else if (el2_enabled && hcr.e2h && !(cptr_el2.zen & 0x1)) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
     } else if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.ez) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
     } else {
         return NoFault;
     }
@@ -1583,11 +1596,11 @@
 
     const HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
     if (!hcr.e2h && cptr_el2.tz) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
     } else if (hcr.e2h && !(cptr_el2.zen & 0x1)) {
-        return inst.generateTrap(EL2, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL2, ExceptionClass::TRAPPED_SVE, 0);
     } else if (ArmSystem::haveEL(tc, EL3) && !cptr_el3.ez) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
     } else {
         return NoFault;
     }
@@ -1599,7 +1612,7 @@
 {
     const CPTR cptr_el3 = tc->readMiscReg(MISCREG_CPTR_EL3);
     if (!cptr_el3.ez) {
-        return inst.generateTrap(EL3, EC_TRAPPED_SVE, 0);
+        return inst.generateTrap(EL3, ExceptionClass::TRAPPED_SVE, 0);
     } else {
         return NoFault;
     }
diff --git a/src/arch/arm/self_debug.cc b/src/arch/arm/self_debug.cc
index 85fbabe..27064cd 100644
--- a/src/arch/arm/self_debug.cc
+++ b/src/arch/arm/self_debug.cc
@@ -725,7 +725,7 @@
     if (do_debug) {
         if (enableTdeTge) {
             return std::make_shared<HypervisorTrap>(0, 0x22,
-                                        EC_PREFETCH_ABORT_TO_HYP);
+                                        ExceptionClass::PREFETCH_ABORT_TO_HYP);
         } else {
             return std::make_shared<PrefetchAbort>(addr,
                                        ArmFault::DebugEvent, false,
diff --git a/src/arch/arm/types.hh b/src/arch/arm/types.hh
index 734fe6f..44b2047 100644
--- a/src/arch/arm/types.hh
+++ b/src/arch/arm/types.hh
@@ -297,57 +297,57 @@
         MODE_MAXMODE = MODE_SYSTEM
     };
 
-    enum ExceptionClass
+    enum class ExceptionClass
     {
-        EC_INVALID                 = -1,
-        EC_UNKNOWN                 = 0x0,
-        EC_TRAPPED_WFI_WFE         = 0x1,
-        EC_TRAPPED_CP15_MCR_MRC    = 0x3,
-        EC_TRAPPED_CP15_MCRR_MRRC  = 0x4,
-        EC_TRAPPED_CP14_MCR_MRC    = 0x5,
-        EC_TRAPPED_CP14_LDC_STC    = 0x6,
-        EC_TRAPPED_HCPTR           = 0x7,
-        EC_TRAPPED_SIMD_FP         = 0x7,   // AArch64 alias
-        EC_TRAPPED_CP10_MRC_VMRS   = 0x8,
-        EC_TRAPPED_PAC             = 0x9,
-        EC_TRAPPED_BXJ             = 0xA,
-        EC_TRAPPED_CP14_MCRR_MRRC  = 0xC,
-        EC_ILLEGAL_INST            = 0xE,
-        EC_SVC_TO_HYP              = 0x11,
-        EC_SVC                     = 0x11,  // AArch64 alias
-        EC_HVC                     = 0x12,
-        EC_SMC_TO_HYP              = 0x13,
-        EC_SMC                     = 0x13,  // AArch64 alias
-        EC_SVC_64                  = 0x15,
-        EC_HVC_64                  = 0x16,
-        EC_SMC_64                  = 0x17,
-        EC_TRAPPED_MSR_MRS_64      = 0x18,
-        EC_TRAPPED_SVE             = 0x19,
-        EC_PREFETCH_ABORT_TO_HYP   = 0x20,
-        EC_PREFETCH_ABORT_LOWER_EL = 0x20,  // AArch64 alias
-        EC_PREFETCH_ABORT_FROM_HYP = 0x21,
-        EC_PREFETCH_ABORT_CURR_EL  = 0x21,  // AArch64 alias
-        EC_PC_ALIGNMENT            = 0x22,
-        EC_DATA_ABORT_TO_HYP       = 0x24,
-        EC_DATA_ABORT_LOWER_EL     = 0x24,  // AArch64 alias
-        EC_DATA_ABORT_FROM_HYP     = 0x25,
-        EC_DATA_ABORT_CURR_EL      = 0x25,  // AArch64 alias
-        EC_STACK_PTR_ALIGNMENT     = 0x26,
-        EC_FP_EXCEPTION            = 0x28,
-        EC_FP_EXCEPTION_64         = 0x2C,
-        EC_SERROR                  = 0x2F,
-        EC_HW_BREAKPOINT           = 0x30,
-        EC_HW_BREAKPOINT_LOWER_EL  = 0x30,
-        EC_HW_BREAKPOINT_CURR_EL   = 0x31,
-        EC_SOFTWARE_STEP           = 0x32,
-        EC_SOFTWARE_STEP_LOWER_EL  = 0x32,
-        EC_SOFTWARE_STEP_CURR_EL   = 0x33,
-        EC_WATCHPOINT              = 0x34,
-        EC_WATCHPOINT_LOWER_EL     = 0x34,
-        EC_WATCHPOINT_CURR_EL      = 0x35,
-        EC_SOFTWARE_BREAKPOINT     = 0x38,
-        EC_VECTOR_CATCH            = 0x3A,
-        EC_SOFTWARE_BREAKPOINT_64  = 0x3C,
+        INVALID                 = -1,
+        UNKNOWN                 = 0x0,
+        TRAPPED_WFI_WFE         = 0x1,
+        TRAPPED_CP15_MCR_MRC    = 0x3,
+        TRAPPED_CP15_MCRR_MRRC  = 0x4,
+        TRAPPED_CP14_MCR_MRC    = 0x5,
+        TRAPPED_CP14_LDC_STC    = 0x6,
+        TRAPPED_HCPTR           = 0x7,
+        TRAPPED_SIMD_FP         = 0x7,   // AArch64 alias
+        TRAPPED_CP10_MRC_VMRS   = 0x8,
+        TRAPPED_PAC             = 0x9,
+        TRAPPED_BXJ             = 0xA,
+        TRAPPED_CP14_MCRR_MRRC  = 0xC,
+        ILLEGAL_INST            = 0xE,
+        SVC_TO_HYP              = 0x11,
+        SVC                     = 0x11,  // AArch64 alias
+        HVC                     = 0x12,
+        SMC_TO_HYP              = 0x13,
+        SMC                     = 0x13,  // AArch64 alias
+        SVC_64                  = 0x15,
+        HVC_64                  = 0x16,
+        SMC_64                  = 0x17,
+        TRAPPED_MSR_MRS_64      = 0x18,
+        TRAPPED_SVE             = 0x19,
+        PREFETCH_ABORT_TO_HYP   = 0x20,
+        PREFETCH_ABORT_LOWER_EL = 0x20,  // AArch64 alias
+        PREFETCH_ABORT_FROM_HYP = 0x21,
+        PREFETCH_ABORT_CURR_EL  = 0x21,  // AArch64 alias
+        PC_ALIGNMENT            = 0x22,
+        DATA_ABORT_TO_HYP       = 0x24,
+        DATA_ABORT_LOWER_EL     = 0x24,  // AArch64 alias
+        DATA_ABORT_FROM_HYP     = 0x25,
+        DATA_ABORT_CURR_EL      = 0x25,  // AArch64 alias
+        STACK_PTR_ALIGNMENT     = 0x26,
+        FP_EXCEPTION            = 0x28,
+        FP_EXCEPTION_64         = 0x2C,
+        SERROR                  = 0x2F,
+        HW_BREAKPOINT           = 0x30,
+        HW_BREAKPOINT_LOWER_EL  = 0x30,
+        HW_BREAKPOINT_CURR_EL   = 0x31,
+        SOFTWARE_STEP           = 0x32,
+        SOFTWARE_STEP_LOWER_EL  = 0x32,
+        SOFTWARE_STEP_CURR_EL   = 0x33,
+        WATCHPOINT              = 0x34,
+        WATCHPOINT_LOWER_EL     = 0x34,
+        WATCHPOINT_CURR_EL      = 0x35,
+        SOFTWARE_BREAKPOINT     = 0x38,
+        VECTOR_CATCH            = 0x3A,
+        SOFTWARE_BREAKPOINT_64  = 0x3C,
     };
 
     /**
diff --git a/src/arch/arm/utility.cc b/src/arch/arm/utility.cc
index eb2a9f5..e6f4a23 100644
--- a/src/arch/arm/utility.cc
+++ b/src/arch/arm/utility.cc
@@ -502,7 +502,7 @@
 mcrMrc15Trap(const MiscRegIndex misc_reg, ExtMachInst mach_inst,
              ThreadContext *tc, uint32_t imm)
 {
-    ExceptionClass ec = EC_TRAPPED_CP15_MCR_MRC;
+    ExceptionClass ec = ExceptionClass::TRAPPED_CP15_MCR_MRC;
     if (mcrMrc15TrapToHyp(misc_reg, tc, imm, &ec))
         return std::make_shared<HypervisorTrap>(mach_inst, imm, ec);
     return AArch64AArch32SystemAccessTrap(misc_reg, mach_inst, tc, imm, ec);
@@ -722,7 +722,7 @@
 mcrrMrrc15Trap(const MiscRegIndex misc_reg, ExtMachInst mach_inst,
                ThreadContext *tc, uint32_t imm)
 {
-    ExceptionClass ec = EC_TRAPPED_CP15_MCRR_MRRC;
+    ExceptionClass ec = ExceptionClass::TRAPPED_CP15_MCRR_MRRC;
     if (mcrrMrrc15TrapToHyp(misc_reg, tc, imm, &ec))
         return std::make_shared<HypervisorTrap>(mach_inst, imm, ec);
     return AArch64AArch32SystemAccessTrap(misc_reg, mach_inst, tc, imm, ec);
@@ -852,7 +852,7 @@
         // As per the architecture, this hyp trap should have uncategorized
         // exception class
         if (ec)
-            *ec = EC_UNKNOWN;
+            *ec = ExceptionClass::UNKNOWN;
         return true;
     }
     return false;