about summary refs log tree commit diff
path: root/llvm_mode/README.neverzero
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2019-07-14 20:02:20 +0200
committerGitHub <noreply@github.com>2019-07-14 20:02:20 +0200
commitda8e03e18a1d01cb4ea26fc8efb25c4e7708a0b5 (patch)
tree21e2f2e0bbe93341c3813d96576c5e83f62195d0 /llvm_mode/README.neverzero
parent5c0830f62857bc00d1da386e3d204932f544a6ba (diff)
parent4a80dbdd10aedd3a3e70a0631aeb4e01438b634c (diff)
downloadafl++-da8e03e18a1d01cb4ea26fc8efb25c4e7708a0b5.tar.gz
Merge branch 'master' into shared_memory_mmap_refactor
Diffstat (limited to 'llvm_mode/README.neverzero')
-rw-r--r--llvm_mode/README.neverzero22
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm_mode/README.neverzero b/llvm_mode/README.neverzero
new file mode 100644
index 00000000..ef873acb
--- /dev/null
+++ b/llvm_mode/README.neverzero
@@ -0,0 +1,22 @@
+Usage
+=====
+
+In larger, complex or reiterative programs the map that collects the edge pairs
+can easily fill up and wrap.
+This is not that much of an issue - unless by chance it wraps just to a 0
+when the program execution ends.
+In this case afl-fuzz is not able to see that the pair has been accessed and
+will ignore it.
+
+NeverZero prevents this behaviour. If a counter wraps, it jumps over the 0
+directly to a 1. This improves path discovery (by a very little amount)
+at a very little cost (one instruction per edge).
+
+This is implemented in afl-gcc, however for llvm_mode this is optional if
+the llvm version is below 9 - as there is a perfomance bug that is only fixed
+in version 9 and onwards.
+
+If you want to enable this for llvm < 9 then set
+
+export AFL_LLVM_NOT_ZERO=1
+