[Toybox] generating toybox test coverage data

enh enh at google.com
Tue Jun 16 15:41:23 PDT 2020

TL;DR: the current state of test coverage looks like:

function:  59.85% (468/782)
line:  56.17% (12111/21560)
region:  53.61% (11280/21039)

but in case anyone's interested in actually reproducing my results:

cd /tmp
git clone https://github.com/landley/toybox.git toybox-coverage
cd toybox-coverage
export CC=clang
export CFLAGS="-fprofile-instr-generate -fcoverage-mapping"
export LDFLAGS="-fprofile-instr-generate -fcoverage-mapping"

apply this patch because atexit() doesn't work in toybox:

diff --git a/lib/xwrap.c b/lib/xwrap.c
index c09923ba..3ee3ca89 100644
--- a/lib/xwrap.c
+++ b/lib/xwrap.c
@@ -39,6 +39,7 @@ void _xexit(void)
   if (toys.rebound) siglongjmp(*toys.rebound, 1);

+  __llvm_profile_write_file();

make defconfig
export LLVM_PROFILE_FILE="/tmp/coverage/%p"
TEST_ALL=1 make tests
llvm-profdata-9 merge -sparse /tmp/coverage/* -o toybox.profdata
llvm-cov-9 show ./toybox -instr-profile=toybox.profdata
-show-instantiations=false -format html -output-dir=html-coverage
google-chrome ./html-coverage/index.html

More information about the Toybox mailing list