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
commit 9d4549d48bfcfb17d635bad95a5808e47abb0e67 Author: Jiuzhu Dong <dongjiuz...@xiaomi.com> AuthorDate: Mon Jul 25 07:03:07 2022 +0000 arch: limit output maximum size stackdump when sp is not within stack Signed-off-by: Jiuzhu Dong <dongjiuz...@xiaomi.com> --- arch/Kconfig | 5 +++++ arch/arm/src/common/arm_assert.c | 7 +++++++ arch/risc-v/src/common/riscv_assert.c | 7 +++++++ arch/xtensa/src/common/xtensa_dumpstate.c | 7 +++++++ 4 files changed, 26 insertions(+) diff --git a/arch/Kconfig b/arch/Kconfig index e4461c0323..52a3ccffff 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 93bce4be33..6f5059fe1a 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 c04225447b..488bc88f33 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 140b5903e3..366f99a37d 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); } }