diff options
author | Kostya Serebryany <kcc@google.com> | 2018-05-24 01:43:48 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2018-05-24 01:43:48 +0000 |
commit | 4d53b744ca0e8f7efa43da5b43ed42120a3b32d9 (patch) | |
tree | 62e5c01f9634c7f301b784227c87ed2a1e434ba8 /compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp | |
parent | 49d7c2f597dea4a6398c43217660a2106496f5dc (diff) | |
download | bcm5719-llvm-4d53b744ca0e8f7efa43da5b43ed42120a3b32d9.tar.gz bcm5719-llvm-4d53b744ca0e8f7efa43da5b43ed42120a3b32d9.zip |
[libFuzzer] DataFlow tracer now tags a subset of the input. A separate script merges traces from the subsets
llvm-svn: 333149
Diffstat (limited to 'compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp')
-rw-r--r-- | compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp b/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp index c55c68ea9da..99863074d72 100644 --- a/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp +++ b/compiler-rt/lib/fuzzer/dataflow/DataFlow.cpp @@ -118,9 +118,12 @@ int main(int argc, char **argv) { LLVMFuzzerInitialize(&argc, &argv); if (argc == 1) return PrintFunctions(); - assert(argc == 2 || argc == 3); + assert(argc == 4 || argc == 5); + size_t Beg = atoi(argv[1]); + size_t End = atoi(argv[2]); + assert(Beg < End); - const char *Input = argv[1]; + const char *Input = argv[3]; fprintf(stderr, "INFO: reading '%s'\n", Input); FILE *In = fopen(Input, "r"); assert(In); @@ -137,7 +140,9 @@ int main(int argc, char **argv) { for (size_t I = 1; I <= InputLen; I++) { dfsan_label L = dfsan_create_label("", nullptr); assert(L == I); - dfsan_set_label(L, Buf + I - 1, 1); + size_t Idx = I - 1; + if (Idx >= Beg && Idx < End) + dfsan_set_label(L, Buf + Idx, 1); } dfsan_label SizeL = dfsan_create_label("", nullptr); assert(SizeL == InputLen + 1); @@ -146,10 +151,10 @@ int main(int argc, char **argv) { LLVMFuzzerTestOneInput(Buf, InputLen); free(Buf); - bool OutIsStdout = argc == 2; + bool OutIsStdout = argc == 4; fprintf(stderr, "INFO: writing dataflow to %s\n", - OutIsStdout ? "<stdout>" : argv[2]); - FILE *Out = OutIsStdout ? stdout : fopen(argv[2], "w"); + OutIsStdout ? "<stdout>" : argv[4]); + FILE *Out = OutIsStdout ? stdout : fopen(argv[4], "w"); PrintDataFlow(Out); if (!OutIsStdout) fclose(Out); } |