gnu: Remove qemu-minimal-2.10.
* gnu/packages/virtualization.scm (qemu-minimal-2.10): Remove variable. * gnu/packages/debug.scm (qemu-for-american-fuzzy-lop): New variable. (american-fuzzy-lop)[inputs]: Remove custom-qemu and add qemu-for-american-fuzzy-lop. [arguments]: Adjust reference to QEMU in the 'install-qemu' phase.master
parent
c9164d3098
commit
268efd97c2
|
@ -28,16 +28,23 @@
|
|||
#:use-module (guix utils)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system cmake)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages attr)
|
||||
#:use-module (gnu packages autotools)
|
||||
#:use-module (gnu packages base)
|
||||
#:use-module (gnu packages bash)
|
||||
#:use-module (gnu packages bison)
|
||||
#:use-module (gnu packages code)
|
||||
#:use-module (gnu packages compression)
|
||||
#:use-module (gnu packages flex)
|
||||
#:use-module (gnu packages gdb)
|
||||
#:use-module (gnu packages glib)
|
||||
#:use-module (gnu packages gtk)
|
||||
#:use-module (gnu packages golang)
|
||||
#:use-module (gnu packages image)
|
||||
#:use-module (gnu packages linux)
|
||||
#:use-module (gnu packages llvm)
|
||||
#:use-module (gnu packages ncurses)
|
||||
#:use-module (gnu packages ninja)
|
||||
#:use-module (gnu packages perl)
|
||||
#:use-module (gnu packages pkg-config)
|
||||
|
@ -47,6 +54,7 @@
|
|||
#:use-module (gnu packages readline)
|
||||
#:use-module (gnu packages serialization)
|
||||
#:use-module (gnu packages virtualization)
|
||||
#:use-module (gnu packages xdisorg)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (srfi srfi-1))
|
||||
|
||||
|
@ -183,61 +191,7 @@ tools that process C/C++ code.")
|
|||
(file-name (git-file-name name version))))
|
||||
(build-system gnu-build-system)
|
||||
(inputs
|
||||
`(("custom-qemu"
|
||||
;; The afl-qemu tool builds qemu 2.10.0 with a few patches applied.
|
||||
,(package (inherit qemu-minimal-2.10)
|
||||
(name "afl-qemu")
|
||||
(inputs
|
||||
`(("afl-src" ,source)
|
||||
,@(package-inputs qemu-minimal)))
|
||||
;; afl only supports using a single afl-qemu-trace executable, so
|
||||
;; we only build qemu for the native target.
|
||||
(arguments
|
||||
`(#:modules ((srfi srfi-1)
|
||||
,@%gnu-build-system-modules)
|
||||
,@(substitute-keyword-arguments (package-arguments qemu-minimal)
|
||||
((#:configure-flags config-flags)
|
||||
``(,(string-append "--target-list=" ,machine "-linux-user")
|
||||
,@(remove (λ (f) (string-prefix? "--target-list=" f))
|
||||
,config-flags)))
|
||||
((#:phases qemu-phases)
|
||||
`(modify-phases ,qemu-phases
|
||||
(add-after
|
||||
'unpack 'apply-afl-patches
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let* ((afl-src (assoc-ref inputs "afl-src"))
|
||||
(patch-dir "qemu_mode/patches"))
|
||||
(copy-recursively (string-append afl-src "/"
|
||||
patch-dir)
|
||||
patch-dir)
|
||||
(install-file
|
||||
(string-append patch-dir
|
||||
"/afl-qemu-cpu-inl.h")
|
||||
".")
|
||||
(copy-file (string-append afl-src "/config.h")
|
||||
"./afl-config.h")
|
||||
(install-file (string-append afl-src "/types.h")
|
||||
".")
|
||||
(substitute* "afl-qemu-cpu-inl.h"
|
||||
(("\\.\\./\\.\\./config.h") "afl-config.h"))
|
||||
(substitute* (string-append patch-dir
|
||||
"/cpu-exec.diff")
|
||||
(("\\.\\./patches/") ""))
|
||||
|
||||
;; These were already applied to qemu-minimal-2.10.
|
||||
(for-each (lambda (obsolete-patch)
|
||||
(delete-file (string-append
|
||||
patch-dir "/"
|
||||
obsolete-patch)))
|
||||
(list "configure.diff"
|
||||
"memfd.diff"))
|
||||
|
||||
(for-each (lambda (patch-file)
|
||||
(invoke "patch" "--force" "-p1"
|
||||
"--input" patch-file))
|
||||
(find-files patch-dir
|
||||
"\\.diff$"))
|
||||
#t))))))))))))
|
||||
`(("qemu" ,qemu-for-american-fuzzy-lop)))
|
||||
(arguments
|
||||
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
|
||||
(string-append "DOC_PATH=$(PREFIX)/share/doc/"
|
||||
|
@ -267,7 +221,7 @@ tools that process C/C++ code.")
|
|||
;; TODO: Build and install the afl-llvm tool.
|
||||
'install 'install-qemu
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let ((qemu (assoc-ref inputs "custom-qemu"))
|
||||
(let ((qemu (assoc-ref inputs "qemu"))
|
||||
(out (assoc-ref outputs "out")))
|
||||
(symlink (string-append qemu "/bin/qemu-" ,machine)
|
||||
(string-append out "/bin/afl-qemu-trace"))
|
||||
|
@ -285,6 +239,156 @@ useful for seeding other, more labor- or resource-intensive testing regimes
|
|||
down the road.")
|
||||
(license license:asl2.0))))
|
||||
|
||||
(define-public qemu-for-american-fuzzy-lop
|
||||
;; afl only supports using a single afl-qemu-trace executable, so
|
||||
;; we only build qemu for the native target.
|
||||
(let ((machine (match (or (%current-target-system)
|
||||
(%current-system))
|
||||
("x86_64-linux" "x86_64")
|
||||
("i686-linux" "i386")
|
||||
("aarch64-linux" "aarch64")
|
||||
("armhf-linux" "arm")
|
||||
("mips64el-linux" "mips64el")
|
||||
;; Prevent errors when querying this package on unsupported
|
||||
;; platforms, e.g. when running "guix package --search="
|
||||
(_ "UNSUPPORTED"))))
|
||||
(hidden-package
|
||||
(package
|
||||
(name "qemu")
|
||||
(version "2.10.2")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://download.qemu.org/qemu-"
|
||||
version ".tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))
|
||||
(patches
|
||||
(search-patches "qemu-glibc-2.27.patch"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(;; Running tests in parallel can occasionally lead to failures, like:
|
||||
;; boot_sector_test: assertion failed (signature == SIGNATURE): (0x00000000 == 0x0000dead)
|
||||
#:parallel-tests? #f
|
||||
#:configure-flags
|
||||
(list (string-append "--target-list=" ,machine "-linux-user"))
|
||||
#:make-flags '("V=1")
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(replace 'configure
|
||||
(lambda* (#:key inputs outputs (configure-flags '())
|
||||
#:allow-other-keys)
|
||||
;; The `configure' script doesn't understand some of the
|
||||
;; GNU options. Thus, add a new phase that's compatible.
|
||||
(let ((out (assoc-ref outputs "out")))
|
||||
(setenv "SHELL" (which "bash"))
|
||||
|
||||
;; While we're at it, patch for tests.
|
||||
(substitute* "tests/libqtest.c"
|
||||
(("/bin/sh") (which "sh")))
|
||||
|
||||
;; The binaries need to be linked against -lrt.
|
||||
(setenv "LDFLAGS" "-lrt")
|
||||
(apply invoke
|
||||
`("./configure"
|
||||
,(string-append "--cc=" (which "gcc"))
|
||||
;; Some architectures insist on using HOST_CC
|
||||
,(string-append "--host-cc=" (which "gcc"))
|
||||
"--disable-debug-info" ; save build space
|
||||
"--enable-virtfs" ; just to be sure
|
||||
,(string-append "--prefix=" out)
|
||||
,(string-append "--sysconfdir=/etc")
|
||||
,@configure-flags)))))
|
||||
(add-after
|
||||
'unpack 'apply-afl-patches
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let* ((afl-src (assoc-ref inputs "afl-source"))
|
||||
(patch-dir "qemu_mode/patches"))
|
||||
(copy-recursively (string-append afl-src "/"
|
||||
patch-dir)
|
||||
patch-dir)
|
||||
(install-file
|
||||
(string-append patch-dir
|
||||
"/afl-qemu-cpu-inl.h")
|
||||
".")
|
||||
(copy-file (string-append afl-src "/config.h")
|
||||
"./afl-config.h")
|
||||
(install-file (string-append afl-src "/types.h")
|
||||
".")
|
||||
(substitute* "afl-qemu-cpu-inl.h"
|
||||
(("\\.\\./\\.\\./config.h") "afl-config.h"))
|
||||
(substitute* (string-append patch-dir
|
||||
"/cpu-exec.diff")
|
||||
(("\\.\\./patches/") ""))
|
||||
|
||||
;; These were already applied to qemu-minimal-2.10.
|
||||
(for-each (lambda (obsolete-patch)
|
||||
(delete-file (string-append
|
||||
patch-dir "/"
|
||||
obsolete-patch)))
|
||||
(list "configure.diff"
|
||||
"memfd.diff"))
|
||||
|
||||
(for-each (lambda (patch-file)
|
||||
(invoke "patch" "--force" "-p1"
|
||||
"--input" patch-file))
|
||||
(find-files patch-dir
|
||||
"\\.diff$"))
|
||||
#t)))
|
||||
(add-before 'check 'disable-unusable-tests
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(substitute* "tests/Makefile.include"
|
||||
;; Comment out the test-qga test, which needs /sys and
|
||||
;; fails within the build environment.
|
||||
(("check-unit-.* tests/test-qga" all)
|
||||
(string-append "# " all)))
|
||||
(substitute* "tests/Makefile.include"
|
||||
;; Comment out the test-char test, which needs networking and
|
||||
;; fails within the build environment.
|
||||
(("check-unit-.* tests/test-char" all)
|
||||
(string-append "# " all)))
|
||||
#t)))))
|
||||
(native-inputs
|
||||
`(("python-2" ,python-2) ; QEMU 2 needs Python 2
|
||||
("glib:bin" ,glib "bin")
|
||||
("perl" ,perl)
|
||||
("flex" ,flex)
|
||||
("bison" ,bison)
|
||||
("pkg-config" ,pkg-config)))
|
||||
(inputs
|
||||
`(("afl-source" ,(package-source american-fuzzy-lop))
|
||||
("alsa-lib" ,alsa-lib)
|
||||
("attr" ,attr)
|
||||
("glib" ,glib)
|
||||
("libaio" ,libaio)
|
||||
("libattr" ,attr)
|
||||
("libcap" ,libcap)
|
||||
("libjpeg" ,libjpeg-turbo)
|
||||
("libpng" ,libpng)
|
||||
("ncurses" ,ncurses)
|
||||
("pixman" ,pixman)
|
||||
("util-linux" ,util-linux)
|
||||
("zlib" ,zlib)))
|
||||
(home-page "https://www.qemu.org")
|
||||
(synopsis "Machine emulator and virtualizer (without GUI) for american fuzzy lop")
|
||||
(description
|
||||
"QEMU is a generic machine emulator and virtualizer. This package
|
||||
of QEMU is used only by the american fuzzy lop package.
|
||||
|
||||
When used as a machine emulator, QEMU can run OSes and programs made for one
|
||||
machine (e.g. an ARM board) on a different machine---e.g., your own PC. By
|
||||
using dynamic translation, it achieves very good performance.
|
||||
|
||||
When used as a virtualizer, QEMU achieves near native performances by
|
||||
executing the guest code directly on the host CPU. QEMU supports
|
||||
virtualization when executing under the Xen hypervisor or using
|
||||
the KVM kernel module in Linux. When using KVM, QEMU can virtualize x86,
|
||||
server and embedded PowerPC, and S390 guests.")
|
||||
;; Many files are GPLv2+, but some are GPLv2-only---e.g., `memory.c'.
|
||||
(license license:gpl2)
|
||||
;; Several tests fail on MIPS.
|
||||
(supported-systems (delete "mips64el-linux" %supported-systems))))))
|
||||
|
||||
(define-public stress-make
|
||||
(let ((commit "9e92dff8f0157f012aaf31de5b8b8112ad720100")
|
||||
(revision "1")) ;No official source distribution
|
||||
|
|
|
@ -284,34 +284,6 @@ server and embedded PowerPC, and S390 guests.")
|
|||
'("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
|
||||
"usbredir" "libdrm" "libepoxy" "pulseaudio" "vde2")))))
|
||||
|
||||
;; The GRUB test suite fails with later versions of Qemu, so we
|
||||
;; keep it at 2.10 for now. See
|
||||
;; <https://lists.gnu.org/archive/html/bug-grub/2018-02/msg00004.html>.
|
||||
;; This package is hidden since we do not backport updates to it.
|
||||
(define-public qemu-minimal-2.10
|
||||
(hidden-package
|
||||
(package
|
||||
(inherit qemu-minimal)
|
||||
(version "2.10.2")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "https://download.qemu.org/qemu-"
|
||||
version ".tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))
|
||||
(patches
|
||||
(search-patches "qemu-glibc-2.27.patch"))))
|
||||
;; qemu-minimal-2.10 needs Python 2. Remove below once no longer necessary.
|
||||
(native-inputs `(("python-2" ,python-2)
|
||||
,@(fold alist-delete (package-native-inputs qemu-minimal)
|
||||
'("python-wrapper" "python-sphinx"))))
|
||||
(inputs
|
||||
(fold alist-delete (package-inputs qemu-minimal)
|
||||
;; Disable seccomp support, because it's not required for the GRUB
|
||||
;; test suite, and because it fails with libseccomp 2.4.2 and later.
|
||||
'("libseccomp"))))))
|
||||
|
||||
(define-public libosinfo
|
||||
(package
|
||||
(name "libosinfo")
|
||||
|
|
Reference in New Issue