[libFuzzer] extend -print_coverage to also print uncovered lines, functions, and...
authorKostya Serebryany <kcc@google.com>
Wed, 19 Oct 2016 00:12:03 +0000 (00:12 +0000)
committerKostya Serebryany <kcc@google.com>
Wed, 19 Oct 2016 00:12:03 +0000 (00:12 +0000)
commit95b1a434d2d2bc03ea6f8470a98189f8429c9720
tree3283d29b1c79349074e0a09a994a18c78470e7ad
parentd3fd70dedd75f9b27f7198840a1ada82d54b95ab
[libFuzzer] extend -print_coverage to also print uncovered lines, functions, and files.

Example of output:
COVERAGE:
COVERED: in DSO2(int) /pathto/DSO2.cpp:6
COVERED: in DSO2(int) /pathto/DSO2.cpp:8
COVERED: in DSO1(int) /pathto/DSO1.cpp:6
COVERED: in DSO1(int) /pathto/DSO1.cpp:8
COVERED: in LLVMFuzzerTestOneInput /pathto/DSOTestMain.cpp:16
COVERED: in LLVMFuzzerTestOneInput /pathto/DSOTestMain.cpp:19
COVERED: in LLVMFuzzerTestOneInput /pathto/DSOTestMain.cpp:25
COVERED: in LLVMFuzzerTestOneInput /pathto/DSOTestMain.cpp:26
MODULE_WITH_COVERAGE: /pathto/libLLVMFuzzer-DSO1.so
UNCOVERED_LINE: in DSO1(int) /pathto/DSO1.cpp:9
UNCOVERED_FUNC: in Uncovered1()
MODULE_WITH_COVERAGE: /pathto/libLLVMFuzzer-DSO2.so
UNCOVERED_LINE: in DSO2(int) /pathto/DSO2.cpp:9
UNCOVERED_FUNC: in Uncovered2()
MODULE_WITH_COVERAGE: /pathto/LLVMFuzzer-DSOTest
UNCOVERED_LINE: in LLVMFuzzerTestOneInput /pathto/DSOTestMain.cpp:21
UNCOVERED_LINE: in LLVMFuzzerTestOneInput /pathto/DSOTestMain.cpp:27
UNCOVERED_FILE: /pathto/DSOTestExtra.cpp

Several things are not perfect here:
* we are using objdump+awk instead of sancov because sancov does not support DSOs yet.
* this breaks in the presence of ASAN_OPTIONS=strip_path_prefix=...
  (need to implement another API to get the module name by PC)

llvm-svn: 284554
llvm/lib/Fuzzer/FuzzerDefs.h
llvm/lib/Fuzzer/FuzzerTracePC.cpp
llvm/lib/Fuzzer/FuzzerUtil.cpp
llvm/lib/Fuzzer/test/DSO1.cpp
llvm/lib/Fuzzer/test/DSO2.cpp
llvm/lib/Fuzzer/test/DSOTestMain.cpp
llvm/lib/Fuzzer/test/coverage.test