mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-07 21:33:54 +00:00
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>
This commit is contained in:
parent
bb2289142c
commit
6dc5979a6c
8 changed files with 71 additions and 17 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -23,8 +23,8 @@ vector_base bl1_vector_table
|
|||
b bl1_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b bl1_aarch32_smc_handler /* SMC call */
|
||||
b report_exception /* Prefetch abort */
|
||||
b report_exception /* Data abort */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -14,8 +14,8 @@ vector_base bl2_vector_table
|
|||
b bl2_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b report_exception /* SVC call */
|
||||
b report_exception /* Prefetch abort */
|
||||
b report_exception /* Data abort */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -16,8 +16,8 @@ vector_base bl2_vector_table
|
|||
b bl2_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b report_exception /* SVC call */
|
||||
b report_exception /* Prefetch abort */
|
||||
b report_exception /* Data abort */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -16,8 +16,8 @@ vector_base bl2u_vector_table
|
|||
b bl2u_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b report_exception /* SVC call */
|
||||
b report_exception /* Prefetch abort */
|
||||
b report_exception /* Data abort */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -51,8 +51,8 @@ vector_base sp_min_vector_table
|
|||
b sp_min_entrypoint
|
||||
b plat_panic_handler /* Undef */
|
||||
b sp_min_handle_smc /* Syscall */
|
||||
b plat_panic_handler /* Prefetch abort */
|
||||
b plat_panic_handler /* Data abort */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b plat_panic_handler /* Reserved */
|
||||
b plat_panic_handler /* IRQ */
|
||||
b sp_min_handle_fiq /* FIQ */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -118,6 +118,8 @@ unsigned int plat_ic_get_interrupt_id(unsigned int raw);
|
|||
******************************************************************************/
|
||||
uintptr_t plat_get_my_stack(void);
|
||||
void plat_report_exception(unsigned int exception_type);
|
||||
void plat_report_prefetch_abort(unsigned int fault_address);
|
||||
void plat_report_data_abort(unsigned int fault_address);
|
||||
int plat_crash_console_init(void);
|
||||
int plat_crash_console_putc(int c);
|
||||
void plat_crash_console_flush(void);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -8,6 +8,8 @@
|
|||
#include <asm_macros.S>
|
||||
|
||||
.weak plat_report_exception
|
||||
.weak plat_report_prefetch_abort
|
||||
.weak plat_report_data_abort
|
||||
.weak plat_reset_handler
|
||||
.weak plat_disable_acp
|
||||
.weak bl1_plat_prepare_exit
|
||||
|
@ -23,6 +25,24 @@ func plat_report_exception
|
|||
bx lr
|
||||
endfunc plat_report_exception
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Placeholder function which should be redefined by
|
||||
* each platform.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func plat_report_prefetch_abort
|
||||
bx lr
|
||||
endfunc plat_report_prefetch_abort
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Placeholder function which should be redefined by
|
||||
* each platform.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func plat_report_data_abort
|
||||
bx lr
|
||||
endfunc plat_report_data_abort
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Placeholder function which should be redefined by
|
||||
* each platform.
|
||||
|
|
Loading…
Add table
Reference in a new issue