Fix not handling stack realignment

Signed-off-by: Chien Wong <m@xv97.com>
This commit is contained in:
Chien Wong
2025-02-18 22:05:19 +08:00
parent 73714489f9
commit 55e7b69906
+8
View File
@@ -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); 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) */ #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 #ifdef CMB_USING_DUMP_STACK_INFO
/* check stack overflow */ /* check stack overflow */
if (stack_pointer < stack_start_addr || stack_pointer > stack_start_addr + stack_size) { if (stack_pointer < stack_start_addr || stack_pointer > stack_start_addr + stack_size) {