aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristofer Jonsson <kristofer.jonsson@arm.com>2022-04-13 15:00:36 +0200
committerKristofer Jonsson <kristofer.jonsson@arm.com>2022-04-26 16:26:54 +0200
commit3a353a3f1df7a24d2437ee218a4f5bbb2146796c (patch)
treea7f097c338cc71c31647b1d875bf1c4c9c041eb5
parentfc49559b7800bd13652102b779adcdecccd520e3 (diff)
downloadethos-u-linux-driver-stack-3a353a3f1df7a24d2437ee218a4f5bbb2146796c.tar.gz
Coverage
Add scripts for gathering coverage data on target, and analyzing coverage info on host. Change-Id: I3bb2d0ec3757ce077638a8780779daa84cd48686
-rw-r--r--.gitignore2
-rwxr-xr-xtools/gcov/coverage_report.sh57
-rwxr-xr-xtools/gcov/gather_on_test.sh66
3 files changed, 125 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 156b7b3..5ac4dcf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@
#
/build
+*.gcda
+*.gcno
diff --git a/tools/gcov/coverage_report.sh b/tools/gcov/coverage_report.sh
new file mode 100755
index 0000000..5acbca2
--- /dev/null
+++ b/tools/gcov/coverage_report.sh
@@ -0,0 +1,57 @@
+#!/usr/bin/env bash
+
+#
+# Copyright (c) 2022 Arm Limited.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -o errexit
+set -o pipefail
+set -o errtrace
+
+GCDA=$1
+OUT_DIR=$2
+LDS_DIR="$(realpath "$(dirname "$(dirname "$(dirname "$0")")")")"
+
+usage() {
+ echo "Usage: $0 <gcov.tar.gz> <outdir>" >&2
+ exit 1
+}
+
+# Verify arguments to the script
+if [ ! -e "${GCDA}" ] || [ -z "${OUT_DIR}" ]
+then
+ usage
+fi
+
+# Recreate output directory
+if [ -d "${OUT_DIR}" ]
+then
+ rm -rf "${OUT_DIR}"
+fi
+
+mkdir "${OUT_DIR}"
+
+# Extract gcda files from the archive
+find "${LDS_DIR}/kernel" -name "*.gcda" -delete
+tar -C "${LDS_DIR}" -zxf "${GCDA}"
+
+# Analyze coverage and generate HTML report
+lcov -c -o "${OUT_DIR}/coverage.info" -d "${LDS_DIR}/kernel"
+lcov --rc lcov_branch_coverage=1 --remove "${OUT_DIR}/coverage.info" \
+ '*/kernel/arch/*' '*/kernel/include/*' \
+ > "${OUT_DIR}/coverage.filtered.info"
+genhtml -o "${OUT_DIR}" "${OUT_DIR}/coverage.filtered.info"
diff --git a/tools/gcov/gather_on_test.sh b/tools/gcov/gather_on_test.sh
new file mode 100755
index 0000000..348277e
--- /dev/null
+++ b/tools/gcov/gather_on_test.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+
+#
+# Copyright (c) 2022 Arm Limited.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -o errexit
+set -o pipefail
+set -o errtrace
+
+DEST=$1
+GCDA_DIR=/sys/kernel/debug/gcov
+TMP_DIR=
+
+usage() {
+ echo "Usage: $0 <output.tar.gz>" >&2
+ exit 1
+}
+
+cleanup() {
+ if [ -d "${TMP_DIR}" ]
+ then
+ rm -rf "${TMP_DIR}"
+ fi
+}
+
+trap cleanup EXIT
+
+if [ -z "${DEST}" ]
+then
+ usage
+fi
+
+# Find kernel directory
+readarray -t DRIVER_GCDA < <(find ${GCDA_DIR} -path '*/kernel/ethosu_driver.gcda')
+if [ ${#DRIVER_GCDA[*]} -le 0 ]
+then
+ echo "Error: Could not find Ethos-U kernel directory"
+ exit 1
+fi
+
+LDS_DIR=$(dirname "$(dirname "${DRIVER_GCDA[0]}")")
+DEST=$(realpath "${DEST}")
+TMP_DIR=$(mktemp -d)
+
+# Copy gcda objects to temporary directory
+cd "${LDS_DIR}"
+find . -name "*.gcda" -exec cp --parent {} "${TMP_DIR}" \;
+
+# Create tar.gz archive
+cd "${TMP_DIR}"
+find . -type f -print0 | xargs -0 tar -zcvf "${DEST}"