diff options
author | Mauro Carvalho Chehab <mchehab@kernel.org> | 2022-03-16 15:59:57 +0100 |
---|---|---|
committer | Petri Latvala <petri.latvala@intel.com> | 2022-03-21 18:34:59 +0200 |
commit | 4c6eab51e1078f273ed6e53d8490166089592392 (patch) | |
tree | 71206f27d5a83584b0264896c018edc9c962047a | |
parent | 16cf1cc3ef953159116f6818ae99be3e591e7557 (diff) |
scripts/code_cov_gather*/sh: add help scripts for code coverage
When a Linux Kernel is built with gcov support, the compiler creates
some other object files (*.gcno) that are dependent of the compiler
version, and contain references to the source files.
At Kernel runtime at the test machine, counter files will be visible at
sysfs (*.gcda files), which are also on a compiler specific format.
In order to be able to properly parse the contents of the counters, the
information from 3 different places should be merged altogether:
- Runtime counters: /sys/.../*.gcda and hiperlinks to *.gcno
- Compile-time cross-reference object files: *.gcno
- Kernel source code.
If the build machine is different than the source machine, some special
scripts are needed in order to either copy the source files to the
runtime machine or vice versa.
This is described at:
https://www.kernel.org/doc/html/latest/dev-tools/gcov.html
Copy the two scripts described there as-is.
Further patches will modify them as needed.
Acked-by: Petri Latvala <petri.latvala@intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
-rwxr-xr-x | scripts/code_cov_gather_on_build.sh | 23 | ||||
-rwxr-xr-x | scripts/code_cov_gather_on_test.sh | 20 |
2 files changed, 43 insertions, 0 deletions
diff --git a/scripts/code_cov_gather_on_build.sh b/scripts/code_cov_gather_on_build.sh new file mode 100755 index 00000000..99c436f7 --- /dev/null +++ b/scripts/code_cov_gather_on_build.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +KSRC=$1 +KOBJ=$2 +DEST=$3 + +if [ -z "$KSRC" ] || [ -z "$KOBJ" ] || [ -z "$DEST" ]; then + echo "Usage: $0 <ksrc directory> <kobj directory> <output.tar.gz>" >&2 + exit 1 +fi + +KSRC=$(cd $KSRC; printf "all:\n\t@echo \${CURDIR}\n" | make -f -) +KOBJ=$(cd $KOBJ; printf "all:\n\t@echo \${CURDIR}\n" | make -f -) + +find $KSRC $KOBJ \( -name '*.gcno' -o -name '*.[ch]' -o -type l \) -a \ + -perm /u+r,g+r | tar cfz $DEST -P -T - + +if [ $? -eq 0 ] ; then + echo "$DEST successfully created, copy to test system and unpack with:" + echo " tar xfz $DEST -P" +else + echo "Could not create file $DEST" +fi diff --git a/scripts/code_cov_gather_on_test.sh b/scripts/code_cov_gather_on_test.sh new file mode 100755 index 00000000..8834aa0d --- /dev/null +++ b/scripts/code_cov_gather_on_test.sh @@ -0,0 +1,20 @@ +#!/bin/bash -e + +DEST=$1 +GCDA=/sys/kernel/debug/gcov + +if [ -z "$DEST" ] ; then + echo "Usage: $0 <output.tar.gz>" >&2 + exit 1 +fi + +TEMPDIR=$(mktemp -d) +echo Collecting data.. +find $GCDA -type d -exec mkdir -p $TEMPDIR/\{\} \; +find $GCDA -name '*.gcda' -exec sh -c 'cat < $0 > '$TEMPDIR'/$0' {} \; +find $GCDA -name '*.gcno' -exec sh -c 'cp -d $0 '$TEMPDIR'/$0' {} \; +tar czf $DEST -C $TEMPDIR sys +rm -rf $TEMPDIR + +echo "$DEST successfully created, copy to build system and unpack with:" +echo " tar xfz $DEST" |