Initial commit
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
SUMMARY = "Qemu helper scripts"
|
||||
LICENSE = "GPL-2.0-only"
|
||||
RDEPENDS:${PN} = "nativesdk-qemu nativesdk-unfs3 nativesdk-pseudo \
|
||||
nativesdk-python3-shell nativesdk-python3-fcntl nativesdk-python3-logging \
|
||||
"
|
||||
|
||||
PR = "r9"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/scripts/runqemu;beginline=5;endline=10;md5=ac2b489a58739c7628a2604698db5e7f"
|
||||
|
||||
|
||||
SRC_URI = "file://${COREBASE}/scripts/runqemu \
|
||||
file://${COREBASE}/scripts/runqemu-addptable2image \
|
||||
file://${COREBASE}/scripts/runqemu-gen-tapdevs \
|
||||
file://${COREBASE}/scripts/runqemu-ifup \
|
||||
file://${COREBASE}/scripts/runqemu-ifdown \
|
||||
file://${COREBASE}/scripts/oe-find-native-sysroot \
|
||||
file://${COREBASE}/scripts/runqemu-extract-sdk \
|
||||
file://${COREBASE}/scripts/runqemu-export-rootfs \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
inherit nativesdk
|
||||
|
||||
do_compile() {
|
||||
:
|
||||
}
|
||||
|
||||
do_install() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${WORKDIR}${COREBASE}/scripts/oe-* ${D}${bindir}/
|
||||
install -m 0755 ${WORKDIR}${COREBASE}/scripts/runqemu* ${D}${bindir}/
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
SUMMARY = "Helper utilities needed by the runqemu script"
|
||||
LICENSE = "GPL-2.0-only"
|
||||
RDEPENDS:${PN} = "qemu-system-native"
|
||||
PR = "r1"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://${WORKDIR}/qemu-oe-bridge-helper.c;endline=4;md5=ae00a3bab86f2caaa8462eacda77f4d7"
|
||||
|
||||
SRC_URI = "file://qemu-oe-bridge-helper.c"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
inherit native
|
||||
|
||||
do_compile() {
|
||||
${CC} ${CFLAGS} ${LDFLAGS} -Wall qemu-oe-bridge-helper.c -o qemu-oe-bridge-helper
|
||||
}
|
||||
|
||||
do_install() {
|
||||
install -d ${D}${bindir}
|
||||
install qemu-oe-bridge-helper ${D}${bindir}/
|
||||
}
|
||||
|
||||
DEPENDS += "qemu-system-native unfs3-native pseudo-native"
|
||||
addtask addto_recipe_sysroot after do_populate_sysroot before do_build
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 2022 Garmin Ltd. or its subsidiaries
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* Attempts to find and exec the host qemu-bridge-helper program
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void try_program(char const* path, char** args) {
|
||||
if (access(path, X_OK) == 0) {
|
||||
execv(path, args);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
char* var;
|
||||
|
||||
var = getenv("QEMU_BRIDGE_HELPER");
|
||||
if (var && var[0] != '\0') {
|
||||
execvp(var, argv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (argc == 2 && strcmp(argv[1], "--help") == 0) {
|
||||
fprintf(stderr, "Helper function to find and exec qemu-bridge-helper. Set QEMU_BRIDGE_HELPER to override default search path\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
try_program("/usr/libexec/qemu-bridge-helper", argv);
|
||||
try_program("/usr/lib/qemu/qemu-bridge-helper", argv);
|
||||
|
||||
fprintf(stderr, "No bridge helper found\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
require qemu.inc
|
||||
|
||||
inherit native
|
||||
|
||||
EXTRA_OEMAKE:append = " LD='${LD}' AR='${AR}' OBJCOPY='${OBJCOPY}' LDFLAGS='${LDFLAGS}'"
|
||||
|
||||
LDFLAGS:append = " -fuse-ld=bfd"
|
||||
@@ -0,0 +1,9 @@
|
||||
BPN = "qemu"
|
||||
|
||||
DEPENDS = "glib-2.0-native zlib-native ninja-native meson-native"
|
||||
|
||||
require qemu-native.inc
|
||||
|
||||
EXTRA_OECONF:append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-install-blobs --disable-guest-agent"
|
||||
|
||||
PACKAGECONFIG ??= "pie"
|
||||
@@ -0,0 +1,33 @@
|
||||
BPN = "qemu"
|
||||
|
||||
inherit python3-dir
|
||||
|
||||
require qemu-native.inc
|
||||
|
||||
# As some of the files installed by qemu-native and qemu-system-native
|
||||
# are the same, we depend on qemu-native to get the full installation set
|
||||
# and avoid file clashes
|
||||
DEPENDS = "glib-2.0-native zlib-native pixman-native qemu-native bison-native meson-native ninja-native"
|
||||
|
||||
EXTRA_OECONF:append = " --target-list=${@get_qemu_system_target_list(d)}"
|
||||
|
||||
PACKAGECONFIG ??= "fdt alsa kvm pie slirp \
|
||||
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer epoxy', '', d)} \
|
||||
"
|
||||
|
||||
# Handle distros such as CentOS 5 32-bit that do not have kvm support
|
||||
PACKAGECONFIG:remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}"
|
||||
|
||||
do_install:append() {
|
||||
install -Dm 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
|
||||
|
||||
# The following is also installed by qemu-native
|
||||
rm -f ${D}${datadir}/qemu/trace-events-all
|
||||
rm -rf ${D}${datadir}/qemu/keymaps
|
||||
rm -rf ${D}${datadir}/icons/
|
||||
rm -rf ${D}${includedir}/qemu-plugin.h
|
||||
|
||||
# Install qmp.py to be used with testimage
|
||||
install -d ${D}${libdir}/qemu-python/qmp/
|
||||
install -D ${S}/python/qemu/qmp/* ${D}${libdir}/qemu-python/qmp/
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# possible arch values are:
|
||||
# aarch64 arm armeb alpha cris i386 x86_64 m68k microblaze
|
||||
# mips mipsel mips64 mips64el ppc ppc64 ppc64abi32 ppcemb
|
||||
# riscv32 riscv64 sparc sparc32 sparc32plus
|
||||
|
||||
def get_qemu_target_list(d):
|
||||
import bb
|
||||
archs = d.getVar('QEMU_TARGETS').split()
|
||||
tos = d.getVar('HOST_OS')
|
||||
softmmuonly = ""
|
||||
for arch in ['ppcemb', 'lm32']:
|
||||
if arch in archs:
|
||||
softmmuonly += arch + "-softmmu,"
|
||||
archs.remove(arch)
|
||||
linuxuseronly = ""
|
||||
for arch in ['armeb', 'alpha', 'ppc64abi32', 'ppc64le', 'sparc32plus', 'aarch64_be']:
|
||||
if arch in archs:
|
||||
linuxuseronly += arch + "-linux-user,"
|
||||
archs.remove(arch)
|
||||
if 'linux' not in tos:
|
||||
return softmmuonly + ''.join([arch + "-softmmu" + "," for arch in archs]).rstrip(',')
|
||||
return softmmuonly + linuxuseronly + ''.join([arch + "-linux-user" + "," + arch + "-softmmu" + "," for arch in archs]).rstrip(',')
|
||||
|
||||
def get_qemu_usermode_target_list(d):
|
||||
return ",".join(filter(lambda i: "-linux-user" in i, get_qemu_target_list(d).split(',')))
|
||||
|
||||
def get_qemu_system_target_list(d):
|
||||
return ",".join(filter(lambda i: "-linux-user" not in i, get_qemu_target_list(d).split(',')))
|
||||
@@ -0,0 +1,266 @@
|
||||
SUMMARY = "Fast open source processor emulator"
|
||||
DESCRIPTION = "QEMU is a hosted virtual machine monitor: it emulates the \
|
||||
machine's processor through dynamic binary translation and provides a set \
|
||||
of different hardware and device models for the machine, enabling it to run \
|
||||
a variety of guest operating systems"
|
||||
HOMEPAGE = "http://qemu.org"
|
||||
LICENSE = "GPL-2.0-only & LGPL-2.1-only"
|
||||
|
||||
RDEPENDS:${PN}-ptest = "bash"
|
||||
|
||||
require qemu-targets.inc
|
||||
inherit pkgconfig ptest update-rc.d systemd
|
||||
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
|
||||
file://COPYING.LIB;endline=24;md5=8c5efda6cf1e1b03dcfd0e6c0d271c7f"
|
||||
|
||||
SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
|
||||
file://powerpc_rom.bin \
|
||||
file://run-ptest \
|
||||
file://0001-qemu-Add-addition-environment-space-to-boot-loader-q.patch \
|
||||
file://0003-apic-fixup-fallthrough-to-PIC.patch \
|
||||
file://0004-configure-Add-pkg-config-handling-for-libgcrypt.patch \
|
||||
file://0005-qemu-Do-not-include-file-if-not-exists.patch \
|
||||
file://0006-qemu-Add-some-user-space-mmap-tweaks-to-address-musl.patch \
|
||||
file://0007-qemu-Determinism-fixes.patch \
|
||||
file://0008-tests-meson.build-use-relative-path-to-refer-to-file.patch \
|
||||
file://0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch \
|
||||
file://0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch \
|
||||
file://0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch \
|
||||
file://0001-tracetool-use-relative-paths-for-line-preprocessor-d.patch \
|
||||
file://qemu-guest-agent.init \
|
||||
file://qemu-guest-agent.udev \
|
||||
"
|
||||
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
||||
|
||||
SRC_URI[sha256sum] = "ecf4d32cbef9d397bfc8cc50e4d1e92a1b30253bf32e8ee73c7a8dcf9a232b09"
|
||||
|
||||
SRC_URI:append:class-target = " file://cross.patch"
|
||||
SRC_URI:append:class-nativesdk = " file://cross.patch"
|
||||
|
||||
CVE_STATUS[CVE-2017-5957] = "cpe-incorrect: Applies against virglrender < 0.6.0 and not qemu itself"
|
||||
|
||||
CVE_STATUS[CVE-2007-0998] = "not-applicable-config: The VNC server can expose host files uder some circumstances. We don't enable it by default."
|
||||
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1609015#c11
|
||||
CVE_STATUS[CVE-2018-18438] = "disputed: The issues identified by this CVE were determined to not constitute a vulnerability."
|
||||
|
||||
# As per https://nvd.nist.gov/vuln/detail/CVE-2023-0664
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2167423
|
||||
CVE_STATUS[CVE-2023-0664] = "not-applicable-platform: Issue only applies on Windows"
|
||||
|
||||
COMPATIBLE_HOST:mipsarchn32 = "null"
|
||||
COMPATIBLE_HOST:mipsarchn64 = "null"
|
||||
COMPATIBLE_HOST:riscv32 = "null"
|
||||
|
||||
# Per https://lists.nongnu.org/archive/html/qemu-devel/2020-09/msg03873.html
|
||||
# upstream states qemu doesn't work without optimization
|
||||
DEBUG_BUILD = "0"
|
||||
|
||||
do_install:append() {
|
||||
# Prevent QA warnings about installed ${localstatedir}/run
|
||||
if [ -d ${D}${localstatedir}/run ]; then rmdir ${D}${localstatedir}/run; fi
|
||||
}
|
||||
|
||||
do_install_ptest() {
|
||||
cp -rL ${B}/tests ${D}${PTEST_PATH}
|
||||
find ${D}${PTEST_PATH}/tests -type f -name "*.[Sshcodp]" | xargs -i rm -rf {}
|
||||
|
||||
# Don't check the file genreated by configure
|
||||
sed -i -e "1s,#!/usr/bin/bash,#!${base_bindir}/bash," ${D}${PTEST_PATH}/tests/data/acpi/disassemle-aml.sh
|
||||
|
||||
# Strip the paths from the QEMU variable, we can use PATH
|
||||
makfiles=$(find ${D}${PTEST_PATH} -name "*.mak")
|
||||
sed -i -e "s#^QEMU=.*/qemu-#QEMU=qemu-#g" $makfiles
|
||||
|
||||
# Strip compiler flags as they break reproducibility
|
||||
sed -i -e "s,^CC=.*,CC=gcc," \
|
||||
-e "s,^CCAS=.*,CCAS=gcc," \
|
||||
-e "s,^LD=.*,LD=ld," $makfiles
|
||||
|
||||
# Update SRC_PATH variable to the right place on target
|
||||
sed -i -e "s#^SRC_PATH=.*#SRC_PATH=${PTEST_PATH}#g" $makfiles
|
||||
|
||||
# https://gitlab.com/qemu-project/qemu/-/issues/1403
|
||||
rm ${D}${PTEST_PATH}/tests/unit/test-io-channel-command
|
||||
}
|
||||
|
||||
# QEMU_TARGETS is overridable variable
|
||||
QEMU_TARGETS ?= "arm aarch64 i386 loongarch64 mips mipsel mips64 mips64el ppc ppc64 ppc64le riscv32 riscv64 sh4 x86_64"
|
||||
|
||||
EXTRA_OECONF = " \
|
||||
--prefix=${prefix} \
|
||||
--bindir=${bindir} \
|
||||
--includedir=${includedir} \
|
||||
--libdir=${libdir} \
|
||||
--mandir=${mandir} \
|
||||
--datadir=${datadir} \
|
||||
--docdir=${docdir}/${BPN} \
|
||||
--sysconfdir=${sysconfdir} \
|
||||
--libexecdir=${libexecdir} \
|
||||
--localstatedir=${localstatedir} \
|
||||
--with-suffix=${BPN} \
|
||||
--disable-strip \
|
||||
--disable-werror \
|
||||
--extra-cflags='${CFLAGS}' \
|
||||
--extra-ldflags='${LDFLAGS}' \
|
||||
--with-git=/bin/false \
|
||||
--with-git-submodules=ignore \
|
||||
--meson=meson \
|
||||
${PACKAGECONFIG_CONFARGS} \
|
||||
"
|
||||
|
||||
B = "${WORKDIR}/build"
|
||||
|
||||
#EXTRA_OECONF:append = " --python=${HOSTTOOLS_DIR}/python3"
|
||||
|
||||
do_configure:prepend:class-native() {
|
||||
# Append build host pkg-config paths for native target since the host may provide sdl
|
||||
BHOST_PKGCONFIG_PATH=$(PATH=/usr/bin:/bin pkg-config --variable pc_path pkg-config || echo "")
|
||||
if [ ! -z "$BHOST_PKGCONFIG_PATH" ]; then
|
||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$BHOST_PKGCONFIG_PATH
|
||||
fi
|
||||
}
|
||||
|
||||
do_configure() {
|
||||
${S}/configure ${EXTRA_OECONF}
|
||||
}
|
||||
do_configure[cleandirs] += "${B}"
|
||||
|
||||
do_install () {
|
||||
export STRIP=""
|
||||
oe_runmake 'DESTDIR=${D}' install
|
||||
|
||||
# If we built the guest agent, also install startup/udev rules
|
||||
if [ -e "${D}${bindir}/qemu-ga" ]; then
|
||||
install -d ${D}${sysconfdir}/init.d/
|
||||
install -m 0755 ${WORKDIR}/qemu-guest-agent.init ${D}${sysconfdir}/init.d/qemu-guest-agent
|
||||
sed -i 's:@bindir@:${bindir}:' ${D}${sysconfdir}/init.d/qemu-guest-agent
|
||||
|
||||
install -d ${D}${sysconfdir}/udev/rules.d/
|
||||
install -m 0644 ${WORKDIR}/qemu-guest-agent.udev ${D}${sysconfdir}/udev/rules.d/60-qemu-guest-agent.rules
|
||||
|
||||
install -d ${D}${systemd_unitdir}/system/
|
||||
install -m 0644 ${S}/contrib/systemd/qemu-guest-agent.service ${D}${systemd_unitdir}/system
|
||||
sed -i -e 's,-/usr/bin/,-${bindir}/,g' ${D}${systemd_unitdir}/system/qemu-guest-agent.service
|
||||
fi
|
||||
}
|
||||
|
||||
# The following fragment will create a wrapper for qemu-mips user emulation
|
||||
# binary in order to work around a segmentation fault issue. Basically, by
|
||||
# default, the reserved virtual address space for 32-on-64 bit is set to 4GB.
|
||||
# This will trigger a MMU access fault in the virtual CPU. With this change,
|
||||
# the qemu-mips works fine.
|
||||
# IMPORTANT: This piece needs to be removed once the root cause is fixed!
|
||||
do_install:append() {
|
||||
if [ -e "${D}/${bindir}/qemu-mips" ]; then
|
||||
create_wrapper ${D}/${bindir}/qemu-mips \
|
||||
QEMU_RESERVED_VA=0x0
|
||||
fi
|
||||
}
|
||||
# END of qemu-mips workaround
|
||||
|
||||
# Disable kvm/virgl/mesa on targets that do not support it
|
||||
PACKAGECONFIG:remove:darwin = "kvm virglrenderer epoxy gtk+"
|
||||
PACKAGECONFIG:remove:mingw32 = "kvm virglrenderer epoxy gtk+"
|
||||
|
||||
PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,libsdl2"
|
||||
PACKAGECONFIG[png] = "--enable-png,--disable-png,libpng"
|
||||
PACKAGECONFIG[virtfs] = "--enable-virtfs --enable-attr --enable-cap-ng,--disable-virtfs,libcap-ng attr,"
|
||||
PACKAGECONFIG[aio] = "--enable-linux-aio,--disable-linux-aio,libaio,"
|
||||
PACKAGECONFIG[uring] = "--enable-linux-io-uring,--disable-linux-io-uring,liburing"
|
||||
PACKAGECONFIG[xen] = "--enable-xen,--disable-xen,xen-tools,xen-tools-libxenstore xen-tools-libxenctrl xen-tools-libxenguest"
|
||||
PACKAGECONFIG[vnc-sasl] = "--enable-vnc --enable-vnc-sasl,--disable-vnc-sasl,cyrus-sasl,"
|
||||
PACKAGECONFIG[vnc-jpeg] = "--enable-vnc --enable-vnc-jpeg,--disable-vnc-jpeg,jpeg,"
|
||||
PACKAGECONFIG[libcurl] = "--enable-curl,--disable-curl,curl,"
|
||||
PACKAGECONFIG[nss] = "--enable-smartcard,--disable-smartcard,nss,"
|
||||
PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses,"
|
||||
PACKAGECONFIG[gtk+] = "--enable-gtk,--disable-gtk,gtk+3 gettext-native"
|
||||
PACKAGECONFIG[vte] = "--enable-vte,--disable-vte,vte gettext-native"
|
||||
PACKAGECONFIG[libcap-ng] = "--enable-cap-ng,--disable-cap-ng,libcap-ng,"
|
||||
PACKAGECONFIG[ssh] = "--enable-libssh,--disable-libssh,libssh,"
|
||||
PACKAGECONFIG[gcrypt] = "--enable-gcrypt,--disable-gcrypt,libgcrypt,"
|
||||
PACKAGECONFIG[nettle] = "--enable-nettle,--disable-nettle,nettle"
|
||||
PACKAGECONFIG[libusb] = "--enable-libusb,--disable-libusb,libusb1"
|
||||
PACKAGECONFIG[fdt] = "--enable-fdt,--disable-fdt,dtc"
|
||||
PACKAGECONFIG[alsa] = "--audio-drv-list=default,,alsa-lib"
|
||||
PACKAGECONFIG[epoxy] = "--enable-opengl,--disable-opengl,libepoxy"
|
||||
PACKAGECONFIG[lzo] = "--enable-lzo,--disable-lzo,lzo"
|
||||
PACKAGECONFIG[numa] = "--enable-numa,--disable-numa,numactl"
|
||||
PACKAGECONFIG[gnutls] = "--enable-gnutls,--disable-gnutls,gnutls"
|
||||
PACKAGECONFIG[bzip2] = "--enable-bzip2,--disable-bzip2,bzip2"
|
||||
PACKAGECONFIG[libiscsi] = "--enable-libiscsi,--disable-libiscsi"
|
||||
PACKAGECONFIG[kvm] = "--enable-kvm,--disable-kvm"
|
||||
PACKAGECONFIG[virglrenderer] = "--enable-virglrenderer,--disable-virglrenderer,virglrenderer"
|
||||
# spice will be in meta-networking layer
|
||||
PACKAGECONFIG[spice] = "--enable-spice,--disable-spice,spice"
|
||||
# usbredir will be in meta-networking layer
|
||||
PACKAGECONFIG[usb-redir] = "--enable-usb-redir,--disable-usb-redir,usbredir"
|
||||
PACKAGECONFIG[snappy] = "--enable-snappy,--disable-snappy,snappy"
|
||||
PACKAGECONFIG[glusterfs] = "--enable-glusterfs,--disable-glusterfs,glusterfs"
|
||||
PACKAGECONFIG[xkbcommon] = "--enable-xkbcommon,--disable-xkbcommon,libxkbcommon"
|
||||
PACKAGECONFIG[libudev] = "--enable-libudev,--disable-libudev,eudev"
|
||||
PACKAGECONFIG[attr] = "--enable-attr,--disable-attr,attr,"
|
||||
PACKAGECONFIG[rbd] = "--enable-rbd,--disable-rbd,ceph,ceph"
|
||||
PACKAGECONFIG[vhost] = "--enable-vhost-net,--disable-vhost-net,,"
|
||||
PACKAGECONFIG[ust] = "--enable-trace-backends=ust,,lttng-ust,"
|
||||
PACKAGECONFIG[pie] = "--enable-pie,--disable-pie,,"
|
||||
PACKAGECONFIG[seccomp] = "--enable-seccomp,--disable-seccomp,libseccomp"
|
||||
# libnfs is currently provided by meta-kodi
|
||||
PACKAGECONFIG[libnfs] = "--enable-libnfs,--disable-libnfs,libnfs"
|
||||
PACKAGECONFIG[pmem] = "--enable-libpmem,--disable-libpmem,pmdk"
|
||||
PACKAGECONFIG[pulseaudio] = "--enable-pa,--disable-pa,pulseaudio"
|
||||
PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux"
|
||||
PACKAGECONFIG[bpf] = "--enable-bpf,--disable-bpf,libbpf"
|
||||
PACKAGECONFIG[capstone] = "--enable-capstone,--disable-capstone"
|
||||
PACKAGECONFIG[rdma] = "--enable-rdma,--disable-rdma"
|
||||
PACKAGECONFIG[vde] = "--enable-vde,--disable-vde"
|
||||
PACKAGECONFIG[slirp] = "--enable-slirp,--disable-slirp,libslirp"
|
||||
PACKAGECONFIG[brlapi] = "--enable-brlapi,--disable-brlapi"
|
||||
PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack,"
|
||||
PACKAGECONFIG[debuginfo] = "--enable-libdw,--disable-libdw,elfutils"
|
||||
|
||||
INSANE_SKIP:${PN} = "arch"
|
||||
|
||||
FILES:${PN} += "${datadir}/icons"
|
||||
|
||||
# For user who want to install all arch packages
|
||||
PACKAGES =+ "${PN}-system-all ${PN}-user-all"
|
||||
|
||||
ALLOW_EMPTY:${PN}-system-all = "1"
|
||||
ALLOW_EMPTY:${PN}-user-all = "1"
|
||||
|
||||
PACKAGES_DYNAMIC += "^${PN}-user-.* ^${PN}-system-.*"
|
||||
|
||||
PACKAGESPLITFUNCS =+ "split_qemu_packages"
|
||||
|
||||
python split_qemu_packages () {
|
||||
archdir = d.expand('${bindir}/')
|
||||
syspackages = do_split_packages(d, archdir, r'^qemu-system-(.*)$', '${PN}-system-%s', 'QEMU full system emulation binaries(%s)' , prepend=True)
|
||||
if syspackages:
|
||||
d.setVar('RDEPENDS:' + d.getVar('PN') + '-system-all', ' '.join(syspackages))
|
||||
|
||||
userpackages = do_split_packages(d, archdir, r'^qemu-((?!system|edid|ga|img|io|nbd|pr-helper|storage-daemon).*)$', '${PN}-user-%s', 'QEMU full user emulation binaries(%s)' , prepend=True)
|
||||
if userpackages:
|
||||
d.setVar('RDEPENDS:' + d.getVar('PN') + '-user-all', ' '.join(userpackages))
|
||||
mipspackage = d.getVar('PN') + "-user-mips"
|
||||
if mipspackage in ' '.join(userpackages):
|
||||
d.appendVar('RDEPENDS:' + mipspackage, ' ' + d.getVar("MLPREFIX") + 'bash')
|
||||
}
|
||||
|
||||
# Put the guest agent in a separate package
|
||||
PACKAGES =+ "${PN}-guest-agent"
|
||||
SUMMARY:${PN}-guest-agent = "QEMU guest agent"
|
||||
FILES:${PN}-guest-agent += " \
|
||||
${bindir}/qemu-ga \
|
||||
${sysconfdir}/udev/rules.d/60-qemu-guest-agent.rules \
|
||||
${sysconfdir}/init.d/qemu-guest-agent \
|
||||
${systemd_unitdir}/system/qemu-guest-agent.service \
|
||||
"
|
||||
|
||||
INITSCRIPT_PACKAGES = "${PN}-guest-agent"
|
||||
INITSCRIPT_NAME:${PN}-guest-agent = "qemu-guest-agent"
|
||||
INITSCRIPT_PARAMS:${PN}-guest-agent = "defaults"
|
||||
|
||||
SYSTEMD_PACKAGES = "${PN}-guest-agent"
|
||||
SYSTEMD_SERVICE:${PN}-guest-agent = "qemu-guest-agent.service"
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
From de64af82950a6908f9407dfc92b83c17e2af3eab Mon Sep 17 00:00:00 2001
|
||||
From: Jason Wessel <jason.wessel@windriver.com>
|
||||
Date: Fri, 28 Mar 2014 17:42:43 +0800
|
||||
Subject: [PATCH 01/12] qemu: Add addition environment space to boot loader
|
||||
qemu-system-mips
|
||||
|
||||
Upstream-Status: Inappropriate - OE uses deep paths
|
||||
|
||||
If you create a project with very long directory names like 128 characters
|
||||
deep and use NFS, the kernel arguments will be truncated. The kernel will
|
||||
accept longer strings such as 1024 bytes, but the qemu boot loader defaulted
|
||||
to only 256 bytes. This patch expands the limit.
|
||||
|
||||
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
|
||||
Signed-off-by: Roy Li <rongqing.li@windriver.com>
|
||||
|
||||
---
|
||||
hw/mips/malta.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: qemu-8.0.0/hw/mips/malta.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/hw/mips/malta.c
|
||||
+++ qemu-8.0.0/hw/mips/malta.c
|
||||
@@ -64,7 +64,7 @@
|
||||
#define ENVP_PADDR 0x2000
|
||||
#define ENVP_VADDR cpu_mips_phys_to_kseg0(NULL, ENVP_PADDR)
|
||||
#define ENVP_NB_ENTRIES 16
|
||||
-#define ENVP_ENTRY_SIZE 256
|
||||
+#define ENVP_ENTRY_SIZE 1024
|
||||
|
||||
/* Hardware addresses */
|
||||
#define FLASH_ADDRESS 0x1e000000ULL
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
From 348ea441db84a211d4fca7ef5544b5cd06a8a872 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
|
||||
Date: Tue, 4 Apr 2023 15:26:07 +0200
|
||||
Subject: [PATCH] tracetool: use relative paths for '#line' preprocessor
|
||||
directives
|
||||
|
||||
The event filename is an absolute path. Convert it to a relative path when
|
||||
writing '#line' directives, to preserve reproducibility of the generated
|
||||
output when different base paths are used.
|
||||
|
||||
Upstream-Status: Accepted [https://gitlab.com/qemu-project/qemu/-/commit/9d672e290475001fcecdcc9dc79ad088ff89d17f]
|
||||
|
||||
---
|
||||
scripts/tracetool/backend/ftrace.py | 4 +++-
|
||||
scripts/tracetool/backend/log.py | 4 +++-
|
||||
scripts/tracetool/backend/syslog.py | 4 +++-
|
||||
3 files changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: qemu-8.0.0/scripts/tracetool/backend/ftrace.py
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/scripts/tracetool/backend/ftrace.py
|
||||
+++ qemu-8.0.0/scripts/tracetool/backend/ftrace.py
|
||||
@@ -12,6 +12,8 @@ __maintainer__ = "Stefan Hajnoczi"
|
||||
__email__ = "stefanha@redhat.com"
|
||||
|
||||
|
||||
+import os.path
|
||||
+
|
||||
from tracetool import out
|
||||
|
||||
|
||||
@@ -45,7 +47,7 @@ def generate_h(event, group):
|
||||
args=event.args,
|
||||
event_id="TRACE_" + event.name.upper(),
|
||||
event_lineno=event.lineno,
|
||||
- event_filename=event.filename,
|
||||
+ event_filename=os.path.relpath(event.filename),
|
||||
fmt=event.fmt.rstrip("\n"),
|
||||
argnames=argnames)
|
||||
|
||||
Index: qemu-8.0.0/scripts/tracetool/backend/log.py
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/scripts/tracetool/backend/log.py
|
||||
+++ qemu-8.0.0/scripts/tracetool/backend/log.py
|
||||
@@ -12,6 +12,8 @@ __maintainer__ = "Stefan Hajnoczi"
|
||||
__email__ = "stefanha@redhat.com"
|
||||
|
||||
|
||||
+import os.path
|
||||
+
|
||||
from tracetool import out
|
||||
|
||||
|
||||
@@ -53,7 +55,7 @@ def generate_h(event, group):
|
||||
' }',
|
||||
cond=cond,
|
||||
event_lineno=event.lineno,
|
||||
- event_filename=event.filename,
|
||||
+ event_filename=os.path.relpath(event.filename),
|
||||
name=event.name,
|
||||
fmt=event.fmt.rstrip("\n"),
|
||||
argnames=argnames)
|
||||
Index: qemu-8.0.0/scripts/tracetool/backend/syslog.py
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/scripts/tracetool/backend/syslog.py
|
||||
+++ qemu-8.0.0/scripts/tracetool/backend/syslog.py
|
||||
@@ -12,6 +12,8 @@ __maintainer__ = "Stefan Hajnoczi"
|
||||
__email__ = "stefanha@redhat.com"
|
||||
|
||||
|
||||
+import os.path
|
||||
+
|
||||
from tracetool import out
|
||||
|
||||
|
||||
@@ -41,7 +43,7 @@ def generate_h(event, group):
|
||||
' }',
|
||||
cond=cond,
|
||||
event_lineno=event.lineno,
|
||||
- event_filename=event.filename,
|
||||
+ event_filename=os.path.relpath(event.filename),
|
||||
name=event.name,
|
||||
fmt=event.fmt.rstrip("\n"),
|
||||
argnames=argnames)
|
||||
+355
@@ -0,0 +1,355 @@
|
||||
From 71f14902256e3c3529710b713e1ea43100bf4c40 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 17 Dec 2022 08:37:46 -0800
|
||||
Subject: [PATCH 2/2] linux-user: Replace use of lfs64 related functions and
|
||||
macros
|
||||
|
||||
Builds defines -D_FILE_OFFSET_BITS=64 which makes the original functions
|
||||
anf macros behave same as their 64 suffixed counterparts. This also
|
||||
helps in compiling with latest musl C library, where these macros and
|
||||
functions are no more available under _GNU_SOURCE feature macro
|
||||
|
||||
Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2022-12/msg02841.html]
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Laurent Vivier <laurent@vivier.eu>
|
||||
---
|
||||
linux-user/syscall.c | 153 +++++++++++--------------------------------
|
||||
1 file changed, 39 insertions(+), 114 deletions(-)
|
||||
|
||||
Index: qemu-8.0.0/linux-user/syscall.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/linux-user/syscall.c
|
||||
+++ qemu-8.0.0/linux-user/syscall.c
|
||||
@@ -761,8 +761,8 @@ safe_syscall6(ssize_t, copy_file_range,
|
||||
*/
|
||||
#define safe_ioctl(...) safe_syscall(__NR_ioctl, __VA_ARGS__)
|
||||
/* Similarly for fcntl. Note that callers must always:
|
||||
- * pass the F_GETLK64 etc constants rather than the unsuffixed F_GETLK
|
||||
- * use the flock64 struct rather than unsuffixed flock
|
||||
+ * pass the F_GETLK etc constants rather than the unsuffixed F_GETLK
|
||||
+ * use the flock struct rather than unsuffixed flock
|
||||
* This will then work and use a 64-bit offset for both 32-bit and 64-bit hosts.
|
||||
*/
|
||||
#ifdef __NR_fcntl64
|
||||
@@ -6813,13 +6813,13 @@ static int target_to_host_fcntl_cmd(int
|
||||
ret = cmd;
|
||||
break;
|
||||
case TARGET_F_GETLK:
|
||||
- ret = F_GETLK64;
|
||||
+ ret = F_GETLK;
|
||||
break;
|
||||
case TARGET_F_SETLK:
|
||||
- ret = F_SETLK64;
|
||||
+ ret = F_SETLK;
|
||||
break;
|
||||
case TARGET_F_SETLKW:
|
||||
- ret = F_SETLKW64;
|
||||
+ ret = F_SETLKW;
|
||||
break;
|
||||
case TARGET_F_GETOWN:
|
||||
ret = F_GETOWN;
|
||||
@@ -6833,17 +6833,6 @@ static int target_to_host_fcntl_cmd(int
|
||||
case TARGET_F_SETSIG:
|
||||
ret = F_SETSIG;
|
||||
break;
|
||||
-#if TARGET_ABI_BITS == 32
|
||||
- case TARGET_F_GETLK64:
|
||||
- ret = F_GETLK64;
|
||||
- break;
|
||||
- case TARGET_F_SETLK64:
|
||||
- ret = F_SETLK64;
|
||||
- break;
|
||||
- case TARGET_F_SETLKW64:
|
||||
- ret = F_SETLKW64;
|
||||
- break;
|
||||
-#endif
|
||||
case TARGET_F_SETLEASE:
|
||||
ret = F_SETLEASE;
|
||||
break;
|
||||
@@ -6895,8 +6884,8 @@ static int target_to_host_fcntl_cmd(int
|
||||
* them to 5, 6 and 7 before making the syscall(). Since we make the
|
||||
* syscall directly, adjust to what is supported by the kernel.
|
||||
*/
|
||||
- if (ret >= F_GETLK64 && ret <= F_SETLKW64) {
|
||||
- ret -= F_GETLK64 - 5;
|
||||
+ if (ret >= F_GETLK && ret <= F_SETLKW) {
|
||||
+ ret -= F_GETLK - 5;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -6929,55 +6918,11 @@ static int host_to_target_flock(int type
|
||||
return type;
|
||||
}
|
||||
|
||||
-static inline abi_long copy_from_user_flock(struct flock64 *fl,
|
||||
- abi_ulong target_flock_addr)
|
||||
-{
|
||||
- struct target_flock *target_fl;
|
||||
- int l_type;
|
||||
-
|
||||
- if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
|
||||
- return -TARGET_EFAULT;
|
||||
- }
|
||||
-
|
||||
- __get_user(l_type, &target_fl->l_type);
|
||||
- l_type = target_to_host_flock(l_type);
|
||||
- if (l_type < 0) {
|
||||
- return l_type;
|
||||
- }
|
||||
- fl->l_type = l_type;
|
||||
- __get_user(fl->l_whence, &target_fl->l_whence);
|
||||
- __get_user(fl->l_start, &target_fl->l_start);
|
||||
- __get_user(fl->l_len, &target_fl->l_len);
|
||||
- __get_user(fl->l_pid, &target_fl->l_pid);
|
||||
- unlock_user_struct(target_fl, target_flock_addr, 0);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline abi_long copy_to_user_flock(abi_ulong target_flock_addr,
|
||||
- const struct flock64 *fl)
|
||||
-{
|
||||
- struct target_flock *target_fl;
|
||||
- short l_type;
|
||||
-
|
||||
- if (!lock_user_struct(VERIFY_WRITE, target_fl, target_flock_addr, 0)) {
|
||||
- return -TARGET_EFAULT;
|
||||
- }
|
||||
-
|
||||
- l_type = host_to_target_flock(fl->l_type);
|
||||
- __put_user(l_type, &target_fl->l_type);
|
||||
- __put_user(fl->l_whence, &target_fl->l_whence);
|
||||
- __put_user(fl->l_start, &target_fl->l_start);
|
||||
- __put_user(fl->l_len, &target_fl->l_len);
|
||||
- __put_user(fl->l_pid, &target_fl->l_pid);
|
||||
- unlock_user_struct(target_fl, target_flock_addr, 1);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-typedef abi_long from_flock64_fn(struct flock64 *fl, abi_ulong target_addr);
|
||||
-typedef abi_long to_flock64_fn(abi_ulong target_addr, const struct flock64 *fl);
|
||||
+typedef abi_long from_flock_fn(struct flock *fl, abi_ulong target_addr);
|
||||
+typedef abi_long to_flock_fn(abi_ulong target_addr, const struct flock *fl);
|
||||
|
||||
#if defined(TARGET_ARM) && TARGET_ABI_BITS == 32
|
||||
-struct target_oabi_flock64 {
|
||||
+struct target_oabi_flock {
|
||||
abi_short l_type;
|
||||
abi_short l_whence;
|
||||
abi_llong l_start;
|
||||
@@ -6985,10 +6930,10 @@ struct target_oabi_flock64 {
|
||||
abi_int l_pid;
|
||||
} QEMU_PACKED;
|
||||
|
||||
-static inline abi_long copy_from_user_oabi_flock64(struct flock64 *fl,
|
||||
+static inline abi_long copy_from_user_oabi_flock(struct flock *fl,
|
||||
abi_ulong target_flock_addr)
|
||||
{
|
||||
- struct target_oabi_flock64 *target_fl;
|
||||
+ struct target_oabi_flock *target_fl;
|
||||
int l_type;
|
||||
|
||||
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
|
||||
@@ -7009,10 +6954,10 @@ static inline abi_long copy_from_user_oa
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static inline abi_long copy_to_user_oabi_flock64(abi_ulong target_flock_addr,
|
||||
- const struct flock64 *fl)
|
||||
+static inline abi_long copy_to_user_oabi_flock(abi_ulong target_flock_addr,
|
||||
+ const struct flock *fl)
|
||||
{
|
||||
- struct target_oabi_flock64 *target_fl;
|
||||
+ struct target_oabi_flock *target_fl;
|
||||
short l_type;
|
||||
|
||||
if (!lock_user_struct(VERIFY_WRITE, target_fl, target_flock_addr, 0)) {
|
||||
@@ -7030,10 +6975,10 @@ static inline abi_long copy_to_user_oabi
|
||||
}
|
||||
#endif
|
||||
|
||||
-static inline abi_long copy_from_user_flock64(struct flock64 *fl,
|
||||
+static inline abi_long copy_from_user_flock(struct flock *fl,
|
||||
abi_ulong target_flock_addr)
|
||||
{
|
||||
- struct target_flock64 *target_fl;
|
||||
+ struct target_flock *target_fl;
|
||||
int l_type;
|
||||
|
||||
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
|
||||
@@ -7054,10 +6999,10 @@ static inline abi_long copy_from_user_fl
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static inline abi_long copy_to_user_flock64(abi_ulong target_flock_addr,
|
||||
- const struct flock64 *fl)
|
||||
+static inline abi_long copy_to_user_flock(abi_ulong target_flock_addr,
|
||||
+ const struct flock *fl)
|
||||
{
|
||||
- struct target_flock64 *target_fl;
|
||||
+ struct target_flock *target_fl;
|
||||
short l_type;
|
||||
|
||||
if (!lock_user_struct(VERIFY_WRITE, target_fl, target_flock_addr, 0)) {
|
||||
@@ -7076,7 +7021,7 @@ static inline abi_long copy_to_user_floc
|
||||
|
||||
static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
||||
{
|
||||
- struct flock64 fl64;
|
||||
+ struct flock fl64;
|
||||
#ifdef F_GETOWN_EX
|
||||
struct f_owner_ex fox;
|
||||
struct target_f_owner_ex *target_fox;
|
||||
@@ -7089,6 +7034,7 @@ static abi_long do_fcntl(int fd, int cmd
|
||||
|
||||
switch(cmd) {
|
||||
case TARGET_F_GETLK:
|
||||
+ case TARGET_F_OFD_GETLK:
|
||||
ret = copy_from_user_flock(&fl64, arg);
|
||||
if (ret) {
|
||||
return ret;
|
||||
@@ -7098,32 +7044,11 @@ static abi_long do_fcntl(int fd, int cmd
|
||||
ret = copy_to_user_flock(arg, &fl64);
|
||||
}
|
||||
break;
|
||||
-
|
||||
case TARGET_F_SETLK:
|
||||
case TARGET_F_SETLKW:
|
||||
- ret = copy_from_user_flock(&fl64, arg);
|
||||
- if (ret) {
|
||||
- return ret;
|
||||
- }
|
||||
- ret = get_errno(safe_fcntl(fd, host_cmd, &fl64));
|
||||
- break;
|
||||
-
|
||||
- case TARGET_F_GETLK64:
|
||||
- case TARGET_F_OFD_GETLK:
|
||||
- ret = copy_from_user_flock64(&fl64, arg);
|
||||
- if (ret) {
|
||||
- return ret;
|
||||
- }
|
||||
- ret = get_errno(safe_fcntl(fd, host_cmd, &fl64));
|
||||
- if (ret == 0) {
|
||||
- ret = copy_to_user_flock64(arg, &fl64);
|
||||
- }
|
||||
- break;
|
||||
- case TARGET_F_SETLK64:
|
||||
- case TARGET_F_SETLKW64:
|
||||
case TARGET_F_OFD_SETLK:
|
||||
case TARGET_F_OFD_SETLKW:
|
||||
- ret = copy_from_user_flock64(&fl64, arg);
|
||||
+ ret = copy_from_user_flock(&fl64, arg);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
@@ -7348,7 +7273,7 @@ static inline abi_long target_truncate64
|
||||
arg2 = arg3;
|
||||
arg3 = arg4;
|
||||
}
|
||||
- return get_errno(truncate64(arg1, target_offset64(arg2, arg3)));
|
||||
+ return get_errno(truncate(arg1, target_offset64(arg2, arg3)));
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -7362,7 +7287,7 @@ static inline abi_long target_ftruncate6
|
||||
arg2 = arg3;
|
||||
arg3 = arg4;
|
||||
}
|
||||
- return get_errno(ftruncate64(arg1, target_offset64(arg2, arg3)));
|
||||
+ return get_errno(ftruncate(arg1, target_offset64(arg2, arg3)));
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -8598,7 +8523,7 @@ static int do_getdents(abi_long dirfd, a
|
||||
void *tdirp;
|
||||
int hlen, hoff, toff;
|
||||
int hreclen, treclen;
|
||||
- off64_t prev_diroff = 0;
|
||||
+ off_t prev_diroff = 0;
|
||||
|
||||
hdirp = g_try_malloc(count);
|
||||
if (!hdirp) {
|
||||
@@ -8651,7 +8576,7 @@ static int do_getdents(abi_long dirfd, a
|
||||
* Return what we have, resetting the file pointer to the
|
||||
* location of the first record not returned.
|
||||
*/
|
||||
- lseek64(dirfd, prev_diroff, SEEK_SET);
|
||||
+ lseek(dirfd, prev_diroff, SEEK_SET);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -8685,7 +8610,7 @@ static int do_getdents64(abi_long dirfd,
|
||||
void *tdirp;
|
||||
int hlen, hoff, toff;
|
||||
int hreclen, treclen;
|
||||
- off64_t prev_diroff = 0;
|
||||
+ off_t prev_diroff = 0;
|
||||
|
||||
hdirp = g_try_malloc(count);
|
||||
if (!hdirp) {
|
||||
@@ -8727,7 +8652,7 @@ static int do_getdents64(abi_long dirfd,
|
||||
* Return what we have, resetting the file pointer to the
|
||||
* location of the first record not returned.
|
||||
*/
|
||||
- lseek64(dirfd, prev_diroff, SEEK_SET);
|
||||
+ lseek(dirfd, prev_diroff, SEEK_SET);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -11158,7 +11083,7 @@ static abi_long do_syscall1(CPUArchState
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
}
|
||||
- ret = get_errno(pread64(arg1, p, arg3, target_offset64(arg4, arg5)));
|
||||
+ ret = get_errno(pread(arg1, p, arg3, target_offset64(arg4, arg5)));
|
||||
unlock_user(p, arg2, ret);
|
||||
return ret;
|
||||
case TARGET_NR_pwrite64:
|
||||
@@ -11175,7 +11100,7 @@ static abi_long do_syscall1(CPUArchState
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
}
|
||||
- ret = get_errno(pwrite64(arg1, p, arg3, target_offset64(arg4, arg5)));
|
||||
+ ret = get_errno(pwrite(arg1, p, arg3, target_offset64(arg4, arg5)));
|
||||
unlock_user(p, arg2, 0);
|
||||
return ret;
|
||||
#endif
|
||||
@@ -11998,14 +11923,14 @@ static abi_long do_syscall1(CPUArchState
|
||||
case TARGET_NR_fcntl64:
|
||||
{
|
||||
int cmd;
|
||||
- struct flock64 fl;
|
||||
- from_flock64_fn *copyfrom = copy_from_user_flock64;
|
||||
- to_flock64_fn *copyto = copy_to_user_flock64;
|
||||
+ struct flock fl;
|
||||
+ from_flock_fn *copyfrom = copy_from_user_flock;
|
||||
+ to_flock_fn *copyto = copy_to_user_flock;
|
||||
|
||||
#ifdef TARGET_ARM
|
||||
if (!cpu_env->eabi) {
|
||||
- copyfrom = copy_from_user_oabi_flock64;
|
||||
- copyto = copy_to_user_oabi_flock64;
|
||||
+ copyfrom = copy_from_user_oabi_flock;
|
||||
+ copyto = copy_to_user_oabi_flock;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -12015,7 +11940,7 @@ static abi_long do_syscall1(CPUArchState
|
||||
}
|
||||
|
||||
switch(arg2) {
|
||||
- case TARGET_F_GETLK64:
|
||||
+ case TARGET_F_GETLK:
|
||||
ret = copyfrom(&fl, arg3);
|
||||
if (ret) {
|
||||
break;
|
||||
@@ -12026,8 +11951,8 @@ static abi_long do_syscall1(CPUArchState
|
||||
}
|
||||
break;
|
||||
|
||||
- case TARGET_F_SETLK64:
|
||||
- case TARGET_F_SETLKW64:
|
||||
+ case TARGET_F_SETLK:
|
||||
+ case TARGET_F_SETLKW:
|
||||
ret = copyfrom(&fl, arg3);
|
||||
if (ret) {
|
||||
break;
|
||||
@@ -0,0 +1,44 @@
|
||||
From dc2a8ccd440ee3741b61606eafed3f7e092f4312 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Asselstine <mark.asselstine@windriver.com>
|
||||
Date: Tue, 26 Feb 2013 11:43:28 -0500
|
||||
Subject: [PATCH 03/12] apic: fixup fallthrough to PIC
|
||||
|
||||
Commit 0e21e12bb311c4c1095d0269dc2ef81196ccb60a [Don't route PIC
|
||||
interrupts through the local APIC if the local APIC config says so.]
|
||||
missed a check to ensure the local APIC is enabled. Since if the local
|
||||
APIC is disabled it doesn't matter what the local APIC config says.
|
||||
|
||||
If this check isn't done and the guest has disabled the local APIC the
|
||||
guest will receive a general protection fault, similar to what is seen
|
||||
here:
|
||||
|
||||
https://lists.gnu.org/archive/html/qemu-devel/2012-12/msg02304.html
|
||||
|
||||
The GPF is caused by an attempt to service interrupt 0xffffffff. This
|
||||
comes about since cpu_get_pic_interrupt() calls apic_accept_pic_intr()
|
||||
(with the local APIC disabled apic_get_interrupt() returns -1).
|
||||
apic_accept_pic_intr() returns 0 and thus the interrupt number which
|
||||
is returned from cpu_get_pic_interrupt(), and which is attempted to be
|
||||
serviced, is -1.
|
||||
|
||||
Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
|
||||
Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg00878.html]
|
||||
Signed-off-by: He Zhe <zhe.he@windriver.com>
|
||||
|
||||
---
|
||||
hw/intc/apic.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: qemu-8.0.0/hw/intc/apic.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/hw/intc/apic.c
|
||||
+++ qemu-8.0.0/hw/intc/apic.c
|
||||
@@ -607,7 +607,7 @@ int apic_accept_pic_intr(DeviceState *de
|
||||
APICCommonState *s = APIC(dev);
|
||||
uint32_t lvt0;
|
||||
|
||||
- if (!s)
|
||||
+ if (!s || !(s->spurious_vec & APIC_SV_ENABLE))
|
||||
return -1;
|
||||
|
||||
lvt0 = s->lvt[APIC_LVT_LINT0];
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
From d8265abdce5dc2bf74b3fccdf2b7257b4f3894f0 Mon Sep 17 00:00:00 2001
|
||||
From: He Zhe <zhe.he@windriver.com>
|
||||
Date: Wed, 28 Aug 2019 19:56:28 +0800
|
||||
Subject: [PATCH 04/12] configure: Add pkg-config handling for libgcrypt
|
||||
|
||||
libgcrypt may also be controlled by pkg-config, this patch adds pkg-config
|
||||
handling for libgcrypt.
|
||||
|
||||
Upstream-Status: Denied [https://lists.nongnu.org/archive/html/qemu-devel/2019-08/msg06333.html]
|
||||
|
||||
Signed-off-by: He Zhe <zhe.he@windriver.com>
|
||||
|
||||
---
|
||||
meson.build | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: qemu-8.0.0/meson.build
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/meson.build
|
||||
+++ qemu-8.0.0/meson.build
|
||||
@@ -1213,7 +1213,7 @@ endif
|
||||
if not gnutls_crypto.found()
|
||||
if (not get_option('gcrypt').auto() or have_system) and not get_option('nettle').enabled()
|
||||
gcrypt = dependency('libgcrypt', version: '>=1.8',
|
||||
- method: 'config-tool',
|
||||
+ method: 'pkg-config',
|
||||
required: get_option('gcrypt'),
|
||||
kwargs: static_kwargs)
|
||||
# Debian has removed -lgpg-error from libgcrypt-config
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
From f39e7bfc5ed07b5ecaeb705c4eae4855ca120d47 Mon Sep 17 00:00:00 2001
|
||||
From: Oleksiy Obitotskyy <oobitots@cisco.com>
|
||||
Date: Wed, 25 Mar 2020 21:21:35 +0200
|
||||
Subject: [PATCH 05/12] qemu: Do not include file if not exists
|
||||
|
||||
Script configure checks for if_alg.h and check failed but
|
||||
if_alg.h still included.
|
||||
|
||||
Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2020-03/msg07188.html]
|
||||
Signed-off-by: Oleksiy Obitotskyy <oobitots@cisco.com>
|
||||
|
||||
[update patch context]
|
||||
Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
|
||||
|
||||
---
|
||||
linux-user/syscall.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: qemu-8.0.0/linux-user/syscall.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/linux-user/syscall.c
|
||||
+++ qemu-8.0.0/linux-user/syscall.c
|
||||
@@ -115,7 +115,9 @@
|
||||
#include <linux/blkpg.h>
|
||||
#include <netpacket/packet.h>
|
||||
#include <linux/netlink.h>
|
||||
+#if defined(CONFIG_AF_ALG)
|
||||
#include <linux/if_alg.h>
|
||||
+#endif
|
||||
#include <linux/rtc.h>
|
||||
#include <sound/asound.h>
|
||||
#ifdef HAVE_BTRFS_H
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
From 375cae3dd6151ef33cae8f243f6a2c2da6c0c356 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Date: Fri, 8 Jan 2021 17:27:06 +0000
|
||||
Subject: [PATCH 06/12] qemu: Add some user space mmap tweaks to address musl
|
||||
32 bit
|
||||
|
||||
When using qemu-i386 to build qemux86 webkitgtk on musl, it sits in an
|
||||
infinite loop of mremap calls of ever decreasing/increasing addresses.
|
||||
|
||||
I suspect something in the musl memory allocation code loops indefinitely
|
||||
if it only sees ENOMEM and only exits when it hits EFAULT.
|
||||
|
||||
According to the docs, trying to mremap outside the address space
|
||||
can/should return EFAULT and changing this allows the build to succeed.
|
||||
|
||||
A better return value for the other cases of invalid addresses is EINVAL
|
||||
rather than ENOMEM so adjust the other part of the test to this.
|
||||
|
||||
Upstream-Status: Submitted [https://lists.gnu.org/archive/html/qemu-devel/2021-01/msg01355.html]
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org
|
||||
|
||||
---
|
||||
linux-user/mmap.c | 10 +++++++---
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: qemu-8.0.0/linux-user/mmap.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/linux-user/mmap.c
|
||||
+++ qemu-8.0.0/linux-user/mmap.c
|
||||
@@ -776,12 +776,16 @@ abi_long target_mremap(abi_ulong old_add
|
||||
int prot;
|
||||
void *host_addr;
|
||||
|
||||
- if (!guest_range_valid_untagged(old_addr, old_size) ||
|
||||
- ((flags & MREMAP_FIXED) &&
|
||||
+ if (!guest_range_valid_untagged(old_addr, old_size)) {
|
||||
+ errno = EFAULT;
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (((flags & MREMAP_FIXED) &&
|
||||
!guest_range_valid_untagged(new_addr, new_size)) ||
|
||||
((flags & MREMAP_MAYMOVE) == 0 &&
|
||||
!guest_range_valid_untagged(old_addr, new_size))) {
|
||||
- errno = ENOMEM;
|
||||
+ errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
From 50bab5c2605b609ea7ea154f57a9be96d656725a Mon Sep 17 00:00:00 2001
|
||||
From: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Date: Mon, 1 Mar 2021 13:00:47 +0000
|
||||
Subject: [PATCH 07/12] qemu: Determinism fixes
|
||||
|
||||
When sources are included within debug information, a couple of areas of the
|
||||
qemu build are not reproducible due to either full buildpaths or timestamps.
|
||||
|
||||
Replace the full paths with relative ones. I couldn't figure out how to get
|
||||
meson to pass relative paths but we can fix that in the script.
|
||||
|
||||
Upstream-Status: Pending [some version of all/part of this may be accepted]
|
||||
RP 2021/3/1
|
||||
|
||||
---
|
||||
scripts/decodetree.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: qemu-8.0.0/scripts/decodetree.py
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/scripts/decodetree.py
|
||||
+++ qemu-8.0.0/scripts/decodetree.py
|
||||
@@ -1328,7 +1328,7 @@ def main():
|
||||
toppat = ExcMultiPattern(0)
|
||||
|
||||
for filename in args:
|
||||
- input_file = filename
|
||||
+ input_file = os.path.relpath(filename)
|
||||
f = open(filename, 'rt', encoding='utf-8')
|
||||
parse_file(f, toppat)
|
||||
f.close()
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
From 2bf9388b801d4389e2d57e95a7897bfc1c42786e Mon Sep 17 00:00:00 2001
|
||||
From: Changqing Li <changqing.li@windriver.com>
|
||||
Date: Thu, 14 Jan 2021 06:33:04 +0000
|
||||
Subject: [PATCH 08/12] tests/meson.build: use relative path to refer to files
|
||||
|
||||
Fix error like:
|
||||
Fatal error: can't create tests/ptimer-test.p/..._qemu-5.2.0_hw_core_ptimer.c.o: File name too long
|
||||
|
||||
when build path is too long, use meson.source_root() will make this
|
||||
filename too long. Fixed by using relative path to refer to files
|
||||
|
||||
Upstream-Status: Submitted [send to qemu-devel]
|
||||
|
||||
Signed-off-by: Changqing Li <changqing.li@windriver.com>
|
||||
|
||||
---
|
||||
tests/unit/meson.build | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: qemu-8.0.0/tests/unit/meson.build
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/tests/unit/meson.build
|
||||
+++ qemu-8.0.0/tests/unit/meson.build
|
||||
@@ -46,7 +46,7 @@ tests = {
|
||||
'test-keyval': [testqapi],
|
||||
'test-logging': [],
|
||||
'test-uuid': [],
|
||||
- 'ptimer-test': ['ptimer-test-stubs.c', meson.project_source_root() / 'hw/core/ptimer.c'],
|
||||
+ 'ptimer-test': ['ptimer-test-stubs.c', '../../hw/core/ptimer.c'],
|
||||
'test-qapi-util': [],
|
||||
'test-interval-tree': [],
|
||||
'test-xs-node': [qom],
|
||||
@@ -136,7 +136,7 @@ if have_system
|
||||
'test-util-sockets': ['socket-helpers.c'],
|
||||
'test-base64': [],
|
||||
'test-bufferiszero': [],
|
||||
- 'test-smp-parse': [qom, meson.project_source_root() / 'hw/core/machine-smp.c'],
|
||||
+ 'test-smp-parse': [qom, '../../hw/core/machine-smp.c'],
|
||||
'test-vmstate': [migration, io],
|
||||
'test-yank': ['socket-helpers.c', qom, io, chardev]
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
From ebf4bb2f51da83af0c61480414cfa156f7308b34 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 21 Mar 2022 10:09:38 -0700
|
||||
Subject: [PATCH 09/12] Define MAP_SYNC and MAP_SHARED_VALIDATE on needed linux
|
||||
systems
|
||||
|
||||
linux only wires MAP_SYNC and MAP_SHARED_VALIDATE for architectures
|
||||
which include asm-generic/mman.h and mips/powerpc are not including this
|
||||
file in linux/mman.h, therefore these should be defined for such
|
||||
architectures on Linux as well. This fixes build on mips/musl/linux
|
||||
|
||||
Upstream-Status: Submitted [https://lists.nongnu.org/archive/html/qemu-devel/2022-03/msg05298.html]
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Zhang Yi <yi.z.zhang@linux.intel.com>
|
||||
Cc: Michael S. Tsirkin <mst@redhat.com>
|
||||
|
||||
---
|
||||
util/mmap-alloc.c | 10 +++++++---
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: qemu-8.0.0/util/mmap-alloc.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/util/mmap-alloc.c
|
||||
+++ qemu-8.0.0/util/mmap-alloc.c
|
||||
@@ -10,14 +10,18 @@
|
||||
* later. See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
+#include "qemu/osdep.h"
|
||||
#ifdef CONFIG_LINUX
|
||||
#include <linux/mman.h>
|
||||
-#else /* !CONFIG_LINUX */
|
||||
+#endif /* CONFIG_LINUX */
|
||||
+
|
||||
+#ifndef MAP_SYNC
|
||||
#define MAP_SYNC 0x0
|
||||
+#endif /* MAP_SYNC */
|
||||
+#ifndef MAP_SHARED_VALIDATE
|
||||
#define MAP_SHARED_VALIDATE 0x0
|
||||
-#endif /* CONFIG_LINUX */
|
||||
+#endif /* MAP_SHARED_VALIDATE */
|
||||
|
||||
-#include "qemu/osdep.h"
|
||||
#include "qemu/mmap-alloc.h"
|
||||
#include "qemu/host-utils.h"
|
||||
#include "qemu/cutils.h"
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
CVE: CVE-2022-1050
|
||||
Upstream-Status: Submitted [https://lore.kernel.org/qemu-devel/20220403095234.2210-1-yuval.shaia.ml@gmail.com/]
|
||||
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||
|
||||
From dbdef95c272e8f3ec037c3db4197c66002e30995 Mon Sep 17 00:00:00 2001
|
||||
From: Yuval Shaia <yuval.shaia.ml@gmail.com>
|
||||
Date: Sun, 3 Apr 2022 12:52:34 +0300
|
||||
Subject: [PATCH] hw/pvrdma: Protect against buggy or malicious guest driver
|
||||
|
||||
Guest driver might execute HW commands when shared buffers are not yet
|
||||
allocated.
|
||||
This could happen on purpose (malicious guest) or because of some other
|
||||
guest/host address mapping error.
|
||||
We need to protect againts such case.
|
||||
|
||||
Fixes: CVE-2022-1050
|
||||
|
||||
Reported-by: Raven <wxhusst@gmail.com>
|
||||
Signed-off-by: Yuval Shaia <yuval.shaia.ml@gmail.com>
|
||||
---
|
||||
hw/rdma/vmw/pvrdma_cmd.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
Index: qemu-8.0.0/hw/rdma/vmw/pvrdma_cmd.c
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/hw/rdma/vmw/pvrdma_cmd.c
|
||||
+++ qemu-8.0.0/hw/rdma/vmw/pvrdma_cmd.c
|
||||
@@ -782,6 +782,12 @@ int pvrdma_exec_cmd(PVRDMADev *dev)
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if (!dsr_info->dsr) {
|
||||
+ /* Buggy or malicious guest driver */
|
||||
+ rdma_error_report("Exec command without dsr, req or rsp buffers");
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
if (dsr_info->req->hdr.cmd >= sizeof(cmd_handlers) /
|
||||
sizeof(struct cmd_handler)) {
|
||||
rdma_error_report("Unsupported command");
|
||||
@@ -0,0 +1,38 @@
|
||||
From 76c3fc4c87231bed32974ebbbdb5079cff45a6b7 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Date: Tue, 5 Jan 2021 23:00:14 +0000
|
||||
Subject: [PATCH 12/12] qemu: Upgrade 5.1.0->5.2.0
|
||||
|
||||
We need to be able to trigger configure's cross code but we don't want
|
||||
to set cross_prefix as it does other things we don't want. Patch things
|
||||
so we can do what we need in the target config case.
|
||||
|
||||
Upstream-Status: Inappropriate [may be rewritten in a way upstream may accept?]
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
---
|
||||
configure | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
Index: qemu-8.0.0/configure
|
||||
===================================================================
|
||||
--- qemu-8.0.0.orig/configure
|
||||
+++ qemu-8.0.0/configure
|
||||
@@ -2590,7 +2590,6 @@ if test "$skip_meson" = no; then
|
||||
echo "widl = [$(meson_quote $widl)]" >> $cross
|
||||
echo "windres = [$(meson_quote $windres)]" >> $cross
|
||||
echo "windmc = [$(meson_quote $windmc)]" >> $cross
|
||||
- if test "$cross_compile" = "yes"; then
|
||||
cross_arg="--cross-file config-meson.cross"
|
||||
echo "[host_machine]" >> $cross
|
||||
echo "system = '$targetos'" >> $cross
|
||||
@@ -2608,9 +2607,6 @@ if test "$skip_meson" = no; then
|
||||
else
|
||||
echo "endian = 'little'" >> $cross
|
||||
fi
|
||||
- else
|
||||
- cross_arg="--native-file config-meson.cross"
|
||||
- fi
|
||||
mv $cross config-meson.cross
|
||||
|
||||
rm -rf meson-private meson-info meson-logs
|
||||
Binary file not shown.
@@ -0,0 +1,75 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
# Initially written by: Michael Tokarev <mjt@tls.msk.ru>
|
||||
# For QEMU Debian downstream package
|
||||
|
||||
set -e
|
||||
|
||||
. /etc/init.d/functions
|
||||
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
||||
DESC="QEMU Guest Agent"
|
||||
NAME=qemu-ga
|
||||
DAEMON=@bindir@/$NAME
|
||||
PIDFILE=/var/run/$NAME.pid
|
||||
|
||||
# config
|
||||
DAEMON_ARGS=""
|
||||
# default transport
|
||||
TRANSPORT=virtio-serial:/dev/virtio-ports/org.qemu.guest_agent.0
|
||||
NO_START=0
|
||||
|
||||
test ! -r /etc/default/qemu-guest-agent || . /etc/default/qemu-guest-agent
|
||||
test "$NO_START" = "0" || exit 0
|
||||
test -x "$DAEMON" || exit 0
|
||||
|
||||
#
|
||||
# Function that checks whenever system has necessary environment
|
||||
# It also splits $TRANSPORT into $method and $path
|
||||
#
|
||||
do_check_transport() {
|
||||
method=${TRANSPORT%%:*};
|
||||
path=${TRANSPORT#*:}
|
||||
case "$method" in
|
||||
virtio-serial | isa-serial)
|
||||
if [ ! -e "$path" ]; then
|
||||
echo "$NAME: transport endpoint not found, not starting"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
do_check_transport || exit 0
|
||||
echo -n "Starting $DESC: "
|
||||
start-stop-daemon -S -p $PIDFILE -x "$DAEMON" -- \
|
||||
$DAEMON_ARGS -d -m "$method" -p "$path"
|
||||
echo "$NAME."
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping $DESC: "
|
||||
start-stop-daemon -K -x "$DAEMON" -p $PIDFILE
|
||||
echo "$NAME."
|
||||
;;
|
||||
status)
|
||||
status "$DAEMON"
|
||||
exit $?
|
||||
;;
|
||||
restart|force-reload)
|
||||
do_check_transport || exit 0
|
||||
echo -n "Restarting $DESC: "
|
||||
start-stop-daemon -K -x "$DAEMON" -p $PIDFILE
|
||||
sleep 1
|
||||
start-stop-daemon -S -p $PIDFILE -x "$DAEMON" -- \
|
||||
$DAEMON_ARGS -d -m "$method" -p "$path"
|
||||
echo "$NAME."
|
||||
;;
|
||||
*)
|
||||
N=/etc/init.d/$NAME
|
||||
echo "Usage: $N {start|stop|status|restart|force-reload}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,2 @@
|
||||
SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \
|
||||
TAG+="systemd", ENV{SYSTEMD_WANTS}="qemu-guest-agent.service"
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
#This script is used to run qemu test suites
|
||||
#
|
||||
|
||||
ptestdir=$(dirname "$(readlink -f "$0")")
|
||||
export SRC_PATH=$ptestdir
|
||||
|
||||
cd $ptestdir/tests
|
||||
tests=$(find . -name "test-*" ! -name "*.p")
|
||||
for f in $tests; do
|
||||
$f | sed '/^ok/ s/ok/PASS:/g'
|
||||
done
|
||||
@@ -0,0 +1,27 @@
|
||||
BBCLASSEXTEND = "nativesdk"
|
||||
|
||||
require qemu.inc
|
||||
|
||||
DEPENDS = "glib-2.0 zlib pixman bison-native ninja-native meson-native"
|
||||
|
||||
DEPENDS:append:libc-musl = " libucontext"
|
||||
|
||||
CFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
|
||||
|
||||
RDEPENDS:${PN}:class-target += "bash"
|
||||
|
||||
EXTRA_OECONF:append:class-target = " --target-list=${@get_qemu_target_list(d)}"
|
||||
EXTRA_OECONF:append:class-target:mipsarcho32 = "${@bb.utils.contains('BBEXTENDCURR', 'multilib', ' --disable-capstone', '', d)}"
|
||||
EXTRA_OECONF:append:class-nativesdk = " --target-list=${@get_qemu_target_list(d)}"
|
||||
|
||||
PACKAGECONFIG ??= " \
|
||||
fdt sdl kvm pie slirp \
|
||||
${@bb.utils.filter('DISTRO_FEATURES', 'alsa xen', d)} \
|
||||
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer epoxy', '', d)} \
|
||||
${@bb.utils.filter('DISTRO_FEATURES', 'seccomp', d)} \
|
||||
"
|
||||
PACKAGECONFIG:class-nativesdk ??= "fdt sdl kvm pie slirp \
|
||||
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virglrenderer epoxy', '', d)} \
|
||||
"
|
||||
# ppc32 hosts are no longer supported in qemu
|
||||
COMPATIBLE_HOST:powerpc = "null"
|
||||
@@ -0,0 +1,40 @@
|
||||
SUMMARY = "QEMU wrapper script"
|
||||
HOMEPAGE = "http://qemu.org"
|
||||
LICENSE = "MIT"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
DEPENDS += "qemu-native"
|
||||
|
||||
inherit qemu
|
||||
|
||||
do_populate_sysroot[depends] = ""
|
||||
|
||||
do_install () {
|
||||
install -d ${D}${bindir_crossscripts}/
|
||||
|
||||
qemu_binary=${@qemu_target_binary(d)}
|
||||
qemu_options='${QEMU_OPTIONS} -E LD_LIBRARY_PATH=$D${libdir}:$D${base_libdir}'
|
||||
|
||||
cat >> ${D}${bindir_crossscripts}/${MLPREFIX}qemuwrapper << EOF
|
||||
#!/bin/sh
|
||||
# Wrapper script to run binaries under qemu user-mode emulation
|
||||
set -x
|
||||
|
||||
if [ ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)} = False -a "${PN}" != "nativesdk-qemuwrapper-cross" ]; then
|
||||
echo "qemuwrapper: qemu usermode is not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
$qemu_binary $qemu_options "\$@"
|
||||
EOF
|
||||
|
||||
chmod +x ${D}${bindir_crossscripts}/${MLPREFIX}qemuwrapper
|
||||
}
|
||||
|
||||
SYSROOT_DIRS += "${bindir_crossscripts}"
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
|
||||
BBCLASSEXTEND = "nativesdk"
|
||||
Reference in New Issue
Block a user