aboutsummaryrefslogtreecommitdiff
path: root/llvm_mode
diff options
context:
space:
mode:
Diffstat (limited to 'llvm_mode')
-rw-r--r--llvm_mode/afl-clang-fast.c16
-rw-r--r--llvm_mode/afl-llvm-lto-instrumentation.so.cc34
2 files changed, 37 insertions, 13 deletions
diff --git a/llvm_mode/afl-clang-fast.c b/llvm_mode/afl-clang-fast.c
index 738433ac..ef99e3f3 100644
--- a/llvm_mode/afl-clang-fast.c
+++ b/llvm_mode/afl-clang-fast.c
@@ -255,12 +255,6 @@ static void edit_params(u32 argc, char **argv, char **envp) {
if (getenv("LAF_TRANSFORM_COMPARES") ||
getenv("AFL_LLVM_LAF_TRANSFORM_COMPARES")) {
- if (!be_quiet && getenv("AFL_LLVM_LTO_AUTODICTIONARY") && lto_mode)
- WARNF(
- "using AFL_LLVM_LAF_TRANSFORM_COMPARES together with "
- "AFL_LLVM_LTO_AUTODICTIONARY makes no sense. Use only "
- "AFL_LLVM_LTO_AUTODICTIONARY.");
-
cc_params[cc_par_cnt++] = "-Xclang";
cc_params[cc_par_cnt++] = "-load";
cc_params[cc_par_cnt++] = "-Xclang";
@@ -311,6 +305,11 @@ static void edit_params(u32 argc, char **argv, char **envp) {
if (lto_mode) {
+ if (cmplog_mode)
+ unsetenv("AFL_LLVM_LTO_AUTODICTIONARY");
+ else
+ setenv("AFL_LLVM_LTO_AUTODICTIONARY", "1", 1);
+
cc_params[cc_par_cnt++] = alloc_printf("-fuse-ld=%s", AFL_REAL_LD);
cc_params[cc_par_cnt++] = "-Wl,--allow-multiple-definition";
/*
@@ -398,6 +397,7 @@ static void edit_params(u32 argc, char **argv, char **envp) {
continue;
if (lto_mode && !strncmp(cur, "-fuse-ld=", 9)) continue;
+ if (lto_mode && !strncmp(cur, "--ld-path=", 10)) continue;
cc_params[cc_par_cnt++] = cur;
@@ -472,9 +472,7 @@ static void edit_params(u32 argc, char **argv, char **envp) {
}
if (getenv("AFL_NO_BUILTIN") || getenv("AFL_LLVM_LAF_TRANSFORM_COMPARES") ||
- getenv("LAF_TRANSFORM_COMPARES") ||
- (lto_mode && (getenv("AFL_LLVM_LTO_AUTODICTIONARY") ||
- getenv("AFL_LLVM_AUTODICTIONARY")))) {
+ getenv("LAF_TRANSFORM_COMPARES") || lto_mode) {
cc_params[cc_par_cnt++] = "-fno-builtin-strcmp";
cc_params[cc_par_cnt++] = "-fno-builtin-strncmp";
diff --git a/llvm_mode/afl-llvm-lto-instrumentation.so.cc b/llvm_mode/afl-llvm-lto-instrumentation.so.cc
index 5686eb56..38c3f202 100644
--- a/llvm_mode/afl-llvm-lto-instrumentation.so.cc
+++ b/llvm_mode/afl-llvm-lto-instrumentation.so.cc
@@ -86,7 +86,7 @@ class AFLLTOPass : public ModulePass {
bool runOnModule(Module &M) override;
protected:
- int afl_global_id = 1, autodictionary = 1;
+ int afl_global_id = 1, autodictionary = 0;
uint32_t function_minimum_size = 1;
uint32_t inst_blocks = 0, inst_funcs = 0, total_instr = 0;
uint64_t map_addr = 0x10000;
@@ -105,6 +105,11 @@ bool AFLLTOPass::runOnModule(Module &M) {
char * ptr;
FILE * documentFile = NULL;
+ srand((unsigned int)time(NULL));
+
+ unsigned long long int moduleID =
+ (((unsigned long long int)(rand() & 0xffffffff)) << 32) | getpid();
+
IntegerType *Int8Ty = IntegerType::getInt8Ty(C);
IntegerType *Int32Ty = IntegerType::getInt32Ty(C);
IntegerType *Int64Ty = IntegerType::getInt64Ty(C);
@@ -128,6 +133,8 @@ bool AFLLTOPass::runOnModule(Module &M) {
}
+ if (getenv("AFL_LLVM_LTO_AUTODICTIONARY")) autodictionary = 1;
+
if (getenv("AFL_LLVM_MAP_DYNAMIC")) map_addr = 0;
if (getenv("AFL_LLVM_SKIPSINGLEBLOCK")) function_minimum_size = 2;
@@ -189,13 +196,32 @@ bool AFLLTOPass::runOnModule(Module &M) {
ConstantInt *Zero = ConstantInt::get(Int8Ty, 0);
ConstantInt *One = ConstantInt::get(Int8Ty, 1);
+ /* This dumps all inialized global strings - might be useful in the future
+ for (auto G=M.getGlobalList().begin(); G!=M.getGlobalList().end(); G++) {
+
+ GlobalVariable &GV=*G;
+ if (!GV.getName().str().empty()) {
+
+ fprintf(stderr, "Global Variable: %s", GV.getName().str().c_str());
+ if (GV.hasInitializer())
+ if (auto *Val = dyn_cast<ConstantDataArray>(GV.getInitializer()))
+ fprintf(stderr, " Value: \"%s\"", Val->getAsString().str().c_str());
+ fprintf(stderr, "\n");
+
+ }
+
+ }
+
+ */
+
/* Instrument all the things! */
int inst_blocks = 0;
for (auto &F : M) {
- // fprintf(stderr, "DEBUG: Function %s\n", F.getName().str().c_str());
+ // fprintf(stderr, "DEBUG: Module %s Function %s\n",
+ // M.getName().str().c_str(), F.getName().str().c_str());
if (F.size() < function_minimum_size) continue;
if (isIgnoreFunction(&F)) continue;
@@ -603,8 +629,8 @@ bool AFLLTOPass::runOnModule(Module &M) {
if (documentFile) {
- fprintf(documentFile, "%s %u\n", F.getName().str().c_str(),
- afl_global_id);
+ fprintf(documentFile, "ModuleID=%llu Function=%s edgeID=%u\n",
+ moduleID, F.getName().str().c_str(), afl_global_id);
}