mirror of
https://github.com/RPCS3/llvm.git
synced 2025-05-22 21:35:57 +00:00

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) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284554 91177308-0d34-0410-b5e6-96231b3b80d8
32 lines
809 B
C++
32 lines
809 B
C++
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
|
|
// Source code for a simple DSO.
|
|
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <cstdio>
|
|
extern int DSO1(int a);
|
|
extern int DSO2(int a);
|
|
extern int DSOTestExtra(int a);
|
|
|
|
static volatile int *nil = 0;
|
|
|
|
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
|
|
int x, y, z;
|
|
if (Size < sizeof(int) * 3) {
|
|
x = y = z = 0;
|
|
} else {
|
|
memcpy(&x, Data + 0 * sizeof(int), sizeof(int));
|
|
memcpy(&y, Data + 1 * sizeof(int), sizeof(int));
|
|
memcpy(&z, Data + 2 * sizeof(int), sizeof(int));
|
|
}
|
|
int sum = DSO1(x) + DSO2(y) + (z ? DSOTestExtra(z) : 0);
|
|
if (sum == 3) {
|
|
fprintf(stderr, "BINGO %d %d %d\n", x, y, z);
|
|
*nil = 0;
|
|
}
|
|
return 0;
|
|
}
|