Skip to content

linbuitin: enhance gcov and gprof #78

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Dec 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions arch/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -278,10 +278,6 @@ endif #ARCH_CHIP_CUSTOM

source "$BINDIR/arch/dummy/Kconfig"

config ARCH_TOOLCHAIN_IAR
bool
default n

config ARCH_TOOLCHAIN_GNU
bool
default n
Expand All @@ -291,15 +287,24 @@ config ARCH_TOOLCHAIN_CLANG
select ARCH_TOOLCHAIN_GNU
default n

config ARCH_TOOLCHAIN_TASKING
config ARCH_TOOLCHAIN_GCC
bool
select ARCH_TOOLCHAIN_GNU
default n

config ARCH_TOOLCHAIN_GHS
bool
select ARCH_TOOLCHAIN_GNU
default n

config ARCH_TOOLCHAIN_IAR
bool
default n

config ARCH_TOOLCHAIN_TASKING
bool
default n

config ARCH_GNU_NO_WEAKFUNCTIONS
bool
depends on ARCH_TOOLCHAIN_GNU
Expand Down
8 changes: 4 additions & 4 deletions arch/arm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@ config ARM_TOOLCHAIN_IAR
config ARM_TOOLCHAIN_BUILDROOT
bool "Buildroot (Cygwin or Linux)"
depends on !WINDOWS_NATIVE
select ARCH_TOOLCHAIN_GNU
select ARCH_TOOLCHAIN_GCC

config ARM_TOOLCHAIN_BUILDROOT_OABI
bool "OABI (vs EABI)"
depends on !WINDOWS_NATIVE
select ARCH_TOOLCHAIN_GNU
select ARCH_TOOLCHAIN_GCC
---help---
Most of the older buildroot toolchains are OABI

config ARM_TOOLCHAIN_GNU_EABI
bool "Generic GNU EABI toolchain"
select ARCH_TOOLCHAIN_GNU
select ARCH_TOOLCHAIN_GCC
---help---
This option should work for any modern GNU toolchain (GCC 4.5 or newer)

config ARM_TOOLCHAIN_GNU_OABI
bool "Generic GNU OABI toolchain"
select ARCH_TOOLCHAIN_GNU
select ARCH_TOOLCHAIN_GCC
---help---
This option should work for any GNU toolchain.

