This patch set adds support to build the RTEMS libraries with gcov instrumentation to get code and branch coverage. There are some improvements necessary in the build system to support different compiler flags for libraries and tests. In general, code coverage is enabled by the new RTEMS_COVERAGE build configuration option. The user can fine tune the build through the BSP_OPTIMIZATION_FLAGS, CPUKIT_OPTIMIZATION_FLAGS, TEST_OPTIMIZATION_FLAGS, and COVERAGE_COMPILER_FLAGS, COVERAGE_LINKER_FLAGS options. The gcov information is dumped after each test case in a base64 encoded gcfn and gcda data stream. It looks like this:
*** BEGIN OF GCOV INFO BASE64 *** bmZjZyAxMkJSAAAAL3RtcC9zaC9iLXJ0ZW1zL2FybS94aWxpbnhfenlucV9hOV9xZW11L2NwdWtp dC9saWJjc3VwcG9ydC9zcmMvX19nZXR0b2QuYy42NS5nY2RhAGFkY2cgMTJCPoT6qo6mcBUAAAAB DAAAAOOrF1pxp0aIPrK7wAAAoQHw////AAAAAQwAAADTfDdNQYCYwJ9ZRL0AAKEBIAAAAAQAAAAA ... srvAAAChAfD///8AAAABDAAAAMXOxS0Rhzqx6Old2wAAoQH4////AAAAAQwAAACYh8U9/rgJ5hMc ig8AAKEB2P///wAAAAEMAAAAN3+9YAwMW8gTHIoPAAChAdj///8AAAABDAAAADAwMx4TuamFPrK7 wAAAoQHw////AAAAAQwAAACvassJzDNWd/lKs3wAAKEB8P///wAAAAA= *** END OF GCOV INFO BASE64 *** On the host you can decode the block and pipe it through the gcov-tool to produce the *.gcda files. Example Python code: block = some regex stuff to get the block between the BEGIN/END OF ... stream = base64.b64decode(block) subprocess.run(["arm-rtems6-gcov-tool", "merge-stream"], input=stream) v2: * Rename RTEMS_COVERAGE in RTEMS_GCOV_COVERAGE * Add <rtems/score/gcov.h> and provide gcov_info linker set in separate file. * Split LIBRARY_OPTIMIZATION_FLAGS in BSP_OPTIMIZATION_FLAGS and CPUKIT_OPTIMIZATION_FLAGS. Sebastian Huber (13): build: Add more flags to BuildItemContext build: Move BSP_INCLUDES split build: Fix identifier pattern build: Improve value substitution build: Add cppflags, cflags, cxxflags to groups build: Fix optimization flags definition order build: Allow separate optimization flags gcov: Add fork(), etc. gcov wrappers gcov: Add functions to dump the gcov information gcov: Add wrapper to dump the gcov info build: Add RTEMS_GCOV_COVERAGE option samples/minimum: Prevent a stack overflow libtests/crypt01: Avoid stack overflows cpukit/include/rtems/score/gcov.h | 66 ++++++++++ cpukit/include/rtems/score/io.h | 4 + cpukit/include/rtems/test-info.h | 6 + cpukit/libcsupport/src/gcovfork.c | 94 ++++++++++++++ cpukit/libtest/testgcovbspreset.c | 54 ++++++++ cpukit/libtest/testgcovcpufatalhalt.c | 54 ++++++++ cpukit/libtest/testgcovdumpinfo.c | 66 ++++++++++ cpukit/score/src/gcovinfoset.c | 42 ++++++ cpukit/score/src/iogcovdumpinfo.c | 97 ++++++++++++++ cpukit/score/src/iogcovdumpinfobase64.c | 111 ++++++++++++++++ spec/build/bsps/aarch64/a53/grp.yml | 3 + spec/build/bsps/aarch64/a72/grp.yml | 3 + spec/build/bsps/aarch64/grp.yml | 3 + spec/build/bsps/aarch64/xilinx-versal/grp.yml | 3 + .../bsps/aarch64/xilinx-versal/grp_qemu.yml | 3 + .../bsps/aarch64/xilinx-versal/grp_vck190.yml | 3 + spec/build/bsps/aarch64/xilinx-zynqmp/grp.yml | 3 + .../bsps/aarch64/xilinx-zynqmp/grp_zu3eg.yml | 5 +- spec/build/bsps/arm/beagle/bspboardorig.yml | 4 +- spec/build/bsps/arm/beagle/bspboardxm.yml | 4 +- spec/build/bsps/arm/beagle/bspboneblack.yml | 4 +- spec/build/bsps/arm/beagle/bspbonewhite.yml | 4 +- spec/build/bsps/arm/beagle/grp.yml | 3 + spec/build/bsps/arm/csb337/bspcsb337.yml | 4 +- spec/build/bsps/arm/csb337/bspcsb637.yml | 4 +- spec/build/bsps/arm/csb337/bspkit637v6.yml | 4 +- spec/build/bsps/arm/csb337/grp.yml | 3 + spec/build/bsps/arm/fvp/bspcortexr52.yml | 4 +- spec/build/bsps/arm/fvp/grp.yml | 3 + spec/build/bsps/arm/grp.yml | 3 + spec/build/bsps/arm/lm3s69xx/bsplm3s3749.yml | 4 +- spec/build/bsps/arm/lm3s69xx/bsplm3s6965.yml | 4 +- spec/build/bsps/arm/lm3s69xx/bsplm4f120.yml | 4 +- spec/build/bsps/arm/lm3s69xx/bspqemu.yml | 4 +- spec/build/bsps/arm/lm3s69xx/grp.yml | 3 + .../build/bsps/arm/lpc176x/bsplpc1768mbed.yml | 4 +- .../bsps/arm/lpc176x/bsplpc1768mbedahbram.yml | 4 +- .../arm/lpc176x/bsplpc1768mbedahbrameth.yml | 4 +- spec/build/bsps/arm/lpc176x/grp.yml | 3 + .../bsps/arm/lpc24xx/bsplpc17xxearam.yml | 4 +- .../bsps/arm/lpc24xx/bsplpc17xxearomint.yml | 4 +- .../bsps/arm/lpc24xx/bsplpc17xxplx800ram.yml | 4 +- .../arm/lpc24xx/bsplpc17xxplx800romint.yml | 4 +- spec/build/bsps/arm/lpc24xx/bsplpc2362.yml | 4 +- .../bsps/arm/lpc24xx/bsplpc23xxtli800.yml | 4 +- spec/build/bsps/arm/lpc24xx/bsplpc24xxea.yml | 4 +- .../bsps/arm/lpc24xx/bsplpc40xxearam.yml | 4 +- .../bsps/arm/lpc24xx/bsplpc40xxearomint.yml | 4 +- spec/build/bsps/arm/lpc24xx/bspncsram.yml | 4 +- spec/build/bsps/arm/lpc24xx/bspncsromext.yml | 4 +- spec/build/bsps/arm/lpc24xx/bspncsromint.yml | 4 +- spec/build/bsps/arm/lpc24xx/bspplx800ram.yml | 4 +- .../bsps/arm/lpc24xx/bspplx800romint.yml | 4 +- spec/build/bsps/arm/lpc24xx/grp.yml | 3 + spec/build/bsps/arm/lpc32xx/bsplpc32xxmzx.yml | 4 +- spec/build/bsps/arm/lpc32xx/bspmzxstage1.yml | 4 +- spec/build/bsps/arm/lpc32xx/bspmzxstage2.yml | 4 +- spec/build/bsps/arm/lpc32xx/bspphycore.yml | 4 +- spec/build/bsps/arm/lpc32xx/grp.yml | 3 + .../bsps/arm/raspberrypi/bspraspberrypi.yml | 4 +- .../bsps/arm/raspberrypi/bspraspberrypi2.yml | 4 +- spec/build/bsps/arm/raspberrypi/grp.yml | 3 + spec/build/bsps/arm/rtl22xx/bsprtl22xx.yml | 4 +- spec/build/bsps/arm/rtl22xx/bsprtl22xxt.yml | 4 +- spec/build/bsps/arm/rtl22xx/grp.yml | 3 + .../build/bsps/arm/stm32f4/bspstm32f105rc.yml | 4 +- spec/build/bsps/arm/stm32f4/bspstm32f4.yml | 4 +- spec/build/bsps/arm/stm32f4/grp.yml | 3 + spec/build/bsps/arm/stm32h7/grp.yml | 3 + spec/build/bsps/arm/tms570/bspls3137hdk.yml | 4 +- .../bsps/arm/tms570/bspls3137hdkintram.yml | 4 +- .../bsps/arm/tms570/bspls3137hdksdram.yml | 4 +- .../arm/tms570/bspls3137hdkwithloader.yml | 4 +- spec/build/bsps/arm/tms570/grp.yml | 3 + spec/build/bsps/arm/xilinx-zynq/bspqemu.yml | 4 +- spec/build/bsps/arm/xilinx-zynq/bspzc702.yml | 4 +- spec/build/bsps/arm/xilinx-zynq/bspzc706.yml | 4 +- .../bsps/arm/xilinx-zynq/bspzedboard.yml | 4 +- spec/build/bsps/arm/xilinx-zynq/grp.yml | 3 + spec/build/bsps/bfin/grp.yml | 3 + spec/build/bsps/bspopts.yml | 8 ++ spec/build/bsps/grpmake.yml | 3 + spec/build/bsps/i386/grp.yml | 3 + spec/build/bsps/i386/pc386/bsppc386.yml | 4 +- spec/build/bsps/i386/pc386/bsppc486.yml | 4 +- spec/build/bsps/i386/pc386/bsppc586.yml | 4 +- spec/build/bsps/i386/pc386/bsppc586sse.yml | 4 +- spec/build/bsps/i386/pc386/bsppc686.yml | 4 +- spec/build/bsps/i386/pc386/bsppcp4.yml | 4 +- spec/build/bsps/i386/pc386/grp.yml | 3 + spec/build/bsps/lm32/grp.yml | 3 + spec/build/bsps/lm32/lm32_evr/bspgdbsim.yml | 4 +- spec/build/bsps/lm32/lm32_evr/bsplm32evr.yml | 4 +- spec/build/bsps/lm32/lm32_evr/grp.yml | 3 + spec/build/bsps/m68k/gen68360/bspgen68360.yml | 4 +- .../bsps/m68k/gen68360/bspgen68360040.yml | 4 +- spec/build/bsps/m68k/gen68360/bsppgh360.yml | 4 +- spec/build/bsps/m68k/gen68360/grp.yml | 3 + .../bsps/m68k/genmcf548x/bspcobra5475.yml | 4 +- .../m68k/genmcf548x/bspm5484fireengine.yml | 4 +- spec/build/bsps/m68k/genmcf548x/grp.yml | 3 + spec/build/bsps/m68k/grp.yml | 3 + spec/build/bsps/m68k/mvme162/bspmvme162.yml | 4 +- spec/build/bsps/m68k/mvme162/bspmvme162lx.yml | 4 +- spec/build/bsps/m68k/mvme162/grp.yml | 3 + spec/build/bsps/microblaze/grp.yml | 3 + .../microblaze/microblaze_fpga/bspkcu105.yml | 4 +- .../microblaze_fpga/bspkcu105_qemu.yml | 4 +- .../bsps/microblaze/microblaze_fpga/grp.yml | 3 + spec/build/bsps/mips/grp.yml | 3 + spec/build/bsps/optbspoptflags.yml | 18 +++ spec/build/bsps/optcflags.yml | 17 +++ spec/build/bsps/optcpukitoptflags.yml | 18 +++ spec/build/bsps/optincludes.yml | 1 + spec/build/bsps/opto0.yml | 4 +- spec/build/bsps/opto1.yml | 4 +- spec/build/bsps/opto2.yml | 4 +- spec/build/bsps/optog.yml | 4 +- spec/build/bsps/optos.yml | 4 +- spec/build/bsps/opttestoptflags.yml | 18 +++ spec/build/bsps/or1k/grp.yml | 3 + spec/build/bsps/powerpc/gen5200/grp.yml | 3 + spec/build/bsps/powerpc/gen83xx/grp.yml | 3 + spec/build/bsps/powerpc/grp.yml | 3 + .../bsps/powerpc/motorola_powerpc/grp.yml | 3 + spec/build/bsps/powerpc/mpc55xxevb/grp.yml | 3 + spec/build/bsps/powerpc/qoriq/grp.yml | 3 + spec/build/bsps/powerpc/tqm8xx/grp.yml | 3 + spec/build/bsps/riscv/griscv/grp.yml | 3 + spec/build/bsps/riscv/grp.yml | 3 + spec/build/bsps/riscv/riscv/grp.yml | 3 + spec/build/bsps/sh/shsim/grp.yml | 3 + spec/build/bsps/sparc/grp.yml | 3 + spec/build/bsps/sparc/leon2/grp.yml | 3 + spec/build/bsps/sparc/leon3/grp.yml | 3 + spec/build/bsps/sparc64/grp.yml | 3 + spec/build/bsps/v850/gdbv850sim/grp.yml | 3 + spec/build/bsps/x86_64/grp.yml | 3 + spec/build/cpukit/cpuopts.yml | 10 ++ spec/build/cpukit/grp.yml | 7 + spec/build/cpukit/librtemscpu.yml | 4 + spec/build/cpukit/librtemstest.yml | 3 + spec/build/cpukit/optcoverage.yml | 16 +++ spec/build/cpukit/optcoveragecflags.yml | 20 +++ spec/build/cpukit/optcoverageldflags.yml | 25 ++++ spec/build/cpukit/optnocoveragecflags.yml | 18 +++ spec/build/cpukit/optnocoverageldflags.yml | 18 +++ spec/build/grp.yml | 3 + spec/build/testsuites/ada/grp.yml | 3 + spec/build/testsuites/benchmarks/grp.yml | 3 + spec/build/testsuites/fstests/grp.yml | 3 + spec/build/testsuites/grp.yml | 8 +- spec/build/testsuites/libtests/grp.yml | 3 + spec/build/testsuites/mptests/grp.yml | 3 + spec/build/testsuites/psxtests/grp.yml | 3 + spec/build/testsuites/psxtmtests/grp.yml | 3 + spec/build/testsuites/rhealstone/grp.yml | 3 + spec/build/testsuites/samples/grp.yml | 3 + spec/build/testsuites/smptests/grp.yml | 3 + spec/build/testsuites/sptests/grp.yml | 3 + spec/build/testsuites/tmtests/grp.yml | 3 + spec/build/testsuites/unit/grp.yml | 3 + spec/build/testsuites/validation/grp.yml | 3 + testsuites/libtests/crypt01/init.c | 6 +- testsuites/samples/minimum/init.c | 5 + testsuites/validation/tc-terminate.c | 5 +- testsuites/validation/ts-config.h | 2 +- wscript | 120 +++++++++++++----- 168 files changed, 1241 insertions(+), 182 deletions(-) create mode 100644 cpukit/include/rtems/score/gcov.h create mode 100644 cpukit/libcsupport/src/gcovfork.c create mode 100644 cpukit/libtest/testgcovbspreset.c create mode 100644 cpukit/libtest/testgcovcpufatalhalt.c create mode 100644 cpukit/libtest/testgcovdumpinfo.c create mode 100644 cpukit/score/src/gcovinfoset.c create mode 100644 cpukit/score/src/iogcovdumpinfo.c create mode 100644 cpukit/score/src/iogcovdumpinfobase64.c create mode 100644 spec/build/bsps/optbspoptflags.yml create mode 100644 spec/build/bsps/optcflags.yml create mode 100644 spec/build/bsps/optcpukitoptflags.yml create mode 100644 spec/build/bsps/opttestoptflags.yml create mode 100644 spec/build/cpukit/optcoverage.yml create mode 100644 spec/build/cpukit/optcoveragecflags.yml create mode 100644 spec/build/cpukit/optcoverageldflags.yml create mode 100644 spec/build/cpukit/optnocoveragecflags.yml create mode 100644 spec/build/cpukit/optnocoverageldflags.yml -- 2.35.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel