From 55e7b6990640c481e83ae8a3c0f3af2092b9f7a6 Mon Sep 17 00:00:00 2001 From: Chien Wong Date: Tue, 18 Feb 2025 22:05:19 +0800 Subject: [PATCH] Fix not handling stack realignment Signed-off-by: Chien Wong --- cm_backtrace/cm_backtrace.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cm_backtrace/cm_backtrace.c b/cm_backtrace/cm_backtrace.c index 3e76321..8ed273b 100644 --- a/cm_backtrace/cm_backtrace.c +++ b/cm_backtrace/cm_backtrace.c @@ -657,6 +657,14 @@ void cm_backtrace_fault(uint32_t fault_handler_lr, uint32_t fault_handler_sp) { stack_pointer = statck_del_fpu_regs(fault_handler_lr, stack_pointer); #endif /* (CMB_CPU_PLATFORM_TYPE == CMB_CPU_ARM_CORTEX_M4) || (CMB_CPU_PLATFORM_TYPE == CMB_CPU_ARM_CORTEX_M7) */ + /* + * Was the stack pointer adjusted to ensure 8-byte alignment when the exception was taken? + * In that case, bit 9 of stacked xPSR/RETPSR is set. + */ + if (((uint32_t *)saved_regs_addr)[7] & (1UL << 9)) { + stack_pointer += 4; + } + #ifdef CMB_USING_DUMP_STACK_INFO /* check stack overflow */ if (stack_pointer < stack_start_addr || stack_pointer > stack_start_addr + stack_size) {