summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorYann Gautier <yann.gautier@st.com>2019-02-15 16:42:20 +0100
committerYann Gautier <yann.gautier@st.com>2022-10-03 14:42:40 +0200
commit6dc5979a6cb2121e4c16e7bd62e24030e0f42755 (patch)
tree7ebdf7c842237a33b42e2451016c1804d1156d55 /common
parentbb2289142cbf0f3546c1034e0500b5dc32aef740 (diff)
downloadarm-trusted-firmware-6dc5979a6cb2121e4c16e7bd62e24030e0f42755.tar.gz
feat(debug): add helpers for aborts on AARCH32
New helper functions are created to handle data & prefetch aborts in AARCH32. They call platform functions, just like what report_exception is doing. As extended MSR/MRS instructions (to access lr_abt in monitor mode) are only available if CPU (Armv7) has virtualization extension, the functions branch to original report_exception handlers if this is not the case. Those new helpers are created mainly to distinguish data and prefetch aborts, as they both share the same mode. This adds 40 bytes of code. Change-Id: I5dd31930344ad4e3a658f8a9d366a87a300aeb67 Signed-off-by: Yann Gautier <yann.gautier@st.com>
Diffstat (limited to 'common')
-rw-r--r--common/aarch32/debug.S34
1 files changed, 33 insertions, 1 deletions
diff --git a/common/aarch32/debug.S b/common/aarch32/debug.S
index 9d410df07..ae0bb7ac7 100644
--- a/common/aarch32/debug.S
+++ b/common/aarch32/debug.S
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -14,6 +14,8 @@
.globl asm_assert
.globl do_panic
.globl report_exception
+ .globl report_prefetch_abort
+ .globl report_data_abort
/* Since the max decimal input number is 65536 */
#define MAX_DEC_DIVISOR 10000
@@ -205,3 +207,33 @@ func report_exception
bl plat_report_exception
no_ret plat_panic_handler
endfunc report_exception
+
+ /***********************************************************
+ * This function is called from the vector table for
+ * unhandled exceptions. The lr_abt is given as an
+ * argument to platform handler.
+ ***********************************************************/
+func report_prefetch_abort
+#if ARM_ARCH_MAJOR == 7 && !defined(ARMV7_SUPPORTS_VIRTUALIZATION)
+ b report_exception
+#else
+ mrs r0, lr_abt
+ bl plat_report_prefetch_abort
+ no_ret plat_panic_handler
+#endif
+endfunc report_prefetch_abort
+
+ /***********************************************************
+ * This function is called from the vector table for
+ * unhandled exceptions. The lr_abt is given as an
+ * argument to platform handler.
+ ***********************************************************/
+func report_data_abort
+#if ARM_ARCH_MAJOR == 7 && !defined(ARMV7_SUPPORTS_VIRTUALIZATION)
+ b report_exception
+#else
+ mrs r0, lr_abt
+ bl plat_report_data_abort
+ no_ret plat_panic_handler
+#endif
+endfunc report_data_abort