calculate correct collisions for classic in InsTrimLTO
MODIFY
GNUmakefile
GNUmakefile
@@ -204,7 +204,7 @@ ifdef ASAN_BUILD
endif
ifdef PROFILING
- $(info Compiling profiling version of binaries)
+ $(info Compiling with profiling information, for analysis: gprof ./afl-fuzz gmon.out > prof.txt)
CFLAGS+=-pg
LDFLAGS+=-pg
endif

MODIFY
llvm_mode/afl-llvm-lto-instrim.so.cc
llvm_mode/afl-llvm-lto-instrim.so.cc
@@ -855,6 +855,33 @@ struct InsTrimLTO : public ModulePass {
}
+ // count basic blocks for comparison with classic instrumentation
+
+ u32 edges = 0;
+ for (auto &F : M) {
+
+ if (F.size() < function_minimum_size) continue;
+
+ for (auto &BB : F) {
+
+ bool would_instrument = false;
+
+ for (BasicBlock *Pred : predecessors(&BB)) {
+
+ int count = 0;
+ for (BasicBlock *Succ : successors(Pred))
+ if (Succ != NULL) count++;
+
+ if (count > 1) return true;
+
+ }
+
+ if (would_instrument == true) edges++;
+
+ }
+
+ }
+
/* Say something nice. */
if (!be_quiet) {
@@ -871,9 +898,9 @@ struct InsTrimLTO : public ModulePass {
getenv("AFL_USE_CFISAN") ? ", CFISAN" : "",
getenv("AFL_USE_UBSAN") ? ", UBSAN" : "");
OKF("Instrumented %u locations (%llu, %llu) with no collisions (on "
- "average %llu "
- "collisions would be in afl-gcc/afl-clang-fast) (%s mode).",
- inst_blocks, total_rs, total_hs, calculateCollisions(inst_blocks),
+ "average %llu collisions would be in afl-gcc/afl-clang-fast for %u "
+ "edges) (%s mode).",
+ inst_blocks, total_rs, total_hs, calculateCollisions(edges), edges,
modeline);
}

calculate correct collisions for classic in InsTrimLTO