pw_cpu_exception_cortex_m: Add error flag masks

The Cortex-M Fault register has some reserved bits and some bits that
describe if a fault register is valid or not, all in the same sections
as the error bits. Create a mask for only the error bits which will
allow calculating if there are multiple errors present.

Change-Id: Ic039f317314e1478a858808c804886dc82257bb6
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210072
Reviewed-by: Armando Montanez <amontanez@google.com>
Pigweed-Auto-Submit: Carlos Chinchilla <cachinchilla@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
diff --git a/pw_cpu_exception_cortex_m/pw_cpu_exception_cortex_m_private/cortex_m_constants.h b/pw_cpu_exception_cortex_m/pw_cpu_exception_cortex_m_private/cortex_m_constants.h
index c6f479e..41edf26 100644
--- a/pw_cpu_exception_cortex_m/pw_cpu_exception_cortex_m_private/cortex_m_constants.h
+++ b/pw_cpu_exception_cortex_m/pw_cpu_exception_cortex_m_private/cortex_m_constants.h
@@ -51,6 +51,11 @@
 constexpr uint32_t kCfsrMstkerrMask = (kCfsrMemFaultStart << 4);
 constexpr uint32_t kCfsrMlsperrMask = (kCfsrMemFaultStart << 5);
 constexpr uint32_t kCfsrMmarvalidMask = (kCfsrMemFaultStart << 7);
+// Mask for all supported memory error flags i.e. bits that indicate a specific
+// error.
+constexpr uint32_t kCfsrMemAllErrorsMask =
+    kCfsrIaccviolMask | kCfsrDaccviolMask | kCfsrMunstkerrMask |
+    kCfsrMstkerrMask | kCfsrMlsperrMask;
 // Bus faults (BusFault Status Register)
 constexpr uint32_t kCfsrBusFaultStart = (0x1 << 8);
 constexpr uint32_t kCfsrIbuserrMask = (kCfsrBusFaultStart << 0);
@@ -60,6 +65,11 @@
 constexpr uint32_t kCfsrStkerrMask = (kCfsrBusFaultStart << 4);
 constexpr uint32_t kCfsrLsperrMask = (kCfsrBusFaultStart << 5);
 constexpr uint32_t kCfsrBfarvalidMask = (kCfsrBusFaultStart << 7);
+// Mask for all supported bus error flags i.e. bits that indicate a specific
+// error.
+constexpr uint32_t kCfsrBusAllErrorsMask =
+    kCfsrIbuserrMask | kCfsrPreciserrMask | kCfsrImpreciserrMask |
+    kCfsrUnstkerrMask | kCfsrStkerrMask | kCfsrLsperrMask;
 // Usage faults (UsageFault Status Register)
 constexpr uint32_t kCfsrUsageFaultStart = (0x1 << 16);
 constexpr uint32_t kCfsrUndefinstrMask = (kCfsrUsageFaultStart << 0);
@@ -71,6 +81,14 @@
 #endif  // _PW_ARCH_ARM_V8M_MAINLINE
 constexpr uint32_t kCfsrUnalignedMask = (kCfsrUsageFaultStart << 8);
 constexpr uint32_t kCfsrDivbyzeroMask = (kCfsrUsageFaultStart << 9);
+// Mask for all supported usage error flags i.e. bits that indicate a specific
+// error.
+constexpr uint32_t kCfsrUsageAllErrorsMask =
+    kCfsrUndefinstrMask | kCfsrInvstateMask | kCfsrInvpcMask | kCfsrNocpMask |
+#if _PW_ARCH_ARM_V8M_MAINLINE
+    kCfsrStkofMask |
+#endif  // _PW_ARCH_ARM_V8M_MAINLINE
+    kCfsrUnalignedMask | kCfsrDivbyzeroMask;
 
 // Bit masks for an exception return value. (ARMv7-M Section B1.5.8)
 constexpr uint32_t kExcReturnStackMask = 0x1u << 2;  // 0=MSP, 1=PSP