Expand Down
6 changes: 3 additions & 3 deletions arch/arm/src/cmake/armclang.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,11 @@ if(CONFIG_STACK_USAGE_WARNING AND NOT "${CONFIG_STACK_USAGE_WARNING}" STREQUAL
add_compile_options(-Wstack-usage=${CONFIG_STACK_USAGE_WARNING})
endif()

if(CONFIG_SCHED_GCOV)
add_compile_options(-fprofile-generate -ftest-coverage)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
endif()

if(CONFIG_SCHED_GPROF_ALL)
if(CONFIG_PROFILE_ALL)
add_compile_options(-pg)
endif()

Expand Down
6 changes: 3 additions & 3 deletions arch/arm/src/cmake/clang.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,11 @@ if(CONFIG_STACK_USAGE_WARNING AND NOT "${CONFIG_STACK_USAGE_WARNING}" STREQUAL
add_compile_options(-Wstack-usage=${CONFIG_STACK_USAGE_WARNING})
endif()

if(CONFIG_SCHED_GCOV_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
endif()

if(CONFIG_SCHED_GPROF_ALL)
if(CONFIG_PROFILE_ALL)
add_compile_options(-pg)
endif()

Expand Down
6 changes: 3 additions & 3 deletions arch/arm/src/cmake/gcc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,11 @@ if(CONFIG_STACK_USAGE_WARNING AND NOT "${CONFIG_STACK_USAGE_WARNING}" STREQUAL
add_compile_options(-Wstack-usage=${CONFIG_STACK_USAGE_WARNING})
endif()

if(CONFIG_SCHED_GCOV_ALL)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
endif()

if(CONFIG_SCHED_GPROF_ALL)
if(CONFIG_PROFILE_ALL)
add_compile_options(-pg)
endif()

Expand Down Expand Up @@ -165,7 +165,7 @@ if(CONFIG_ARCH_INSTRUMENT_ALL)
add_compile_options(-finstrument-functions)
endif()

if(CONFIG_SCHED_GPROF_ALL)
if(CONFIG_PROFILE_ALL)
add_compile_options(-pg)
endif()

Expand Down
4 changes: 2 additions & 2 deletions arch/arm/src/cmake/ghs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ if(CONFIG_STACK_USAGE_WARNING AND NOT "${CONFIG_STACK_USAGE_WARNING}" STREQUAL
add_compile_options(-Wstack-usage=${CONFIG_STACK_USAGE_WARNING})
endif()

if(CONFIG_SCHED_GCOV_ALL)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
endif()

if(CONFIG_SCHED_GPROF_ALL)
if(CONFIG_PROFILE_ALL)
add_compile_options(-pg)
endif()

Expand Down
2 changes: 1 addition & 1 deletion arch/arm/src/cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,6 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
nuttx_find_toolchain_lib(libsupc++.a)
endif()

if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
nuttx_find_toolchain_lib(libgcov.a)
endif()
12 changes: 10 additions & 2 deletions arch/arm/src/common/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,15 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0)
ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING)
endif

ifeq ($(CONFIG_SCHED_GPROF_ALL),y)
ifeq ($(CONFIG_COVERAGE_ALL),y)
ifeq ($(CONFIG_ARCH_TOOLCHAIN_GCC),y)
ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
else ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y)
ARCHOPTIMIZATION += -fprofile-instr-generate -fcoverage-mapping
endif
endif

ifeq ($(CONFIG_PROFILE_ALL),y)
ARCHOPTIMIZATION += -pg
endif

Expand Down Expand Up @@ -502,7 +510,7 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif

ifeq ($(CONFIG_SCHED_GCOV),y)
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif

Expand Down
2 changes: 1 addition & 1 deletion arch/arm64/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ choice

config ARM64_TOOLCHAIN_GNU_EABI
bool "Generic GNU EABI toolchain"
select ARCH_TOOLCHAIN_GNU
select ARCH_TOOLCHAIN_GCC
---help---
This option should work for any modern GNU toolchain (GCC 4.5 or newer)

Expand Down
12 changes: 10 additions & 2 deletions arch/arm64/src/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,15 @@ ifeq ($(CONFIG_ARCH_INSTRUMENT_ALL),y)
ARCHOPTIMIZATION += -finstrument-functions
endif

ifeq ($(CONFIG_SCHED_GPROF_ALL),y)
ifeq ($(CONFIG_COVERAGE_ALL),y)
ifeq ($(CONFIG_ARCH_TOOLCHAIN_GCC),y)
ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
else ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y)
ARCHOPTIMIZATION += -fprofile-instr-generate -fcoverage-mapping
endif
endif

ifeq ($(CONFIG_PROFILE_ALL),y)
ARCHOPTIMIZATION += -pg
endif

Expand Down Expand Up @@ -223,7 +231,7 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif

ifeq ($(CONFIG_SCHED_GCOV),y)
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif

Expand Down
10 changes: 9 additions & 1 deletion arch/arm64/src/cmake/Toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,15 @@ if(CONFIG_ARCH_INSTRUMENT_ALL)
add_compile_options(-finstrument-functions)
endif()

if(CONFIG_SCHED_GPROF_ALL)
if(CONFIG_COVERAGE_ALL)
if(CONFIG_ARCH_TOOLCHAIN_GCC)
add_compile_options(-fprofile-generate -ftest-coverage)
elseif(CONFIG_ARCH_TOOLCHAIN_CLANG)
add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
endif()
endif()

if(CONFIG_PROFILE_ALL)
add_compile_options(-pg)
endif()

Expand Down
2 changes: 1 addition & 1 deletion arch/arm64/src/cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif()
if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
Expand Down
2 changes: 1 addition & 1 deletion arch/risc-v/src/cmake/Toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ if(${CONFIG_STACK_USAGE_WARNING})
endif()
endif()

if(CONFIG_SCHED_GCOV_ALL)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
endif()

Expand Down
2 changes: 1 addition & 1 deletion arch/risc-v/src/cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
list(APPEND EXTRA_LIB ${extra_library})
endif()

if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
Expand Down
2 changes: 1 addition & 1 deletion arch/risc-v/src/common/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif

ifeq ($(CONFIG_SCHED_GCOV),y)
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif

Expand Down
4 changes: 2 additions & 2 deletions arch/sim/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ config SIM_UBSAN_DUMMY
---help---
Keep SIM_UBSAN compile time but disable runtime actions.

config SIM_GPROF
config SIM_PROFILE
bool "Enable gprof"
depends on !SCHED_GPROF
depends on PROFILE_NONE
default n
---help---
Enable support gprof profiling tool.
Expand Down
4 changes: 2 additions & 2 deletions arch/sim/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,11 @@ ifeq ($(CONFIG_LIBM_TOOLCHAIN),y)
STDLIBS += -lm
endif

ifeq ($(CONFIG_SCHED_GCOV),y)
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
STDLIBS += -lgcov
endif

ifeq ($(CONFIG_SIM_GPROF),y)
ifneq ($(CONFIG_SIM_PROFILE)$(CONFIG_PROFILE_ALL),)
HOSTCFLAGS += -pg
endif

Expand Down
4 changes: 2 additions & 2 deletions arch/sim/src/cmake/Toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,11 @@ if(CONFIG_STACK_USAGE_WARNING)
add_compile_options(-Wstack-usage=${CONFIG_STACK_USAGE_WARNING})
endif()

if(CONFIG_SCHED_GCOV_ALL)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
endif()

if(CONFIG_SCHED_GPROF_ALL OR CONFIG_SIM_GPROF)
if(CONFIG_PROFILE_ALL OR CONFIG_SIM_PROFILE)
add_compile_options(-pg)
endif()

Expand Down
2 changes: 1 addition & 1 deletion arch/sim/src/sim/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ set(HOSTSRCS)
set(HOST_INCLUDE_DIRS)
set(STDLIBS pthread)

if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
list(APPEND STDLIBS gcov)
endif()

Expand Down
4 changes: 2 additions & 2 deletions arch/sim/src/sim/posix/sim_hostmisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
* Public Function Prototypes
****************************************************************************/

#ifdef CONFIG_SCHED_GCOV
#ifndef CONFIG_COVERAGE_NONE
void __gcov_dump(void);
#endif

Expand All @@ -72,7 +72,7 @@ extern int backtrace(void **array, int size);

void host_abort(int status)
{
#ifdef CONFIG_SCHED_GCOV
#ifndef CONFIG_COVERAGE_NONE
/* Dump gcov data. */

host_uninterruptible_no_return(__gcov_dump);
Expand Down
2 changes: 1 addition & 1 deletion arch/tricore/src/cmake/ToolchainGnuc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ if(CONFIG_STACK_CANARIES)
add_compile_options(-fstack-protector-all)
endif()

if(CONFIG_SCHED_GCOV_ALL)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
endif()

Expand Down
2 changes: 1 addition & 1 deletion arch/tricore/src/cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ if(CONFIG_TRICORE_TOOLCHAIN_GNU)
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif()
if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
Expand Down
4 changes: 2 additions & 2 deletions arch/tricore/src/common/ToolchainGnuc.defs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ ifneq ($(CONFIG_STACK_USAGE_WARNING),0)
ARCHOPTIMIZATION += -Wstack-usage=$(CONFIG_STACK_USAGE_WARNING)
endif

ifeq ($(CONFIG_SCHED_GCOV_ALL),y)
ifeq ($(CONFIG_COVERAGE_ALL),y)
ARCHOPTIMIZATION += -fprofile-generate -ftest-coverage
endif

Expand Down Expand Up @@ -183,7 +183,7 @@ ifeq ($(CONFIG_LIBSUPCXX),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif

ifeq ($(CONFIG_SCHED_GCOV),y)
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif

Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/src/cmake/Toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ if(${CONFIG_STACK_USAGE_WARNING})
endif()
endif()

if(CONFIG_SCHED_GCOV_ALL)
if(CONFIG_COVERAGE_ALL)
add_compile_options(-fprofile-generate -ftest-coverage)
endif()

Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/src/cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
list(APPEND EXTRA_LIB ${extra_library})
endif()

if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
Expand Down
2 changes: 1 addition & 1 deletion arch/xtensa/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ choice

config XTENSA_TOOLCHAIN_XCC
bool "Xtensa Toolchain use GCC as front end"
select ARCH_TOOLCHAIN_GNU
select ARCH_TOOLCHAIN_GCC

config XTENSA_TOOLCHAIN_XCLANG
bool "Xtensa Toolchain use CLANG as front end"
Expand Down
2 changes: 1 addition & 1 deletion arch/xtensa/src/cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif()
if(CONFIG_SCHED_GCOV)
if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
Expand Down
Loading
Loading