diff --git a/arch/Kconfig b/arch/Kconfig index 9237150062b73..746b97c1ae130 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -311,25 +311,6 @@ config ARCH_SIZET_LONG C++ library routines because the NuttX size_t might not have the same underlying type as your toolchain's size_t. -config ARCH_COVERAGE - bool "Enable code coverage analysis" - select HAVE_CXXINITIALIZE - default n - ---help--- - Generate code coverage - -config ARCH_COVERAGE_ALL - bool "Enable code coverage for the entire image" - depends on ARCH_COVERAGE - default n - ---help--- - This option activates code coverage instrumentation for the - entire image. If you don't enable this option, you have to - explicitly specify "-fprofile-generate -ftest-coverage" for - the files/directories you want to check. Enabling this option - will get image size increased and performance decreased - significantly. - config ARCH_INSTRUMENT_ALL bool "Instrument All" default n diff --git a/arch/arm/src/common/Toolchain.defs b/arch/arm/src/common/Toolchain.defs index 69fd68dcdc3cb..03f7b6bce0c19 100644 --- a/arch/arm/src/common/Toolchain.defs +++ b/arch/arm/src/common/Toolchain.defs @@ -72,10 +72,6 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0) ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING) endif -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - ifeq ($(CONFIG_MM_UBSAN_ALL),y) ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) endif @@ -491,7 +487,7 @@ ifeq ($(CONFIG_LIBSUPCXX),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs index b8917db48a60a..b785e1d4032ec 100644 --- a/arch/arm64/src/Toolchain.defs +++ b/arch/arm64/src/Toolchain.defs @@ -66,10 +66,6 @@ ifeq ($(CONFIG_STACK_CANARIES),y) ARCHOPTIMIZATION += -fstack-protector-all endif -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - ifeq ($(CONFIG_MM_UBSAN_ALL),y) ARCHOPTIMIZATION += $(CONFIG_MM_UBSAN_OPTION) endif @@ -196,7 +192,7 @@ ifeq ($(CONFIG_LIBSUPCXX),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/arm64/src/cmake/Toolchain.cmake b/arch/arm64/src/cmake/Toolchain.cmake index 38113dba40673..c1f08d46e3d27 100644 --- a/arch/arm64/src/cmake/Toolchain.cmake +++ b/arch/arm64/src/cmake/Toolchain.cmake @@ -107,10 +107,6 @@ if(CONFIG_STACK_CANARIES) add_compile_options(-fstack-protector-all) endif() -if(CONFIG_ARCH_COVERAGE_ALL) - add_compile_options(-fprofile-generate -ftest-coverage) -endif() - if(CONFIG_MM_UBSAN_ALL) add_compile_options(${CONFIG_MM_UBSAN_OPTION}) endif() diff --git a/arch/arm64/src/cmake/platform.cmake b/arch/arm64/src/cmake/platform.cmake index 0f12b7ffc0d9c..71795cda380e2 100644 --- a/arch/arm64/src/cmake/platform.cmake +++ b/arch/arm64/src/cmake/platform.cmake @@ -56,7 +56,7 @@ if(CONFIG_LIBSUPCXX) OUTPUT_VARIABLE extra_library) list(APPEND EXTRA_LIB ${extra_library}) endif() -if(CONFIG_ARCH_COVERAGE) +if(CONFIG_SCHED_GCOV) execute_process( COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} --print-file-name=libgcov.a diff --git a/arch/risc-v/src/cmake/Toolchain.cmake b/arch/risc-v/src/cmake/Toolchain.cmake index a409c1097c5e3..caac1972ae3fe 100644 --- a/arch/risc-v/src/cmake/Toolchain.cmake +++ b/arch/risc-v/src/cmake/Toolchain.cmake @@ -158,7 +158,7 @@ if(${CONFIG_STACK_USAGE_WARNING}) endif() endif() -if(CONFIG_ARCH_COVERAGE) +if(CONFIG_SCHED_GCOV) add_compile_options(-fprofile-generate -ftest-coverage) endif() diff --git a/arch/risc-v/src/cmake/platform.cmake b/arch/risc-v/src/cmake/platform.cmake index daaad0ae05d52..df38ed77d1e4b 100644 --- a/arch/risc-v/src/cmake/platform.cmake +++ b/arch/risc-v/src/cmake/platform.cmake @@ -61,7 +61,7 @@ if(CONFIG_LIBSUPCXX) list(APPEND EXTRA_LIB ${extra_library}) endif() -if(CONFIG_ARCH_COVERAGE) +if(CONFIG_SCHED_GCOV) execute_process( COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} --print-file-name=libgcov.a diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs index c91183d8f7054..5a67042a56493 100644 --- a/arch/risc-v/src/common/Toolchain.defs +++ b/arch/risc-v/src/common/Toolchain.defs @@ -81,10 +81,6 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0) ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING) endif -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - ARCHCFLAGS += -fno-common ARCHCXXFLAGS += -fno-common @@ -400,7 +396,7 @@ ifeq ($(CONFIG_LIBSUPCXX),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/sim/Kconfig b/arch/sim/Kconfig index 90eba49a7bdea..78ca9ac7db510 100644 --- a/arch/sim/Kconfig +++ b/arch/sim/Kconfig @@ -90,6 +90,14 @@ config SIM_UBSAN_DUMMY ---help--- Keep SIM_UBSAN compile time but disable runtime actions. +config SIM_GCOV_ALL + bool "Enable code coverage for the entire image" + depends on COVERAGE + default n + ---help--- + This option activates code coverage instrumentation for the + entire image. + choice prompt "X64_64 ABI" default SIM_X8664_SYSTEMV if HOST_LINUX diff --git a/arch/sim/src/Makefile b/arch/sim/src/Makefile index 2f25984ed4051..c466dc18c83af 100644 --- a/arch/sim/src/Makefile +++ b/arch/sim/src/Makefile @@ -140,7 +140,7 @@ ifeq ($(CONFIG_LIBM_TOOLCHAIN),y) STDLIBS += -lm endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) STDLIBS += -lgcov endif diff --git a/arch/sim/src/cmake/Toolchain.cmake b/arch/sim/src/cmake/Toolchain.cmake index 024168d4e2430..a480c004e745b 100644 --- a/arch/sim/src/cmake/Toolchain.cmake +++ b/arch/sim/src/cmake/Toolchain.cmake @@ -88,7 +88,7 @@ if(CONFIG_STACK_USAGE_WARNING) add_compile_options(-Wstack-usage=${CONFIG_STACK_USAGE_WARNING}) endif() -if(CONFIG_SIM_GCOV_ALL) +if(CONFIG_SCHED_GCOV) add_compile_options(-fprofile-generate -ftest-coverage) endif() diff --git a/arch/sim/src/sim/CMakeLists.txt b/arch/sim/src/sim/CMakeLists.txt index a4e114b14771c..f6fbc724891dc 100644 --- a/arch/sim/src/sim/CMakeLists.txt +++ b/arch/sim/src/sim/CMakeLists.txt @@ -27,7 +27,7 @@ set(HOSTSRCS) set(HOST_INCLUDE_DIRS) set(STDLIBS pthread) -if(CONFIG_ARCH_COVERAGE) +if(CONFIG_SCHED_GCOV) list(APPEND STDLIBS gcov) endif() diff --git a/arch/sim/src/sim/posix/sim_hostmisc.c b/arch/sim/src/sim/posix/sim_hostmisc.c index a8b3f2584e4ee..44f3f19c87253 100644 --- a/arch/sim/src/sim/posix/sim_hostmisc.c +++ b/arch/sim/src/sim/posix/sim_hostmisc.c @@ -50,7 +50,7 @@ * Public Function Prototypes ****************************************************************************/ -#ifdef CONFIG_ARCH_COVERAGE +#ifdef CONFIG_SCHED_GCOV void __gcov_dump(void); #endif @@ -72,7 +72,7 @@ extern int backtrace(void **array, int size); void host_abort(int status) { -#ifdef CONFIG_ARCH_COVERAGE +#ifdef CONFIG_SCHED_GCOV /* Dump gcov data. */ host_uninterruptible_no_return(__gcov_dump); diff --git a/arch/x86_64/src/cmake/Toolchain.cmake b/arch/x86_64/src/cmake/Toolchain.cmake index 6b38198c80b53..8885f3f054ecd 100644 --- a/arch/x86_64/src/cmake/Toolchain.cmake +++ b/arch/x86_64/src/cmake/Toolchain.cmake @@ -75,7 +75,7 @@ if(${CONFIG_STACK_USAGE_WARNING}) endif() endif() -if(CONFIG_ARCH_COVERAGE) +if(CONFIG_SCHED_GCOV) add_compile_options(-fprofile-generate -ftest-coverage) endif() diff --git a/arch/x86_64/src/cmake/platform.cmake b/arch/x86_64/src/cmake/platform.cmake index a160c03b3583c..7ad51311a4f0f 100644 --- a/arch/x86_64/src/cmake/platform.cmake +++ b/arch/x86_64/src/cmake/platform.cmake @@ -59,7 +59,7 @@ if(CONFIG_LIBSUPCXX) list(APPEND EXTRA_LIB ${extra_library}) endif() -if(CONFIG_ARCH_COVERAGE) +if(CONFIG_SCHED_GCOV) execute_process( COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS} ${NUTTX_EXTRA_FLAGS} --print-file-name=libgcov.a diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs index c1e9d6b62e5cc..9f8eb9620e7f2 100644 --- a/arch/xtensa/src/lx6/Toolchain.defs +++ b/arch/xtensa/src/lx6/Toolchain.defs @@ -91,10 +91,6 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0) ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING) endif -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - # Instrumentation options ifeq ($(CONFIG_ARCH_INSTRUMENT_ALL),y) @@ -195,7 +191,7 @@ ifeq ($(CONFIG_LIBSUPCXX),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs index caad6d2811977..071ccd9d057b2 100644 --- a/arch/xtensa/src/lx7/Toolchain.defs +++ b/arch/xtensa/src/lx7/Toolchain.defs @@ -95,10 +95,6 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0) ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING) endif -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) - ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage -endif - # Instrumentation options ifeq ($(CONFIG_ARCH_INSTRUMENT_ALL),y) @@ -199,7 +195,7 @@ ifeq ($(CONFIG_LIBSUPCXX),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/boards/sim/sim/sim/configs/kasan/defconfig b/boards/sim/sim/sim/configs/kasan/defconfig index ea9b2555179d3..34b43ed9a2071 100644 --- a/boards/sim/sim/sim/configs/kasan/defconfig +++ b/boards/sim/sim/sim/configs/kasan/defconfig @@ -9,7 +9,6 @@ CONFIG_ARCH="sim" CONFIG_ARCH_BOARD="sim" CONFIG_ARCH_BOARD_SIM=y CONFIG_ARCH_CHIP="sim" -CONFIG_ARCH_COVERAGE=y CONFIG_ARCH_SIM=y CONFIG_BOARDCTL_POWEROFF=y CONFIG_BUILTIN=y @@ -39,6 +38,7 @@ CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_UNSAFE=y CONFIG_READLINE_TABCOMPLETION=y CONFIG_RR_INTERVAL=10 +CONFIG_SCHED_GCOV=y CONFIG_SCHED_HAVE_PARENT=y CONFIG_SCHED_LPWORK=y CONFIG_SCHED_WAITPID=y diff --git a/boards/sim/sim/sim/scripts/Make.defs b/boards/sim/sim/sim/scripts/Make.defs index 08a20a7b2caaf..c38a6c60ea102 100644 --- a/boards/sim/sim/sim/scripts/Make.defs +++ b/boards/sim/sim/sim/scripts/Make.defs @@ -72,7 +72,7 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0) ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING) endif -ifeq ($(CONFIG_ARCH_COVERAGE_ALL),y) +ifeq ($(CONFIG_SIM_GCOV_ALL),y) ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage endif diff --git a/sched/Kconfig b/sched/Kconfig index 38dfe43443b14..b765ef6856808 100644 --- a/sched/Kconfig +++ b/sched/Kconfig @@ -1341,6 +1341,18 @@ config SCHED_STACK_RECORD to disable.Through instrumentation, record the backtrace at the deepest point in the stack. +config SCHED_GCOV + bool "Enable GCOV support" + select HAVE_CXXINITIALIZE + default n + ---help--- + Enable GCOV support for code coverage analysis. + After turning on this option, code coverage can be analyzed. + If this option is enabled, image size and performance will be + significantly reduced. Before use, you need to add the + "-fprofile-generate -ftest-coverage" compilation parameters + to the file to be analyzed. + endmenu menu "Files and I/O" diff --git a/tools/Config.mk b/tools/Config.mk index 584bab754f64f..2637786f0eb77 100644 --- a/tools/Config.mk +++ b/tools/Config.mk @@ -659,7 +659,7 @@ endef # CLEAN - Default clean target -ifeq ($(CONFIG_ARCH_COVERAGE),y) +ifeq ($(CONFIG_SCHED_GCOV),y) EXTRA = *.gcno *.gcda endif