This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 189aa0292f arm: Added breakpoint in stack overflow trap. 189aa0292f is described below commit 189aa0292f82d099830ab8c20bfa65f2628427d6 Author: Fotis Panagiotopoulos <f.j.pa...@gmail.com> AuthorDate: Wed Oct 26 14:28:58 2022 +0300 arm: Added breakpoint in stack overflow trap. --- arch/arm/src/armv7-m/Kconfig | 10 ++++++++++ arch/arm/src/armv7-m/arm_stackcheck.c | 8 ++++++++ arch/arm/src/armv8-m/Kconfig | 10 ++++++++++ arch/arm/src/armv8-m/arm_stackcheck.c | 8 ++++++++ 4 files changed, 36 insertions(+) diff --git a/arch/arm/src/armv7-m/Kconfig b/arch/arm/src/armv7-m/Kconfig index 5dc99f3e00..b1ca99f116 100644 --- a/arch/arm/src/armv7-m/Kconfig +++ b/arch/arm/src/armv7-m/Kconfig @@ -116,6 +116,16 @@ config ARMV7M_STACKCHECK CFLAGS when you compile. This addition to your CFLAGS should probably be added to the definition of the CFFLAGS in your board Make.defs file. +config ARMV7M_STACKCHECK_BREAKPOINT + bool "Breakpoint on stack overflow" + default n + depends on ARMV7M_STACKCHECK + ---help--- + If enabled, a hard-coded breakpoint will be inserted to the stack + overflow trap. This is useful to stop the execution of the program + and diagnose the issue before the hardfault handler is called (and + context information is lost). + config ARMV7M_ITMSYSLOG bool "ITM SYSLOG support" default n diff --git a/arch/arm/src/armv7-m/arm_stackcheck.c b/arch/arm/src/armv7-m/arm_stackcheck.c index 968a190c26..d7167a9c55 100644 --- a/arch/arm/src/armv7-m/arm_stackcheck.c +++ b/arch/arm/src/armv7-m/arm_stackcheck.c @@ -69,6 +69,14 @@ void __stack_overflow_trap(void) uint32_t regval; +#ifdef CONFIG_ARMV7M_STACKCHECK_BREAKPOINT + regval = getreg32(NVIC_DHCSR); + if (regval & NVIC_DHCSR_C_DEBUGEN) + { + __asm("bkpt 1"); + } +#endif + /* force hard fault */ regval = getreg32(NVIC_INTCTRL); diff --git a/arch/arm/src/armv8-m/Kconfig b/arch/arm/src/armv8-m/Kconfig index c6c77cfc2a..550509281c 100644 --- a/arch/arm/src/armv8-m/Kconfig +++ b/arch/arm/src/armv8-m/Kconfig @@ -115,6 +115,16 @@ config ARMV8M_STACKCHECK_HARDWARE endchoice +config ARMV8M_STACKCHECK_BREAKPOINT + bool "Breakpoint on stack overflow" + default n + depends on ARMV8M_STACKCHECK + ---help--- + If enabled, a hard-coded breakpoint will be inserted to the stack + overflow trap. This is useful to stop the execution of the program + and diagnose the issue before the hardfault handler is called (and + context information is lost). + config ARMV8M_ITMSYSLOG bool "ITM SYSLOG support" default n diff --git a/arch/arm/src/armv8-m/arm_stackcheck.c b/arch/arm/src/armv8-m/arm_stackcheck.c index ddc85e26ee..cbe107ca00 100644 --- a/arch/arm/src/armv8-m/arm_stackcheck.c +++ b/arch/arm/src/armv8-m/arm_stackcheck.c @@ -69,6 +69,14 @@ void __stack_overflow_trap(void) uint32_t regval; +#ifdef CONFIG_ARMV8M_STACKCHECK_BREAKPOINT + regval = getreg32(NVIC_DHCSR); + if (regval & NVIC_DHCSR_C_DEBUGEN) + { + __asm("bkpt 1"); + } +#endif + /* force hard fault */ regval = getreg32(NVIC_INTCTRL);