From c9a4bd47a78b560bba9adb2b40c72f2a1158c4ba Mon Sep 17 00:00:00 2001 From: Andrew Boie Date: Mon, 15 Jul 2019 22:36:59 -0700 Subject: [PATCH] arm: dump registers on fatal exceptions We had a function that did this, but it was dead code. Move to fatal.c and call from z_arm_fatal_error(). Signed-off-by: Andrew Boie --- arch/arm/core/cortex_m/CMakeLists.txt | 1 - arch/arm/core/cortex_m/exc_manage.c | 38 --------------------------- arch/arm/core/fatal.c | 28 ++++++++++++++++++-- include/arch/arm/cortex_m/exc.h | 8 ------ 4 files changed, 26 insertions(+), 49 deletions(-) delete mode 100644 arch/arm/core/cortex_m/exc_manage.c diff --git a/arch/arm/core/cortex_m/CMakeLists.txt b/arch/arm/core/cortex_m/CMakeLists.txt index 10423b2246c..53a2ef92577 100644 --- a/arch/arm/core/cortex_m/CMakeLists.txt +++ b/arch/arm/core/cortex_m/CMakeLists.txt @@ -9,7 +9,6 @@ zephyr_library_sources( prep_c.c scb.c nmi.c - exc_manage.c ) zephyr_linker_sources_ifdef(CONFIG_SW_VECTOR_RELAY diff --git a/arch/arm/core/cortex_m/exc_manage.c b/arch/arm/core/cortex_m/exc_manage.c deleted file mode 100644 index 69fec16b43f..00000000000 --- a/arch/arm/core/cortex_m/exc_manage.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2015 Wind River Systems, Inc. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @file exception related routines - */ - -#include -#include -#include - -#include -void sys_exc_esf_dump(NANO_ESF *esf) -{ - printk("r0/a1: 0x%08x ", esf->basic.a1); - printk("r1/a2: 0x%08x ", esf->basic.a2); - printk("r2/a3: 0x%08x\n", esf->basic.a3); - printk("r3/a4: 0x%08x ", esf->basic.a4); - printk("r12/ip: 0x%08x ", esf->basic.ip); - printk("r14/lr: 0x%08x\n", esf->basic.lr); - printk("r15/pc: 0x%08x ", esf->basic.pc); - printk("xpsr: 0x%08x\n", esf->basic.xpsr); -#if defined(CONFIG_FLOAT) && defined(CONFIG_FP_SHARING) - for (int i = 0; i < 16; i += 4) { - printk("s[%d]: 0x%08x s[%d]: 0x%08x" - " s[%d]: 0x%08x s[%d]: 0x%08x\n", - i, (u32_t)esf->s[i], - i + 1, (u32_t)esf->s[i + 1], - i + 2, (u32_t)esf->s[i + 2], - i + 3, (u32_t)esf->s[i + 3]); - } - printk("fpscr: 0x%08x\n", esf->fpscr); -#endif -} - diff --git a/arch/arm/core/fatal.c b/arch/arm/core/fatal.c index 62f30c1c562..7e89b4a34d9 100644 --- a/arch/arm/core/fatal.c +++ b/arch/arm/core/fatal.c @@ -19,10 +19,34 @@ #include #include +static void esf_dump(const NANO_ESF *esf) +{ + z_fatal_print("r0/a1: 0x%08x r1/a2: 0x%08x r2/a3: 0x%08x", + esf->basic.a1, esf->basic.a2, esf->basic.a3); + z_fatal_print("r3/a4: 0x%08x r12/ip: 0x%08x r14/lr: 0x%08x", + esf->basic.a4, esf->basic.ip, esf->basic.lr); + z_fatal_print(" xpsr: 0x%08x", esf->basic.xpsr); +#if defined(CONFIG_FLOAT) && defined(CONFIG_FP_SHARING) + for (int i = 0; i < 16; i += 4) { + z_fatal_print("s[%d]: 0x%08x s[%d]: 0x%08x" + " s[%d]: 0x%08x s[%d]: 0x%08x\n", + i, (u32_t)esf->s[i], + i + 1, (u32_t)esf->s[i + 1], + i + 2, (u32_t)esf->s[i + 2], + i + 3, (u32_t)esf->s[i + 3]); + } + z_fatal_print("fpscr: 0x%08x\n", esf->fpscr); +#endif + z_fatal_print("Faulting instruction address (r15/pc): 0x%08x", + esf->basic.pc); +} + void z_arm_fatal_error(unsigned int reason, const NANO_ESF *esf) { - z_fatal_print("Faulting instruction address = 0x%x", - esf->basic.pc); + + if (esf != NULL) { + esf_dump(esf); + } z_fatal_error(reason, esf); } diff --git a/include/arch/arm/cortex_m/exc.h b/include/arch/arm/cortex_m/exc.h index 117ccd6b1e3..1890709e178 100644 --- a/include/arch/arm/cortex_m/exc.h +++ b/include/arch/arm/cortex_m/exc.h @@ -66,14 +66,6 @@ typedef struct __esf NANO_ESF; extern void z_ExcExit(void); -/** - * @brief display the contents of a exception stack frame - * - * @return N/A - */ - -extern void sys_exc_esf_dump(NANO_ESF *esf); - #endif /* _ASMLANGUAGE */ #ifdef __cplusplus