about summary refs log tree commit diff
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2021-01-05 22:13:55 +0100
committervan Hauser <vh@thc.org>2021-01-05 22:13:55 +0100
commit4c78bb70802a85ffad6aee0f234f26901cd563f9 (patch)
tree8ce3389286a37bb2494d1b9bcfb12ba7932a1e4a
parent59b86b0db0c856bc659eb81a1bd3c414865ab1e4 (diff)
downloadafl++-4c78bb70802a85ffad6aee0f234f26901cd563f9.tar.gz
cpp fix
-rw-r--r--instrumentation/afl-compiler-rt.o.c4
-rw-r--r--src/afl-cc.c25
2 files changed, 21 insertions, 8 deletions
diff --git a/instrumentation/afl-compiler-rt.o.c b/instrumentation/afl-compiler-rt.o.c
index daa50ffa..bb62fb38 100644
--- a/instrumentation/afl-compiler-rt.o.c
+++ b/instrumentation/afl-compiler-rt.o.c
@@ -1409,8 +1409,8 @@ void __afl_coverage_on() {
 // discard all coverage up to this point
 void __afl_coverage_discard() {
 
-  memset(__afl_area_ptr, 0, __afl_map_size);
-  __afl_area_ptr[0] = 1;
+  memset(__afl_area_ptr_backup, 0, __afl_map_size);
+  __afl_area_ptr_backup[0] = 1;
 
   if (__afl_cmp_map) { memset(__afl_cmp_map, 0, sizeof(struct cmp_map)); }
 
diff --git a/src/afl-cc.c b/src/afl-cc.c
index 27bf8cf0..e61dc6d2 100644
--- a/src/afl-cc.c
+++ b/src/afl-cc.c
@@ -829,12 +829,25 @@ static void edit_params(u32 argc, char **argv, char **envp) {
       "extern unsigned char *__afl_fuzz_ptr;"
       "unsigned char __afl_fuzz_alt[1048576];"
       "unsigned char *__afl_fuzz_alt_ptr = __afl_fuzz_alt;";
-  cc_params[cc_par_cnt++] =
-      "-D__AFL_COVERAGE()=int __afl_selective_coverage = 1;"
-      "void __afl_coverage_discard();"
-      "void __afl_coverage_abort();"
-      "void __afl_coverage_on();"
-      "void __afl_coverage_off();";
+  if (plusplus_mode) {
+
+    "-D__AFL_COVERAGE()=int __afl_selective_coverage = 1;"
+    "extern \"C\" void __afl_coverage_discard();"
+    "extern \"C\" void __afl_coverage_abort();"
+    "extern \"C\" void __afl_coverage_on();"
+    "extern \"C\" void __afl_coverage_off();";
+
+  } else {
+
+    cc_params[cc_par_cnt++] =
+        "-D__AFL_COVERAGE()=int __afl_selective_coverage = 1;"
+        "void __afl_coverage_discard();"
+        "void __afl_coverage_abort();"
+        "void __afl_coverage_on();"
+        "void __afl_coverage_off();";
+
+  }
+
   cc_params[cc_par_cnt++] =
       "-D__AFL_COVERAGE_START_OFF()=int __afl_selective_coverage_start_off = "
       "1;";