[PATCH] D50411: [libFuzzer] Optimize handle unstable checks by reducing iterations
Max Moroz via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 8 07:33:27 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rCRT339249: [libFuzzer] Optimize handle unstable checks by reducing iterations (authored by Dor1s, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D50411?vs=159708&id=159718#toc
Repository:
rCRT Compiler Runtime
https://reviews.llvm.org/D50411
Files:
lib/fuzzer/FuzzerLoop.cpp
lib/fuzzer/FuzzerTracePC.cpp
lib/fuzzer/FuzzerTracePC.h
Index: lib/fuzzer/FuzzerTracePC.cpp
===================================================================
--- lib/fuzzer/FuzzerTracePC.cpp
+++ lib/fuzzer/FuzzerTracePC.cpp
@@ -81,23 +81,33 @@
// Compares the current counters with counters from previous runs
// and records differences as unstable edges.
-void TracePC::UpdateUnstableCounters(int UnstableMode) {
+bool TracePC::UpdateUnstableCounters(int UnstableMode) {
+ bool Updated = false;
IterateInline8bitCounters([&](int i, int j, int UnstableIdx) {
if (ModuleCounters[i].Start[j] != UnstableCounters[UnstableIdx].Counter) {
+ Updated = true;
UnstableCounters[UnstableIdx].IsUnstable = true;
if (UnstableMode == ZeroUnstable)
UnstableCounters[UnstableIdx].Counter = 0;
else if (UnstableMode == MinUnstable)
UnstableCounters[UnstableIdx].Counter = std::min(
ModuleCounters[i].Start[j], UnstableCounters[UnstableIdx].Counter);
}
});
+ return Updated;
}
-// Moves the minimum hit counts to ModuleCounters.
-void TracePC::ApplyUnstableCounters() {
+// Updates and applies unstable counters to ModuleCounters in single iteration
+void TracePC::UpdateAndApplyUnstableCounters(int UnstableMode) {
IterateInline8bitCounters([&](int i, int j, int UnstableIdx) {
- ModuleCounters[i].Start[j] = UnstableCounters[UnstableIdx].Counter;
+ if (ModuleCounters[i].Start[j] != UnstableCounters[UnstableIdx].Counter) {
+ UnstableCounters[UnstableIdx].IsUnstable = true;
+ if (UnstableMode == ZeroUnstable)
+ ModuleCounters[i].Start[j] = 0;
+ else if (UnstableMode == MinUnstable)
+ ModuleCounters[i].Start[j] = std::min(
+ ModuleCounters[i].Start[j], UnstableCounters[UnstableIdx].Counter);
+ }
});
}
Index: lib/fuzzer/FuzzerTracePC.h
===================================================================
--- lib/fuzzer/FuzzerTracePC.h
+++ lib/fuzzer/FuzzerTracePC.h
@@ -143,8 +143,8 @@
bool ObservedFocusFunction();
void InitializeUnstableCounters();
- void UpdateUnstableCounters(int UnstableMode);
- void ApplyUnstableCounters();
+ bool UpdateUnstableCounters(int UnstableMode);
+ void UpdateAndApplyUnstableCounters(int UnstableMode);
private:
struct UnstableEdge {
Index: lib/fuzzer/FuzzerLoop.cpp
===================================================================
--- lib/fuzzer/FuzzerLoop.cpp
+++ lib/fuzzer/FuzzerLoop.cpp
@@ -466,16 +466,11 @@
// First Rerun
CBSetupAndRun();
- TPC.UpdateUnstableCounters(Options.HandleUnstable);
-
- // Second Rerun
- CBSetupAndRun();
- TPC.UpdateUnstableCounters(Options.HandleUnstable);
-
- // Move minimum hit counts back to ModuleInline8bitCounters
- if (Options.HandleUnstable == TracePC::MinUnstable ||
- Options.HandleUnstable == TracePC::ZeroUnstable)
- TPC.ApplyUnstableCounters();
+ if (TPC.UpdateUnstableCounters(Options.HandleUnstable)) {
+ // Second Rerun
+ CBSetupAndRun();
+ TPC.UpdateAndApplyUnstableCounters(Options.HandleUnstable);
+ }
}
bool Fuzzer::RunOne(const uint8_t *Data, size_t Size, bool MayDeleteFile,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50411.159718.patch
Type: text/x-patch
Size: 3102 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180808/5dd76efd/attachment.bin>
More information about the llvm-commits
mailing list