OK Thanks Chris
On 1/7/2022 9:49 pm, Sebastian Huber wrote: > 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 > _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel