Currently, there are four code coverage statistics implementations:
1. GCC native implementation
2. CLANG native implementation
3. GCC coverage nuttx mini version
4. CLANG coverage nuttx mini version
Coverage Support:
GCC native implementation CLANG native implementation GCC coverage nuttx mini version CLANG coverage nuttx mini version
Compiler version requirements ALL ALL GCC 13.2 and below CLANG 17.0 and below
Program coverage statistics support Main program √ √ √ √
Program coverage statistics support Interrupt program X √ √ √
Configuration options CONFIG_COVERAGE_TOOLCHAIN CONFIG_COVERAGE_COMPILER_RT CONFIG_COVERAGE_MINI CONFIG_COVERAGE_MINI
Platform Support ARM √ √ √ √
ARM64 √ √
(Coming soon, not yet merged)
Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
1. Excerpted from: https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/blob/main/samples/src/cpp-baremetal-semihosting-prof/proflib.c
2. Since llvm profile supports more than just gcov, and some features have not yet been explored, two clang gcov implementations are supported after this patch
3. Using this lib only supports the gcov compilation options of "-fprofile-instr-generate -fcoverage-mapping"
4. This file is heavily dependent on the compiler clang version, and is currently aligned with ci, supporting 17.0.1 and below. 18 and above are not supported by this library due to different internal implementations of the compiler
Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
1. Since the implementation of gcov has changed since clang17, versions before clang17 need to use the libunwind.a file
Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
1. enable CONFIG_BUILTIN_COMPILER_RT to built libclang_rt.builtins-xxx.a and no longer use the compiler's built-in
2. Modify clang version acquisition to get two decimal points
3. It has been ported to support four architectures: ARM, ARM64, RISCV, and x86_64, among which ARM has been validated
Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>