| set -e | |
| fuzzer="$1" | |
| if [ -z "$fuzzer" ]; then | |
| echo usage: $0 fuzzer | |
| exit 1 | |
| fi | |
| # Rebuild the project with coverage enabled | |
| make distclean | |
| export CC=clang | |
| export CXX=clang++ | |
| export CFLAGS=" \ | |
| -O1 -gline-tables-only \ | |
| -fsanitize=fuzzer-no-link \ | |
| -fprofile-instr-generate -fcoverage-mapping \ | |
| -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" | |
| sh autogen.sh --without-python | |
| make -j5 | |
| rm default.profraw | |
| # Process corpus once | |
| cd fuzz | |
| make $fuzzer | |
| ./$fuzzer -runs=1 corpus/$fuzzer | |
| # Generate HTML report | |
| llvm-profdata merge default.profraw -o default.profdata | |
| llvm-cov show -format=html -output-dir=report \ | |
| -instr-profile default.profdata \ | |
| ../.libs/libxml2.so | |
| rm default.profraw default.profdata | |