summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer/FuzzerTraceState.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2016-08-30 01:30:14 +0000
committerKostya Serebryany <kcc@google.com>2016-08-30 01:30:14 +0000
commit4d22e4fcb92cf1f3af8fe0246694fa572971fd22 (patch)
tree3fceef14bd7a0ea159241f337ab290d1cd029a50 /llvm/lib/Fuzzer/FuzzerTraceState.cpp
parentb3177cea0a1b03a03a372c1ba48f7300d80b82b2 (diff)
downloadbcm5719-llvm-4d22e4fcb92cf1f3af8fe0246694fa572971fd22.tar.gz
bcm5719-llvm-4d22e4fcb92cf1f3af8fe0246694fa572971fd22.zip
[libFuzzer] use trace-div and trace-gep for guided fuzzing, add tests
llvm-svn: 280046
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerTraceState.cpp')
-rw-r--r--llvm/lib/Fuzzer/FuzzerTraceState.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTraceState.cpp b/llvm/lib/Fuzzer/FuzzerTraceState.cpp
index f1307d7d3a2..7bbc7591fbd 100644
--- a/llvm/lib/Fuzzer/FuzzerTraceState.cpp
+++ b/llvm/lib/Fuzzer/FuzzerTraceState.cpp
@@ -584,6 +584,14 @@ static void AddValueForCmp(void *PCptr, uint64_t Arg1, uint64_t Arg2) {
VP.AddValue(Idx);
}
+static void AddValueForSingleVal(void *PCptr, uintptr_t Val) {
+ if (!Val) return;
+ uintptr_t PC = reinterpret_cast<uintptr_t>(PCptr);
+ uint64_t ArgDistance = __builtin_popcountl(Val) - 1; // [0,63]
+ uintptr_t Idx = (PC & 4095) | (ArgDistance << 12);
+ VP.AddValue(Idx);
+}
+
} // namespace fuzzer
using fuzzer::TS;
@@ -780,4 +788,17 @@ void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t *Cases) {
TS->TraceSwitchCallback(PC, Cases[1], Val, Cases[0], Cases + 2);
}
+__attribute__((visibility("default")))
+void __sanitizer_cov_trace_div4(uint32_t Val) {
+ fuzzer::AddValueForSingleVal(__builtin_return_address(0), Val);
+}
+__attribute__((visibility("default")))
+void __sanitizer_cov_trace_div8(uint64_t Val) {
+ fuzzer::AddValueForSingleVal(__builtin_return_address(0), Val);
+}
+__attribute__((visibility("default")))
+void __sanitizer_cov_trace_gep(uintptr_t Idx) {
+ fuzzer::AddValueForSingleVal(__builtin_return_address(0), Idx);
+}
+
} // extern "C"
OpenPOWER on IntegriCloud