about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--loftix/emulation.scm5
-rw-r--r--loftix/fuzzing.scm17
2 files changed, 22 insertions, 0 deletions
diff --git a/loftix/emulation.scm b/loftix/emulation.scm
index 0f7cbe2..a0d4a9c 100644
--- a/loftix/emulation.scm
+++ b/loftix/emulation.scm
@@ -78,6 +78,11 @@
                               ,(string-append "--prefix=" out)
                               ,(string-append "--sysconfdir=/etc")
                               ,@configure-flags)))))
+               (add-after 'install 'install-qasan-header
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (install-file "qemuafl/qasan.h"
+                                 (string-append (assoc-ref outputs "out")
+                                                "/include"))))
                (delete 'delete-firmwares)))))))))
 
 (define-public qemu-for-fuzzolic
diff --git a/loftix/fuzzing.scm b/loftix/fuzzing.scm
index c715bbc..de1ac77 100644
--- a/loftix/fuzzing.scm
+++ b/loftix/fuzzing.scm
@@ -33,6 +33,23 @@
   (package
     (inherit aflplusplus)
     (name "afl++")
+    (arguments
+      (substitute-keyword-arguments (package-arguments aflplusplus)
+        ((#:phases phases)
+         #~(modify-phases #$phases
+             (add-after 'build 'build-qasan
+               (lambda* (#:key make-flags #:allow-other-keys)
+                 (apply invoke
+                   "make" "-C" "qemu_mode/libqasan"
+                   make-flags)))
+             ;; afl-qemu-trace is a symbolic link to QEMU's binary.
+             ;; Substituting its source code with AFL++'s output path
+             ;; would result in a dependency cycle.
+             (add-after 'install-qemu 'wrap-qemu
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out")))
+                   (wrap-program (string-append out "/bin/afl-qemu-trace")
+                     `("AFL_PATH" = (,(string-append out "/lib/afl")))))))))))
     (inputs (modify-inputs (package-inputs aflplusplus)
               (replace "qemu" qemu-for-aflplusplus)))))