fix llvm12 -fuseld warning
diff --git a/include/afl-fuzz.h b/include/afl-fuzz.h
index 034e8de..ca7d10f 100644
--- a/include/afl-fuzz.h
+++ b/include/afl-fuzz.h
@@ -174,7 +174,7 @@
struct auto_extra_data {
- u8 data[MAX_AUTO_EXTRA]; /* Dictionary token data */
+ u8 data[MAX_AUTO_EXTRA]; /* Dictionary token data */
u32 len; /* Dictionary token length */
u32 hit_cnt; /* Use count in the corpus */
@@ -579,8 +579,9 @@
struct extra_data *extras; /* Extra tokens to fuzz with */
u32 extras_cnt; /* Total number of tokens read */
- struct auto_extra_data a_extras[MAX_AUTO_EXTRAS]; /* Automatically selected extras */
- u32 a_extras_cnt; /* Total number of tokens available */
+ struct auto_extra_data
+ a_extras[MAX_AUTO_EXTRAS]; /* Automatically selected extras */
+ u32 a_extras_cnt; /* Total number of tokens available */
/* afl_postprocess API - Now supported via custom mutators */
diff --git a/include/alloc-inl.h b/include/alloc-inl.h
index 0518a8c..306cc62 100644
--- a/include/alloc-inl.h
+++ b/include/alloc-inl.h
@@ -176,6 +176,7 @@
return (u8 *)memcpy(ret, str, size);
}
+
/* In non-debug mode, we just do straightforward aliasing of the above
functions to user-visible names such as ck_alloc(). */
diff --git a/llvm_mode/GNUmakefile b/llvm_mode/GNUmakefile
index 0fa9b12..57cd9f7 100644
--- a/llvm_mode/GNUmakefile
+++ b/llvm_mode/GNUmakefile
@@ -206,6 +206,10 @@
ifeq "$(LLVM_LTO)" "1"
ifeq "$(shell echo 'int main() {return 0; }' | $(CLANG_BIN) -x c - -fuse-ld=`command -v ld` -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
AFL_CLANG_FUSELD=1
+ $(info echo 'int main() {return 0; }' | $(CLANG_BIN) -x c - -fuse-ld=ld.lld --ld-path=$(LLVM_BINDIR)/ld.lld -o .test )
+ ifeq "$(shell echo 'int main() {return 0; }' | $(CLANG_BIN) -x c - -fuse-ld=ld.lld --ld-path=$(LLVM_BINDIR)/ld.lld -o .test 2>/dev/null && echo 1 || echo 0 ; rm -f .test )" "1"
+ AFL_CLANG_LDPATH=1
+ endif
else
$(warn -fuse-ld is not working, cannot enable LTO mode)
LLVM_LTO = 0
@@ -218,7 +222,9 @@
-DLLVM_BINDIR=\"$(LLVM_BINDIR)\" -DVERSION=\"$(VERSION)\" \
-DLLVM_LIBDIR=\"$(LLVM_LIBDIR)\" -DLLVM_VERSION=\"$(LLVMVER)\" \
-DAFL_CLANG_FLTO=\"$(AFL_CLANG_FLTO)\" \
- -DAFL_REAL_LD=\"$(AFL_REAL_LD)\" -DAFL_CLANG_FUSELD=\"$(AFL_CLANG_FUSELD)\" \
+ -DAFL_REAL_LD=\"$(AFL_REAL_LD)\" \
+ -DAFL_CLANG_LDPATH=\"$(AFL_CLANG_LDPATH)\" \
+ -DAFL_CLANG_FUSELD=\"$(AFL_CLANG_FUSELD)\" \
-DCLANG_BIN=\"$(CLANG_BIN)\" -DCLANGPP_BIN=\"$(CLANGPP_BIN)\" -DUSE_BINDIR=$(USE_BINDIR) -Wno-unused-function
override CFLAGS += $(CFLAGS_SAFE)
diff --git a/llvm_mode/afl-clang-fast.c b/llvm_mode/afl-clang-fast.c
index 37af0df..6e8e4a1 100644
--- a/llvm_mode/afl-clang-fast.c
+++ b/llvm_mode/afl-clang-fast.c
@@ -352,7 +352,15 @@
else
setenv("AFL_LLVM_LTO_AUTODICTIONARY", "1", 1);
+#ifdef AFL_CLANG_LDPATH
+ u8 *ld_ptr = strrchr(AFL_REAL_LD, '/');
+ if (!ld_ptr) ld_ptr = "ld.lld";
+ cc_params[cc_par_cnt++] = alloc_printf("-fuse-ld=%s", ld_ptr);
+ cc_params[cc_par_cnt++] = alloc_printf("--ld-path=%s", AFL_REAL_LD);
+#else
cc_params[cc_par_cnt++] = alloc_printf("-fuse-ld=%s", AFL_REAL_LD);
+#endif
+
cc_params[cc_par_cnt++] = "-Wl,--allow-multiple-definition";
/*
@@ -1013,6 +1021,8 @@
"\nafl-clang-lto specific environment variables:\n"
"AFL_LLVM_MAP_ADDR: use a fixed coverage map address (speed), e.g. "
"0x10000\n"
+ "AFL_LLVM_DOCUMENT_IDS: write all edge IDs and the corresponding "
+ "functions they are in into this file\n"
"AFL_LLVM_LTO_DONTWRITEID: don't write the highest ID used to a "
"global var\n"
"AFL_LLVM_LTO_STARTID: from which ID to start counting from for a "
diff --git a/src/afl-fuzz-extras.c b/src/afl-fuzz-extras.c
index 94f5039..17f0298 100644
--- a/src/afl-fuzz-extras.c
+++ b/src/afl-fuzz-extras.c
@@ -28,7 +28,8 @@
/* helper function for auto_extras qsort */
static int compare_auto_extras_len(const void *ae1, const void *ae2) {
- return ((struct auto_extra_data *)ae1)->len - ((struct auto_extra_data *)ae2)->len;
+ return ((struct auto_extra_data *)ae1)->len -
+ ((struct auto_extra_data *)ae2)->len;
}
@@ -36,7 +37,8 @@
static int compare_auto_extras_use_d(const void *ae1, const void *ae2) {
- return ((struct auto_extra_data *)ae2)->hit_cnt - ((struct auto_extra_data *)ae1)->hit_cnt;
+ return ((struct auto_extra_data *)ae2)->hit_cnt -
+ ((struct auto_extra_data *)ae1)->hit_cnt;
}