aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2022-07-04 09:59:47 +0200
committervanhauser-thc <vh@thc.org>2022-07-04 09:59:47 +0200
commit1334851e7c35bf7bf35db0dc2a974b2e0249d8f8 (patch)
tree934793839d3c939c12ed9202dae51cb06561c0d6 /src
parente21738a24852e0ed9b346c28aeb4132a34d5b7cc (diff)
downloadafl++-1334851e7c35bf7bf35db0dc2a974b2e0249d8f8.tar.gz
cmplog support for gcc_plugin by adacore
Diffstat (limited to 'src')
-rw-r--r--src/afl-cc.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/afl-cc.c b/src/afl-cc.c
index 4a56169f..96342659 100644
--- a/src/afl-cc.c
+++ b/src/afl-cc.c
@@ -422,8 +422,24 @@ static void edit_params(u32 argc, char **argv, char **envp) {
if (compiler_mode == GCC_PLUGIN) {
- char *fplugin_arg = alloc_printf("-fplugin=%s/afl-gcc-pass.so", obj_path);
- cc_params[cc_par_cnt++] = fplugin_arg;
+ char *fplugin_arg;
+
+ if (cmplog_mode)
+ {
+ fplugin_arg = alloc_printf("-fplugin=%s/afl-gcc-cmplog-pass.so",
+ obj_path);
+ cc_params[cc_par_cnt++] = fplugin_arg;
+ fplugin_arg = alloc_printf("-fplugin=%s/afl-gcc-cmptrs-pass.so",
+ obj_path);
+ cc_params[cc_par_cnt++] = fplugin_arg;
+ }
+ else
+ {
+ fplugin_arg = alloc_printf("-fplugin=%s/afl-gcc-pass.so",
+ obj_path);
+ cc_params[cc_par_cnt++] = fplugin_arg;
+ }
+
cc_params[cc_par_cnt++] = "-fno-if-conversion";
cc_params[cc_par_cnt++] = "-fno-if-conversion2";
@@ -1879,6 +1895,7 @@ int main(int argc, char **argv, char **envp) {
if (have_gcc_plugin)
SAYF(
"\nGCC Plugin-specific environment variables:\n"
+ " AFL_GCC_CMPLOG: log operands of comparisons (RedQueen mutator)\n"
" AFL_GCC_OUT_OF_LINE: disable inlined instrumentation\n"
" AFL_GCC_SKIP_NEVERZERO: do not skip zero on trace counters\n"
" AFL_GCC_INSTRUMENT_FILE: enable selective instrumentation by "
@@ -2149,9 +2166,7 @@ int main(int argc, char **argv, char **envp) {
}
- cmplog_mode = getenv("AFL_CMPLOG") || getenv("AFL_LLVM_CMPLOG");
- if (!be_quiet && cmplog_mode)
- printf("CmpLog mode by <andreafioraldi@gmail.com>\n");
+ cmplog_mode = getenv("AFL_CMPLOG") || getenv("AFL_LLVM_CMPLOG") || getenv("AFL_GCC_CMPLOG");
#if !defined(__ANDROID__) && !defined(ANDROID)
ptr = find_object("afl-compiler-rt.o", argv[0]);