about summary refs log tree commit diff
path: root/docs
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@adacore.com>2020-09-07 12:35:31 -0300
committerPaul Butcher <butcher@adacore.com>2020-09-08 14:55:19 +0200
commit9544b3dbf22f1007f7d3f77593ec746a0345a587 (patch)
treed8fe0fe7e79dd5458d393de4df1fd0bfa62b9888 /docs
parent43cb626ad3d36024529ddc459032e664282f3cab (diff)
downloadafl++-9544b3dbf22f1007f7d3f77593ec746a0345a587.tar.gz
rewrite gcc plugin
When we started using AFL, it did not have an integrated GCC plugin.
There was one proposed by Austin Seipp, but for various reasons we
ended up using some of its infrastructure (runtime and wrapper), but
writing the GCC plugin proper from scratch.

With AFL++'s renewed interest in a GCC plugin, we rebased ours, with
some features that are or were missing in the one that was integrated:

* efficient, fully-functional inline and out-of-line instrumentation

Inline instrumentation was work in progress in the original plugin.
Controlled by AFL_GCC_OUT_OF_LINE.

* reproducible instrumentation

Obey -frandom-seed for pseudorandom number generation.

* licensing clarity and strict compliance

GPLv3+ for the plugin, that uses GCC internals; add a copy of the
license, as required.

* allow/deny list support

Copied and adjusted from the LLVM plugin implementation.

* neverZero support

Not as compact as the asm-wrapper version, but likely more efficient.
Both are quite thread-unsafe, with different caveats.
Controlled with AFL_GCC_SKIP_NEVERZERO.
Diffstat (limited to 'docs')
-rw-r--r--docs/INSTALL.md5
1 files changed, 4 insertions, 1 deletions
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
index fb7b5642..93a46caf 100644
--- a/docs/INSTALL.md
+++ b/docs/INSTALL.md
@@ -28,6 +28,8 @@ If you are using clang, please review README.llvm.md; the LLVM
 integration mode can offer substantial performance gains compared to the
 traditional approach.
 
+Likewise, if you are using GCC, please review gcc_plugin/README.md.
+
 You may have to change several settings to get optimal results (most notably,
 disable crash reporting utilities and switch to a different CPU governor), but
 afl-fuzz will guide you through that if necessary.
@@ -157,7 +159,8 @@ instrumentation mode (`-Q`) will not work.
 ## 6. Everything else
 
 You're on your own. On POSIX-compliant systems, you may be able to compile and
-run the fuzzer; and the LLVM mode may offer a way to instrument non-x86 code.
+run the fuzzer; and the LLVM and GCC plugin modes may offer a way to instrument
+non-x86 code.
 
 The fuzzer will run on Windows in WSL only. It will not work under Cygwin on in the normal Windows world. It
 could be ported to the latter platform fairly easily, but it's a pretty bad