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.
This commit is contained in:
parent
c9164d3098
commit
268efd97c2
2 changed files with 160 additions and 84 deletions
|
@ -28,16 +28,23 @@
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
#:use-module (guix build-system gnu)
|
#:use-module (guix build-system gnu)
|
||||||
#:use-module (guix build-system cmake)
|
#:use-module (guix build-system cmake)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages attr)
|
||||||
#:use-module (gnu packages autotools)
|
#:use-module (gnu packages autotools)
|
||||||
#:use-module (gnu packages base)
|
#:use-module (gnu packages base)
|
||||||
#:use-module (gnu packages bash)
|
#:use-module (gnu packages bash)
|
||||||
|
#:use-module (gnu packages bison)
|
||||||
#:use-module (gnu packages code)
|
#:use-module (gnu packages code)
|
||||||
|
#:use-module (gnu packages compression)
|
||||||
#:use-module (gnu packages flex)
|
#:use-module (gnu packages flex)
|
||||||
#:use-module (gnu packages gdb)
|
#:use-module (gnu packages gdb)
|
||||||
#:use-module (gnu packages glib)
|
#:use-module (gnu packages glib)
|
||||||
#:use-module (gnu packages gtk)
|
#:use-module (gnu packages gtk)
|
||||||
#:use-module (gnu packages golang)
|
#:use-module (gnu packages golang)
|
||||||
|
#:use-module (gnu packages image)
|
||||||
|
#:use-module (gnu packages linux)
|
||||||
#:use-module (gnu packages llvm)
|
#:use-module (gnu packages llvm)
|
||||||
|
#:use-module (gnu packages ncurses)
|
||||||
#:use-module (gnu packages ninja)
|
#:use-module (gnu packages ninja)
|
||||||
#:use-module (gnu packages perl)
|
#:use-module (gnu packages perl)
|
||||||
#:use-module (gnu packages pkg-config)
|
#:use-module (gnu packages pkg-config)
|
||||||
|
@ -47,6 +54,7 @@
|
||||||
#:use-module (gnu packages readline)
|
#:use-module (gnu packages readline)
|
||||||
#:use-module (gnu packages serialization)
|
#:use-module (gnu packages serialization)
|
||||||
#:use-module (gnu packages virtualization)
|
#:use-module (gnu packages virtualization)
|
||||||
|
#:use-module (gnu packages xdisorg)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1))
|
#:use-module (srfi srfi-1))
|
||||||
|
|
||||||
|
@ -183,61 +191,7 @@ tools that process C/C++ code.")
|
||||||
(file-name (git-file-name name version))))
|
(file-name (git-file-name name version))))
|
||||||
(build-system gnu-build-system)
|
(build-system gnu-build-system)
|
||||||
(inputs
|
(inputs
|
||||||
`(("custom-qemu"
|
`(("qemu" ,qemu-for-american-fuzzy-lop)))
|
||||||
;; 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))))))))))))
|
|
||||||
(arguments
|
(arguments
|
||||||
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
|
`(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
|
||||||
(string-append "DOC_PATH=$(PREFIX)/share/doc/"
|
(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.
|
;; TODO: Build and install the afl-llvm tool.
|
||||||
'install 'install-qemu
|
'install 'install-qemu
|
||||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
(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")))
|
(out (assoc-ref outputs "out")))
|
||||||
(symlink (string-append qemu "/bin/qemu-" ,machine)
|
(symlink (string-append qemu "/bin/qemu-" ,machine)
|
||||||
(string-append out "/bin/afl-qemu-trace"))
|
(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.")
|
down the road.")
|
||||||
(license license:asl2.0))))
|
(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
|
(define-public stress-make
|
||||||
(let ((commit "9e92dff8f0157f012aaf31de5b8b8112ad720100")
|
(let ((commit "9e92dff8f0157f012aaf31de5b8b8112ad720100")
|
||||||
(revision "1")) ;No official source distribution
|
(revision "1")) ;No official source distribution
|
||||||
|
|
|
@ -284,34 +284,6 @@ server and embedded PowerPC, and S390 guests.")
|
||||||
'("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
|
'("libusb" "mesa" "sdl2" "spice" "virglrenderer" "gtk+"
|
||||||
"usbredir" "libdrm" "libepoxy" "pulseaudio" "vde2")))))
|
"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
|
(define-public libosinfo
|
||||||
(package
|
(package
|
||||||
(name "libosinfo")
|
(name "libosinfo")
|
||||||
|
|
Reference in a new issue