test/fuzz: enable lcov for llvm-fuzzing
Lcov is disable for clang due to being time-consuming. This patch enabled it for fuzzer only. `llvm-gcov.sh` is a wrapper for llvm-cov Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com> Change-Id: I96ef6ad4fc4ecb92b063070fd2410ca88209f5b7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15356 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
a3ae6eaa75
commit
c5d0fac1b9
@ -14,9 +14,59 @@ llvm_out=$output_dir/llvm
|
||||
|
||||
mkdir -p $rootdir/../corpus/ $llvm_out
|
||||
|
||||
function lcov_start() {
|
||||
local out=$llvm_out
|
||||
local src=$rootdir
|
||||
|
||||
if hash lcov; then
|
||||
export LCOV_OPTS="
|
||||
--rc lcov_branch_coverage=1
|
||||
--rc lcov_function_coverage=1
|
||||
--rc genhtml_branch_coverage=1
|
||||
--rc genhtml_function_coverage=1
|
||||
--rc genhtml_legend=1
|
||||
--rc geninfo_all_blocks=1
|
||||
--gcov-tool $rootdir/test/fuzz/llvm/llvm-gcov.sh
|
||||
"
|
||||
export LCOV="lcov $LCOV_OPTS --no-external"
|
||||
|
||||
# Print lcov version to log
|
||||
$LCOV -v
|
||||
# zero out coverage data
|
||||
$LCOV -q -c -i -t "Baseline" -d $src -o $out/cov_base.info
|
||||
fi
|
||||
}
|
||||
|
||||
function lcov_stop() {
|
||||
local out=$llvm_out
|
||||
local src=$rootdir
|
||||
|
||||
if hash lcov; then
|
||||
# generate coverage data and combine with baseline
|
||||
$LCOV -q -c -d $src -t "$(hostname)" -o $out/cov_test.info
|
||||
$LCOV -q -a $out/cov_base.info -a $out/cov_test.info -o $out/cov_total.info
|
||||
$LCOV -q -r $out/cov_total.info '*/dpdk/*' -o $out/cov_total.info
|
||||
$LCOV -q -r $out/cov_total.info '/usr/*' -o $out/cov_total.info
|
||||
owner=$(stat -c "%U" .)
|
||||
sudo -u $owner git clean -f "*.gcda"
|
||||
rm -f cov_base.info cov_test.info OLD_STDOUT OLD_STDERR
|
||||
fi
|
||||
}
|
||||
|
||||
# Collect coverage data when run fuzzers for longer period of time
|
||||
# this allow to check coverage progression between runs, and grow of corpus files
|
||||
if [[ $SPDK_TEST_FUZZER -eq 1 || $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then
|
||||
lcov_start
|
||||
fi
|
||||
|
||||
for fuzzer in "${fuzzers[@]}"; do
|
||||
case "$fuzzer" in
|
||||
nvmf) run_test "nvmf_fuzz" "$testdir/llvm/$fuzzer/run.sh" ;;
|
||||
vfio) run_test "vfio_fuzz" "$testdir/llvm/$fuzzer/run.sh" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $SPDK_TEST_FUZZER -eq 1 || $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then
|
||||
lcov_stop
|
||||
genhtml $llvm_out/cov_total.info --output-directory $llvm_out
|
||||
fi
|
||||
|
6
test/fuzz/llvm/llvm-gcov.sh
Executable file
6
test/fuzz/llvm/llvm-gcov.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# All rights reserved.
|
||||
|
||||
# Wrapper for llvm gcov, --gcov-tool
|
||||
exec llvm-cov gcov "$@"
|
Loading…
Reference in New Issue
Block a user