From 3a353a3f1df7a24d2437ee218a4f5bbb2146796c Mon Sep 17 00:00:00 2001 From: Kristofer Jonsson Date: Wed, 13 Apr 2022 15:00:36 +0200 Subject: Coverage Add scripts for gathering coverage data on target, and analyzing coverage info on host. Change-Id: I3bb2d0ec3757ce077638a8780779daa84cd48686 --- tools/gcov/coverage_report.sh | 57 +++++++++++++++++++++++++++++++++++++ tools/gcov/gather_on_test.sh | 66 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100755 tools/gcov/coverage_report.sh create mode 100755 tools/gcov/gather_on_test.sh (limited to 'tools') 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 " >&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 " >&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}" -- cgit v1.2.1