You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gu...@apache.org on 2023/01/19 13:35:27 UTC

[nuttx] 01/02: build: Add STACK_USAGE(-fstack-usage) to assist the stack analysis

This is an automated email from the ASF dual-hosted git repository.

gustavonihei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit fd64e380722a0e0e89b67aa206aba78937b15154
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Wed Jan 18 18:58:45 2023 +0800

    build: Add STACK_USAGE(-fstack-usage) to assist the stack analysis
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 .gitignore                            | 1 +
 Kconfig                               | 7 +++++++
 arch/arm/src/common/Toolchain.defs    | 4 ++++
 arch/risc-v/src/common/Toolchain.defs | 4 ++++
 arch/xtensa/src/lx6/Toolchain.defs    | 4 ++++
 arch/xtensa/src/lx7/Toolchain.defs    | 4 ++++
 boards/sim/sim/sim/scripts/Make.defs  | 4 ++++
 7 files changed, 28 insertions(+)

diff --git a/.gitignore b/.gitignore
index f08b12a7f3..f2cabed024 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,6 +27,7 @@
 *.wsp
 *.ddc
 *.dds
+*.su
 *~
 .depend
 /.config
diff --git a/Kconfig b/Kconfig
index 768d46d03d..a66f5ac162 100644
--- a/Kconfig
+++ b/Kconfig
@@ -1945,6 +1945,13 @@ config STACK_CANARIES
 		Enabling this option can result in a significant increase
 		in footprint and an associated decrease in performance.
 
+config STACK_USAGE
+	bool "Generate stack usage information"
+	help
+		Generate an extra file that specifies the maximum amount of stack used,
+		on a per-function basis. Please use https://github.com/HBehrens/puncover
+		or tools/showstack.sh to generate the more useful report.
+
 config ARCH_HAVE_HEAPCHECK
 	bool
 	default n
diff --git a/arch/arm/src/common/Toolchain.defs b/arch/arm/src/common/Toolchain.defs
index 4f2dedb4fa..019ea12e50 100644
--- a/arch/arm/src/common/Toolchain.defs
+++ b/arch/arm/src/common/Toolchain.defs
@@ -54,6 +54,10 @@ ifeq ($(CONFIG_STACK_CANARIES),y)
   ARCHOPTIMIZATION += -fstack-protector-all
 endif
 
+ifeq ($(CONFIG_STACK_USAGE),y)
+  ARCHOPTIMIZATION += -fstack-usage
+endif
+
 ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
   ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
 endif
diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs
index de253c1b64..4f219a096d 100644
--- a/arch/risc-v/src/common/Toolchain.defs
+++ b/arch/risc-v/src/common/Toolchain.defs
@@ -63,6 +63,10 @@ ifeq ($(CONFIG_STACK_CANARIES),y)
   ARCHOPTIMIZATION += -fstack-protector-all
 endif
 
+ifeq ($(CONFIG_STACK_USAGE),y)
+  ARCHOPTIMIZATION += -fstack-usage
+endif
+
 ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
   ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
 endif
diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs
index 3a58e527b7..609c69c9ec 100644
--- a/arch/xtensa/src/lx6/Toolchain.defs
+++ b/arch/xtensa/src/lx6/Toolchain.defs
@@ -75,6 +75,10 @@ ifeq ($(CONFIG_STACK_CANARIES),y)
   ARCHOPTIMIZATION += -fstack-protector-all
 endif
 
+ifeq ($(CONFIG_STACK_USAGE),y)
+  ARCHOPTIMIZATION += -fstack-usage
+endif
+
 ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
   ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
 endif
diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs
index fe46f33442..cb1ebc1445 100644
--- a/arch/xtensa/src/lx7/Toolchain.defs
+++ b/arch/xtensa/src/lx7/Toolchain.defs
@@ -75,6 +75,10 @@ ifeq ($(CONFIG_STACK_CANARIES),y)
   ARCHOPTIMIZATION += -fstack-protector-all
 endif
 
+ifeq ($(CONFIG_STACK_USAGE),y)
+  ARCHOPTIMIZATION += -fstack-usage
+endif
+
 ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
   ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
 endif
diff --git a/boards/sim/sim/sim/scripts/Make.defs b/boards/sim/sim/sim/scripts/Make.defs
index a13ec5d738..456f02f6d7 100644
--- a/boards/sim/sim/sim/scripts/Make.defs
+++ b/boards/sim/sim/sim/scripts/Make.defs
@@ -67,6 +67,10 @@ ifeq ($(CONFIG_STACK_CANARIES),y)
   ARCHOPTIMIZATION += -fstack-protector-all
 endif
 
+ifeq ($(CONFIG_STACK_USAGE),y)
+  ARCHOPTIMIZATION += -fstack-usage
+endif
+
 ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y)
   ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
 endif