[igt-dev] [PATCH v3 04/10] scripts/code_cov_gather*/sh: add help scripts for code coverage

Mauro Carvalho Chehab mauro.chehab at linux.intel.com
Wed Mar 16 14:59:57 UTC 2022


From: Mauro Carvalho Chehab <mchehab at kernel.org>

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 at intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
---
 scripts/code_cov_gather_on_build.sh | 23 +++++++++++++++++++++++
 scripts/code_cov_gather_on_test.sh  | 20 ++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100755 scripts/code_cov_gather_on_build.sh
 create mode 100755 scripts/code_cov_gather_on_test.sh

diff --git a/scripts/code_cov_gather_on_build.sh b/scripts/code_cov_gather_on_build.sh
new file mode 100755
index 000000000000..99c436f76fb8
--- /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 at echo \${CURDIR}\n" | make -f -)
+KOBJ=$(cd $KOBJ; printf "all:\n\t at 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 000000000000..8834aa0d78af
--- /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"
-- 
2.35.1



More information about the igt-dev mailing list