diff --git a/arch/Kconfig b/arch/Kconfig index e4461c0323a..52a3ccffff5 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -837,6 +837,11 @@ config ARCH_STACKDUMP ---help--- Enable to do stack dumps after assertions +config ARCH_STACKDUMP_MAX_LENGTH + int "The maximum length for dump stack on assertions" + depends on ARCH_STACKDUMP + default 0 + config DUMP_ON_EXIT bool "Dump all tasks state on exit" default n diff --git a/arch/arm/src/common/arm_assert.c b/arch/arm/src/common/arm_assert.c index 93bce4be33d..6f5059fe1aa 100644 --- a/arch/arm/src/common/arm_assert.c +++ b/arch/arm/src/common/arm_assert.c @@ -362,6 +362,13 @@ static void arm_dump_stack(const char *tag, uint32_t sp, size -= remain; #endif +#if CONFIG_ARCH_STACKDUMP_MAX_LENGTH > 0 + if (size > CONFIG_ARCH_STACKDUMP_MAX_LENGTH) + { + size = CONFIG_ARCH_STACKDUMP_MAX_LENGTH; + } +#endif + arm_stackdump(base, base + size); } } diff --git a/arch/risc-v/src/common/riscv_assert.c b/arch/risc-v/src/common/riscv_assert.c index c04225447b7..488bc88f335 100644 --- a/arch/risc-v/src/common/riscv_assert.c +++ b/arch/risc-v/src/common/riscv_assert.c @@ -339,6 +339,13 @@ static void riscv_dump_stack(const char *tag, uintptr_t sp, size -= remain; #endif +#if CONFIG_ARCH_STACKDUMP_MAX_LENGTH > 0 + if (size > CONFIG_ARCH_STACKDUMP_MAX_LENGTH) + { + size = CONFIG_ARCH_STACKDUMP_MAX_LENGTH; + } +#endif + riscv_stackdump(base, base + size); } } diff --git a/arch/xtensa/src/common/xtensa_dumpstate.c b/arch/xtensa/src/common/xtensa_dumpstate.c index 140b5903e30..366f99a37d0 100644 --- a/arch/xtensa/src/common/xtensa_dumpstate.c +++ b/arch/xtensa/src/common/xtensa_dumpstate.c @@ -308,6 +308,13 @@ static void xtensa_dump_stack(const char *tag, uint32_t sp, size = used; #endif +#if CONFIG_ARCH_STACKDUMP_MAX_LENGTH > 0 + if (size > CONFIG_ARCH_STACKDUMP_MAX_LENGTH) + { + size = CONFIG_ARCH_STACKDUMP_MAX_LENGTH; + } +#endif + xtensa_stackdump(base, base + size); } }