Little compiler plugins rework regarding block location picked up.
MODIFY
gcc_plugin/afl-gcc-pass.so.cc
gcc_plugin/afl-gcc-pass.so.cc
@@ -490,7 +490,7 @@ int plugin_init(struct plugin_name_args * plugin_info,
/* Setup random() so we get Actually Random(TM) outputs from R() */
gettimeofday(&tv, &tz);
rand_seed = tv.tv_sec ^ tv.tv_usec ^ getpid();
- srandom(rand_seed);
+ SR(rand_seed);
/* Pass information */
afl_pass_info.pass = make_afl_pass(inst_ext, g);

MODIFY
include/types.h
include/types.h
@@ -79,9 +79,21 @@ typedef int64_t s64;
})
#ifdef AFL_LLVM_PASS
+#if defined(__linux__)
+#define AFL_SR(s) (srandom(s))
#define AFL_R(x) (random() % (x))
#else
+#define AFL_SR(s)
+#define AFL_R(x) (arc4random_uniform(x))
+#endif
+#else
+#if defined(__linux__)
+#define SR(s) (srandom(s))
#define R(x) (random() % (x))
+#else
+#define SR(s)
+#define R(x) (arc4random_uniform(x))
+#endif
#endif /* ^AFL_LLVM_PASS */
#define STRINGIFY_INTERNAL(x) #x

MODIFY
llvm_mode/afl-llvm-pass.so.cc
llvm_mode/afl-llvm-pass.so.cc
#include <list>
#include <string>
#include <fstream>
+#include <sys/time.h>
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/BasicBlock.h"
@@ -95,8 +96,16 @@ bool AFLCoverage::runOnModule(Module &M) {
IntegerType *Int8Ty = IntegerType::getInt8Ty(C);
IntegerType *Int32Ty = IntegerType::getInt32Ty(C);
+ struct timeval tv;
+ struct timezone tz;
+ u32 rand_seed;
unsigned int cur_loc = 0;
+ /* Setup random() so we get Actually Random(TM) outputs from AFL_R() */
+ gettimeofday(&tv, &tz);
+ rand_seed = tv.tv_sec ^ tv.tv_usec ^ getpid();
+ AFL_SR(rand_seed);
+
/* Show a banner */
char be_quiet = 0;

Little compiler plugins rework regarding block location picked up.