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);
         }
     }

Reply via email to