summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@kernel.org>2022-03-16 15:59:57 +0100
committerPetri Latvala <petri.latvala@intel.com>2022-03-21 18:34:59 +0200
commit4c6eab51e1078f273ed6e53d8490166089592392 (patch)
tree71206f27d5a83584b0264896c018edc9c962047a /scripts
parent16cf1cc3ef953159116f6818ae99be3e591e7557 (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>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/code_cov_gather_on_build.sh23
-rwxr-xr-xscripts/code_cov_gather_on_test.sh20
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"