Complete Yocto mirror with license table for TQMa6UL (2038-compliance)
- 264 license table entries with exact download URLs (224/264 resolved) - Complete sources/ directory with all BitBake recipes - Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl) - Full traceability for Softwarefreigabeantrag - GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4 - License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
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 \
|
||||
"
|
||||
|
||||
|
||||
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,23 @@
|
||||
SUMMARY = "Helper utilities needed by the runqemu script"
|
||||
LICENSE = "GPL-2.0-only"
|
||||
RDEPENDS:${PN} = "qemu-system-native"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
7
sources/poky/meta/recipes-devtools/qemu/qemu-native.inc
Normal file
7
sources/poky/meta/recipes-devtools/qemu/qemu-native.inc
Normal file
@@ -0,0 +1,7 @@
|
||||
require qemu.inc
|
||||
|
||||
inherit_defer 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"
|
||||
|
||||
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,31 @@
|
||||
BPN = "qemu"
|
||||
|
||||
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"
|
||||
|
||||
EXTRA_OECONF:append = " --target-list=${@get_qemu_system_target_list(d)}"
|
||||
|
||||
PACKAGECONFIG ??= "fdt alsa kvm pie slirp png \
|
||||
${@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/
|
||||
}
|
||||
28
sources/poky/meta/recipes-devtools/qemu/qemu-targets.inc
Normal file
28
sources/poky/meta/recipes-devtools/qemu/qemu-targets.inc
Normal file
@@ -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(',')))
|
||||
316
sources/poky/meta/recipes-devtools/qemu/qemu.inc
Normal file
316
sources/poky/meta/recipes-devtools/qemu/qemu.inc
Normal file
@@ -0,0 +1,316 @@
|
||||
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"
|
||||
|
||||
DEPENDS += "bison-native meson-native ninja-native"
|
||||
|
||||
RDEPENDS:${PN}-ptest = "bash"
|
||||
|
||||
require qemu-targets.inc
|
||||
# https://gitlab.com/qemu-project/qemu/-/commit/81e2b198a8cb4ee5fdf108bd438f44b193ee3a36 means
|
||||
# we need a full python3-native setup
|
||||
inherit pkgconfig ptest update-rc.d systemd python3native
|
||||
|
||||
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://fixedmeson.patch \
|
||||
file://no-pip.patch \
|
||||
file://4a8579ad8629b57a43daa62e46cc7af6e1078116.patch \
|
||||
file://0002-linux-user-loongarch64-Remove-TARGET_FORCE_SHMLBA.patch \
|
||||
file://0003-linux-user-Add-strace-for-shmat.patch \
|
||||
file://0004-linux-user-Rewrite-target_shmat.patch \
|
||||
file://0005-tests-tcg-Check-that-shmat-does-not-break-proc-self-.patch \
|
||||
file://0001-sched_attr-Do-not-define-for-glibc-2.41.patch \
|
||||
file://qemu-guest-agent.init \
|
||||
file://qemu-guest-agent.udev \
|
||||
"
|
||||
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
||||
|
||||
# SDK_OLDEST_KERNEL is set below 4.17, which is the minimum version required by QEMU >= 8.1
|
||||
# This is due to two MMAP flags being used at certain points
|
||||
SRC_URI:append:class-nativesdk = " \
|
||||
file://0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch \
|
||||
file://0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch \
|
||||
"
|
||||
|
||||
# Support building and using native version on pre 4.17 kernels
|
||||
SRC_URI:append:class-native = " \
|
||||
file://0011-linux-user-workaround-for-missing-MAP_FIXED_NOREPLAC.patch \
|
||||
file://0012-linux-user-workaround-for-missing-MAP_SHARED_VALIDAT.patch \
|
||||
"
|
||||
|
||||
SRC_URI[sha256sum] = "1f0604f296ab9acb4854c054764a1ba408643fc299bd54a6500cccfaaca65b55"
|
||||
|
||||
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"
|
||||
|
||||
# As per https://bugzilla.redhat.com/show_bug.cgi?id=2203387
|
||||
CVE_STATUS[CVE-2023-2680] = "not-applicable-platform: RHEL specific issue."
|
||||
|
||||
CVE_STATUS[CVE-2023-3019] = "cpe-incorrect: Applies only against versions before 8.2.0"
|
||||
|
||||
CVE_STATUS[CVE-2023-5088] = "cpe-incorrect: Applies only against version 8.2.0 and earlier"
|
||||
|
||||
CVE_STATUS[CVE-2023-6683] = "cpe-incorrect: Applies only against version 8.2.1 and earlier"
|
||||
|
||||
CVE_STATUS[CVE-2023-6693] = "cpe-incorrect: Applies only against version 8.2.0 and earlier"
|
||||
|
||||
# NVD DB has this CVE as version-less (with "-")
|
||||
CVE_STATUS[CVE-2024-6505] = "fixed-version: this CVE is fixed since 9.1.0"
|
||||
|
||||
CVE_STATUS[CVE-2023-1386] = "disputed: not an issue as per https://bugzilla.redhat.com/show_bug.cgi?id=2223985"
|
||||
|
||||
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}' \
|
||||
--disable-download \
|
||||
--disable-docs \
|
||||
--host-cc='${BUILD_CC}' \
|
||||
--disable-af-xdp \
|
||||
${PACKAGECONFIG_CONFARGS} \
|
||||
"
|
||||
|
||||
EXTRA_OECONF:append:class-target = " --cross-prefix=${HOST_PREFIX}"
|
||||
EXTRA_OECONF:append:class-nativesdk = " --cross-prefix=${HOST_PREFIX}"
|
||||
|
||||
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() {
|
||||
export PKG_CONFIG=pkg-config
|
||||
${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
|
||||
# ELF binary /usr/share/qemu/s390-netboot.img has relocations in .text
|
||||
rm ${D}${datadir}/qemu/s390-netboot.img -f
|
||||
# ELF binary /usr/share/qemu/s390-ccw.img has relocations in .text [textrel]
|
||||
rm ${D}${datadir}/qemu/s390-ccw.img -f
|
||||
}
|
||||
|
||||
# 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+ pie"
|
||||
|
||||
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[dax] = "--enable-libdaxctl,--disable-libdaxctl,ndctl"
|
||||
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[dbus-display] = "--enable-dbus-display,--disable-dbus-display,glib-2.0-native,dbus"
|
||||
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,udev"
|
||||
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[fuse] = "--enable-fuse --enable-fuse-lseek,--disable-fuse --disable-fuse-lseek,fuse3"
|
||||
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"
|
||||
PACKAGECONFIG[pipewire] = "--enable-pipewire,--disable-pipewire,pipewire"
|
||||
PACKAGECONFIG[sndio] = "--enable-sndio,--disable-sndio,sndio"
|
||||
|
||||
INSANE_SKIP:${PN}-common = "arch"
|
||||
|
||||
FILES:${PN} += "${datadir}/icons"
|
||||
|
||||
# For user who want to install all arch packages
|
||||
PACKAGES =+ "${PN}-common"
|
||||
RDEPENDS:${PN} += "${PN}-common"
|
||||
|
||||
ALLOW_EMPTY:${PN} = "1"
|
||||
FILES:${PN} = ""
|
||||
|
||||
FILES:${PN}-common = "${bindir}/* ${includedir}/* ${libexecdir}/* ${datadir}/* ${localstatedir}"
|
||||
|
||||
PACKAGES_DYNAMIC += "^${PN}-user-.* ^${PN}-system-.*"
|
||||
|
||||
PACKAGESPLITFUNCS =+ "split_qemu_packages"
|
||||
|
||||
python split_qemu_packages () {
|
||||
archdir = d.expand('${bindir}/')
|
||||
subpackages = do_split_packages(d, archdir, r'^qemu-system-(.*)$', '${PN}-system-%s', 'QEMU full system emulation binaries(%s)' , prepend=True, extra_depends='${PN}-common')
|
||||
|
||||
subpackages += 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, extra_depends='${PN}-common')
|
||||
if subpackages:
|
||||
d.appendVar('RDEPENDS:' + d.getVar('PN'), ' ' + ' '.join(subpackages))
|
||||
mipspackage = d.getVar('PN') + "-user-mips"
|
||||
if mipspackage in ' '.join(subpackages):
|
||||
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"
|
||||
@@ -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
|
||||
@@ -0,0 +1,47 @@
|
||||
From ddb27569449c941014fa44b1b542de0831d993a0 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Thu, 10 Oct 2024 22:40:32 -0700
|
||||
Subject: [PATCH v2] sched_attr: Do not define for glibc >= 2.41
|
||||
|
||||
glibc 2.41+ has added [1] definitions for sched_setattr and sched_getattr functions
|
||||
and struct sched_attr. Therefore, it needs to be checked for here as well before
|
||||
defining sched_attr
|
||||
|
||||
Define sched_attr conditionally on SCHED_ATTR_SIZE_VER0
|
||||
|
||||
Fixes builds with glibc/trunk
|
||||
|
||||
[1] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=21571ca0d70302909cf72707b2a7736cf12190a0;hp=298bc488fdc047da37482f4003023cb9adef78f8
|
||||
|
||||
Upstream-Status: Submitted [https://patchwork.ozlabs.org/project/qemu-devel/patch/20241011193140.1047648-1-raj.khem@gmail.com/]
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Laurent Vivier <laurent@vivier.eu>
|
||||
Cc: Paolo Bonzini <pbonzini@redhat.com>
|
||||
---
|
||||
v2: Use SCHED_ATTR_SIZE_VER0 instead of glibc version check
|
||||
|
||||
linux-user/syscall.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||
index 1354e75694..caecbb765d 100644
|
||||
--- a/linux-user/syscall.c
|
||||
+++ b/linux-user/syscall.c
|
||||
@@ -359,7 +359,8 @@ _syscall3(int, sys_sched_getaffinity, pid_t, pid, unsigned int, len,
|
||||
#define __NR_sys_sched_setaffinity __NR_sched_setaffinity
|
||||
_syscall3(int, sys_sched_setaffinity, pid_t, pid, unsigned int, len,
|
||||
unsigned long *, user_mask_ptr);
|
||||
-/* sched_attr is not defined in glibc */
|
||||
+/* sched_attr is not defined in glibc < 2.41 */
|
||||
+#ifndef SCHED_ATTR_SIZE_VER0
|
||||
struct sched_attr {
|
||||
uint32_t size;
|
||||
uint32_t sched_policy;
|
||||
@@ -372,6 +373,7 @@ struct sched_attr {
|
||||
uint32_t sched_util_min;
|
||||
uint32_t sched_util_max;
|
||||
};
|
||||
+#endif
|
||||
#define __NR_sys_sched_getattr __NR_sched_getattr
|
||||
_syscall4(int, sys_sched_getattr, pid_t, pid, struct sched_attr *, attr,
|
||||
unsigned int, size, unsigned int, flags);
|
||||
@@ -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,43 @@
|
||||
From 5bf65b24414d3ff8339f6f1beb221c7c35c91e5d Mon Sep 17 00:00:00 2001
|
||||
From: Richard Henderson <richard.henderson@linaro.org>
|
||||
Date: Wed, 28 Feb 2024 10:25:15 -1000
|
||||
Subject: [PATCH 2/5] linux-user/loongarch64: Remove TARGET_FORCE_SHMLBA
|
||||
|
||||
The kernel abi was changed with
|
||||
|
||||
commit d23b77953f5a4fbf94c05157b186aac2a247ae32
|
||||
Author: Huacai Chen <chenhuacai@kernel.org>
|
||||
Date: Wed Jan 17 12:43:08 2024 +0800
|
||||
|
||||
LoongArch: Change SHMLBA from SZ_64K to PAGE_SIZE
|
||||
|
||||
during the v6.8 cycle.
|
||||
|
||||
Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
|
||||
|
||||
Reviewed-by: Song Gao <gaosong@loongson.cn>
|
||||
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
---
|
||||
linux-user/loongarch64/target_syscall.h | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
diff --git a/linux-user/loongarch64/target_syscall.h b/linux-user/loongarch64/target_syscall.h
|
||||
index 8b5de5212..39f229bb9 100644
|
||||
--- a/linux-user/loongarch64/target_syscall.h
|
||||
+++ b/linux-user/loongarch64/target_syscall.h
|
||||
@@ -38,11 +38,4 @@ struct target_pt_regs {
|
||||
#define TARGET_MCL_FUTURE 2
|
||||
#define TARGET_MCL_ONFAULT 4
|
||||
|
||||
-#define TARGET_FORCE_SHMLBA
|
||||
-
|
||||
-static inline abi_ulong target_shmlba(CPULoongArchState *env)
|
||||
-{
|
||||
- return 64 * KiB;
|
||||
-}
|
||||
-
|
||||
#endif
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -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];
|
||||
@@ -0,0 +1,71 @@
|
||||
From e8f06676c6c88e12cd5f4f81a839b7111c683596 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Henderson <richard.henderson@linaro.org>
|
||||
Date: Wed, 28 Feb 2024 10:25:16 -1000
|
||||
Subject: [PATCH 3/5] linux-user: Add strace for shmat
|
||||
|
||||
Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
|
||||
|
||||
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
---
|
||||
linux-user/strace.c | 23 +++++++++++++++++++++++
|
||||
linux-user/strace.list | 2 +-
|
||||
2 files changed, 24 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/linux-user/strace.c b/linux-user/strace.c
|
||||
index cf26e5526..47d6ec326 100644
|
||||
--- a/linux-user/strace.c
|
||||
+++ b/linux-user/strace.c
|
||||
@@ -670,6 +670,25 @@ print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
}
|
||||
#endif
|
||||
|
||||
+static void
|
||||
+print_shmat(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
+ abi_long arg0, abi_long arg1, abi_long arg2,
|
||||
+ abi_long arg3, abi_long arg4, abi_long arg5)
|
||||
+{
|
||||
+ static const struct flags shmat_flags[] = {
|
||||
+ FLAG_GENERIC(SHM_RND),
|
||||
+ FLAG_GENERIC(SHM_REMAP),
|
||||
+ FLAG_GENERIC(SHM_RDONLY),
|
||||
+ FLAG_GENERIC(SHM_EXEC),
|
||||
+ };
|
||||
+
|
||||
+ print_syscall_prologue(name);
|
||||
+ print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
|
||||
+ print_pointer(arg1, 0);
|
||||
+ print_flags(shmat_flags, arg2, 1);
|
||||
+ print_syscall_epilogue(name);
|
||||
+}
|
||||
+
|
||||
#ifdef TARGET_NR_ipc
|
||||
static void
|
||||
print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
@@ -683,6 +702,10 @@ print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
print_ipc_cmd(arg3);
|
||||
qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
|
||||
break;
|
||||
+ case IPCOP_shmat:
|
||||
+ print_shmat(cpu_env, &(const struct syscallname){ .name = "shmat" },
|
||||
+ arg1, arg4, arg2, 0, 0, 0);
|
||||
+ break;
|
||||
default:
|
||||
qemu_log(("%s("
|
||||
TARGET_ABI_FMT_ld ","
|
||||
diff --git a/linux-user/strace.list b/linux-user/strace.list
|
||||
index 6655d4f26..dfd4237d1 100644
|
||||
--- a/linux-user/strace.list
|
||||
+++ b/linux-user/strace.list
|
||||
@@ -1398,7 +1398,7 @@
|
||||
{ TARGET_NR_sgetmask, "sgetmask" , NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef TARGET_NR_shmat
|
||||
-{ TARGET_NR_shmat, "shmat" , NULL, NULL, print_syscall_ret_addr },
|
||||
+{ TARGET_NR_shmat, "shmat" , NULL, print_shmat, print_syscall_ret_addr },
|
||||
#endif
|
||||
#ifdef TARGET_NR_shmctl
|
||||
{ TARGET_NR_shmctl, "shmctl" , NULL, NULL, NULL },
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -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.1.0/meson.build
|
||||
===================================================================
|
||||
--- qemu-8.1.0.orig/meson.build
|
||||
+++ qemu-8.1.0/meson.build
|
||||
@@ -1481,7 +1481,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'))
|
||||
# Debian has removed -lgpg-error from libgcrypt-config
|
||||
# as it "spreads unnecessary dependencies" which in
|
||||
@@ -0,0 +1,236 @@
|
||||
From cb48d5d1592e63ebd0d4a3e300ef98e38e6306d7 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Henderson <richard.henderson@linaro.org>
|
||||
Date: Wed, 28 Feb 2024 10:25:17 -1000
|
||||
Subject: [PATCH 4/5] linux-user: Rewrite target_shmat
|
||||
|
||||
Handle combined host and guest alignment requirements.
|
||||
Handle host and guest page size differences.
|
||||
Handle SHM_EXEC.
|
||||
|
||||
Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
|
||||
|
||||
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/115
|
||||
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
---
|
||||
linux-user/mmap.c | 166 +++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 133 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
||||
index 18fb3aaf7..6a2f649bb 100644
|
||||
--- a/linux-user/mmap.c
|
||||
+++ b/linux-user/mmap.c
|
||||
@@ -1062,69 +1062,161 @@ static inline abi_ulong target_shmlba(CPUArchState *cpu_env)
|
||||
}
|
||||
#endif
|
||||
|
||||
+#if defined(__arm__) || defined(__mips__) || defined(__sparc__)
|
||||
+#define HOST_FORCE_SHMLBA 1
|
||||
+#else
|
||||
+#define HOST_FORCE_SHMLBA 0
|
||||
+#endif
|
||||
+
|
||||
abi_ulong target_shmat(CPUArchState *cpu_env, int shmid,
|
||||
abi_ulong shmaddr, int shmflg)
|
||||
{
|
||||
CPUState *cpu = env_cpu(cpu_env);
|
||||
- abi_ulong raddr;
|
||||
struct shmid_ds shm_info;
|
||||
int ret;
|
||||
- abi_ulong shmlba;
|
||||
+ int h_pagesize;
|
||||
+ int t_shmlba, h_shmlba, m_shmlba;
|
||||
+ size_t t_len, h_len, m_len;
|
||||
|
||||
/* shmat pointers are always untagged */
|
||||
|
||||
- /* find out the length of the shared memory segment */
|
||||
+ /*
|
||||
+ * Because we can't use host shmat() unless the address is sufficiently
|
||||
+ * aligned for the host, we'll need to check both.
|
||||
+ * TODO: Could be fixed with softmmu.
|
||||
+ */
|
||||
+ t_shmlba = target_shmlba(cpu_env);
|
||||
+ h_pagesize = qemu_real_host_page_size();
|
||||
+ h_shmlba = (HOST_FORCE_SHMLBA ? SHMLBA : h_pagesize);
|
||||
+ m_shmlba = MAX(t_shmlba, h_shmlba);
|
||||
+
|
||||
+ if (shmaddr) {
|
||||
+ if (shmaddr & (m_shmlba - 1)) {
|
||||
+ if (shmflg & SHM_RND) {
|
||||
+ /*
|
||||
+ * The guest is allowing the kernel to round the address.
|
||||
+ * Assume that the guest is ok with us rounding to the
|
||||
+ * host required alignment too. Anyway if we don't, we'll
|
||||
+ * get an error from the kernel.
|
||||
+ */
|
||||
+ shmaddr &= ~(m_shmlba - 1);
|
||||
+ if (shmaddr == 0 && (shmflg & SHM_REMAP)) {
|
||||
+ return -TARGET_EINVAL;
|
||||
+ }
|
||||
+ } else {
|
||||
+ int require = TARGET_PAGE_SIZE;
|
||||
+#ifdef TARGET_FORCE_SHMLBA
|
||||
+ require = t_shmlba;
|
||||
+#endif
|
||||
+ /*
|
||||
+ * Include host required alignment, as otherwise we cannot
|
||||
+ * use host shmat at all.
|
||||
+ */
|
||||
+ require = MAX(require, h_shmlba);
|
||||
+ if (shmaddr & (require - 1)) {
|
||||
+ return -TARGET_EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (shmflg & SHM_REMAP) {
|
||||
+ return -TARGET_EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
+ /* All rounding now manually concluded. */
|
||||
+ shmflg &= ~SHM_RND;
|
||||
+
|
||||
+ /* Find out the length of the shared memory segment. */
|
||||
ret = get_errno(shmctl(shmid, IPC_STAT, &shm_info));
|
||||
if (is_error(ret)) {
|
||||
/* can't get length, bail out */
|
||||
return ret;
|
||||
}
|
||||
+ t_len = TARGET_PAGE_ALIGN(shm_info.shm_segsz);
|
||||
+ h_len = ROUND_UP(shm_info.shm_segsz, h_pagesize);
|
||||
+ m_len = MAX(t_len, h_len);
|
||||
|
||||
- shmlba = target_shmlba(cpu_env);
|
||||
-
|
||||
- if (shmaddr & (shmlba - 1)) {
|
||||
- if (shmflg & SHM_RND) {
|
||||
- shmaddr &= ~(shmlba - 1);
|
||||
- } else {
|
||||
- return -TARGET_EINVAL;
|
||||
- }
|
||||
- }
|
||||
- if (!guest_range_valid_untagged(shmaddr, shm_info.shm_segsz)) {
|
||||
+ if (!guest_range_valid_untagged(shmaddr, m_len)) {
|
||||
return -TARGET_EINVAL;
|
||||
}
|
||||
|
||||
WITH_MMAP_LOCK_GUARD() {
|
||||
- void *host_raddr;
|
||||
+ bool mapped = false;
|
||||
+ void *want, *test;
|
||||
abi_ulong last;
|
||||
|
||||
- if (shmaddr) {
|
||||
- host_raddr = shmat(shmid, (void *)g2h_untagged(shmaddr), shmflg);
|
||||
+ if (!shmaddr) {
|
||||
+ shmaddr = mmap_find_vma(0, m_len, m_shmlba);
|
||||
+ if (shmaddr == -1) {
|
||||
+ return -TARGET_ENOMEM;
|
||||
+ }
|
||||
+ mapped = !reserved_va;
|
||||
+ } else if (shmflg & SHM_REMAP) {
|
||||
+ /*
|
||||
+ * If host page size > target page size, the host shmat may map
|
||||
+ * more memory than the guest expects. Reject a mapping that
|
||||
+ * would replace memory in the unexpected gap.
|
||||
+ * TODO: Could be fixed with softmmu.
|
||||
+ */
|
||||
+ if (t_len < h_len &&
|
||||
+ !page_check_range_empty(shmaddr + t_len,
|
||||
+ shmaddr + h_len - 1)) {
|
||||
+ return -TARGET_EINVAL;
|
||||
+ }
|
||||
} else {
|
||||
- abi_ulong mmap_start;
|
||||
+ if (!page_check_range_empty(shmaddr, shmaddr + m_len - 1)) {
|
||||
+ return -TARGET_EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- /* In order to use the host shmat, we need to honor host SHMLBA. */
|
||||
- mmap_start = mmap_find_vma(0, shm_info.shm_segsz,
|
||||
- MAX(SHMLBA, shmlba));
|
||||
+ /* All placement is now complete. */
|
||||
+ want = (void *)g2h_untagged(shmaddr);
|
||||
|
||||
- if (mmap_start == -1) {
|
||||
- return -TARGET_ENOMEM;
|
||||
+ /*
|
||||
+ * Map anonymous pages across the entire range, then remap with
|
||||
+ * the shared memory. This is required for a number of corner
|
||||
+ * cases for which host and guest page sizes differ.
|
||||
+ */
|
||||
+ if (h_len != t_len) {
|
||||
+ int mmap_p = PROT_READ | (shmflg & SHM_RDONLY ? 0 : PROT_WRITE);
|
||||
+ int mmap_f = MAP_PRIVATE | MAP_ANONYMOUS
|
||||
+ | (reserved_va || (shmflg & SHM_REMAP)
|
||||
+ ? MAP_FIXED : MAP_FIXED_NOREPLACE);
|
||||
+
|
||||
+ test = mmap(want, m_len, mmap_p, mmap_f, -1, 0);
|
||||
+ if (unlikely(test != want)) {
|
||||
+ /* shmat returns EINVAL not EEXIST like mmap. */
|
||||
+ ret = (test == MAP_FAILED && errno != EEXIST
|
||||
+ ? get_errno(-1) : -TARGET_EINVAL);
|
||||
+ if (mapped) {
|
||||
+ do_munmap(want, m_len);
|
||||
+ }
|
||||
+ return ret;
|
||||
}
|
||||
- host_raddr = shmat(shmid, g2h_untagged(mmap_start),
|
||||
- shmflg | SHM_REMAP);
|
||||
+ mapped = true;
|
||||
}
|
||||
|
||||
- if (host_raddr == (void *)-1) {
|
||||
- return get_errno(-1);
|
||||
+ if (reserved_va || mapped) {
|
||||
+ shmflg |= SHM_REMAP;
|
||||
+ }
|
||||
+ test = shmat(shmid, want, shmflg);
|
||||
+ if (test == MAP_FAILED) {
|
||||
+ ret = get_errno(-1);
|
||||
+ if (mapped) {
|
||||
+ do_munmap(want, m_len);
|
||||
+ }
|
||||
+ return ret;
|
||||
}
|
||||
- raddr = h2g(host_raddr);
|
||||
- last = raddr + shm_info.shm_segsz - 1;
|
||||
+ assert(test == want);
|
||||
|
||||
- page_set_flags(raddr, last,
|
||||
+ last = shmaddr + m_len - 1;
|
||||
+ page_set_flags(shmaddr, last,
|
||||
PAGE_VALID | PAGE_RESET | PAGE_READ |
|
||||
- (shmflg & SHM_RDONLY ? 0 : PAGE_WRITE));
|
||||
+ (shmflg & SHM_RDONLY ? 0 : PAGE_WRITE) |
|
||||
+ (shmflg & SHM_EXEC ? PAGE_EXEC : 0));
|
||||
|
||||
- shm_region_rm_complete(raddr, last);
|
||||
- shm_region_add(raddr, last);
|
||||
+ shm_region_rm_complete(shmaddr, last);
|
||||
+ shm_region_add(shmaddr, last);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1138,7 +1230,15 @@ abi_ulong target_shmat(CPUArchState *cpu_env, int shmid,
|
||||
tb_flush(cpu);
|
||||
}
|
||||
|
||||
- return raddr;
|
||||
+ if (qemu_loglevel_mask(CPU_LOG_PAGE)) {
|
||||
+ FILE *f = qemu_log_trylock();
|
||||
+ if (f) {
|
||||
+ fprintf(f, "page layout changed following shmat\n");
|
||||
+ page_dump(f);
|
||||
+ qemu_log_unlock(f);
|
||||
+ }
|
||||
+ }
|
||||
+ return shmaddr;
|
||||
}
|
||||
|
||||
abi_long target_shmdt(abi_ulong shmaddr)
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,85 @@
|
||||
From 1234063488134ad1f541f56dd30caa7896905f06 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||
Date: Wed, 28 Feb 2024 10:25:18 -1000
|
||||
Subject: [PATCH 5/5] tests/tcg: Check that shmat() does not break
|
||||
/proc/self/maps
|
||||
|
||||
Add a regression test for a recently fixed issue, where shmat()
|
||||
desynced the guest and the host view of the address space and caused
|
||||
open("/proc/self/maps") to SEGV.
|
||||
|
||||
Upstream-Status: Submitted [https://www.mail-archive.com/qemu-devel@nongnu.org/msg1026793.html]
|
||||
|
||||
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||
Message-Id: <jwyuvao4apydvykmsnvacwshdgy3ixv7qvkh4dbxm3jkwgnttw@k4wpaayou7oq>
|
||||
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
---
|
||||
tests/tcg/multiarch/linux/linux-shmat-maps.c | 55 ++++++++++++++++++++
|
||||
1 file changed, 55 insertions(+)
|
||||
create mode 100644 tests/tcg/multiarch/linux/linux-shmat-maps.c
|
||||
|
||||
diff --git a/tests/tcg/multiarch/linux/linux-shmat-maps.c b/tests/tcg/multiarch/linux/linux-shmat-maps.c
|
||||
new file mode 100644
|
||||
index 000000000..0ccf7a973
|
||||
--- /dev/null
|
||||
+++ b/tests/tcg/multiarch/linux/linux-shmat-maps.c
|
||||
@@ -0,0 +1,55 @@
|
||||
+/*
|
||||
+ * Test that shmat() does not break /proc/self/maps.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+#include <assert.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <sys/ipc.h>
|
||||
+#include <sys/shm.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+int main(void)
|
||||
+{
|
||||
+ char buf[128];
|
||||
+ int err, fd;
|
||||
+ int shmid;
|
||||
+ ssize_t n;
|
||||
+ void *p;
|
||||
+
|
||||
+ shmid = shmget(IPC_PRIVATE, 1, IPC_CREAT | 0600);
|
||||
+ assert(shmid != -1);
|
||||
+
|
||||
+ /*
|
||||
+ * The original bug required a non-NULL address, which skipped the
|
||||
+ * mmap_find_vma step, which could result in a host mapping smaller
|
||||
+ * than the target mapping. Choose an address at random.
|
||||
+ */
|
||||
+ p = shmat(shmid, (void *)0x800000, SHM_RND);
|
||||
+ if (p == (void *)-1) {
|
||||
+ /*
|
||||
+ * Because we are now running the testcase for all guests for which
|
||||
+ * we have a cross-compiler, the above random address might conflict
|
||||
+ * with the guest executable in some way. Rather than stopping,
|
||||
+ * continue with a system supplied address, which should never fail.
|
||||
+ */
|
||||
+ p = shmat(shmid, NULL, 0);
|
||||
+ assert(p != (void *)-1);
|
||||
+ }
|
||||
+
|
||||
+ fd = open("/proc/self/maps", O_RDONLY);
|
||||
+ assert(fd != -1);
|
||||
+ do {
|
||||
+ n = read(fd, buf, sizeof(buf));
|
||||
+ assert(n >= 0);
|
||||
+ } while (n != 0);
|
||||
+ close(fd);
|
||||
+
|
||||
+ err = shmdt(p);
|
||||
+ assert(err == 0);
|
||||
+ err = shmctl(shmid, IPC_RMID, NULL);
|
||||
+ assert(err == 0);
|
||||
+
|
||||
+ return EXIT_SUCCESS;
|
||||
+}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -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()
|
||||
@@ -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]
|
||||
}
|
||||
@@ -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"
|
||||
@@ -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,282 @@
|
||||
From fa9bcabe2387bb230ef82d62827ad6f93b8a1e61 Mon Sep 17 00:00:00 2001
|
||||
From: Frederic Konrad <fkonrad@amd.com>
|
||||
Date: Wed, 17 Jan 2024 18:15:06 +0000
|
||||
Subject: [PATCH 1/2] linux-user/*: workaround for missing MAP_FIXED_NOREPLACE
|
||||
|
||||
QEMU v8.1.0 recently requires MAP_FIXED_NOREPLACE flags implementation for mmap.
|
||||
|
||||
This is missing from ubuntu 18.04, thus this patch catches the mmap calls which
|
||||
could use that new flag and forwards them to mmap when MAP_FIXED_NOREPLACE
|
||||
flag isn't set or emulates them by checking the returned address w.r.t the
|
||||
requested address.
|
||||
|
||||
Signed-off-by: Frederic Konrad <fkonrad@amd.com>
|
||||
Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com>
|
||||
|
||||
Upstream-Status: Inappropriate [OE specific]
|
||||
|
||||
The upstream only supports the last two major releases of an OS. The ones
|
||||
they have declared all have kernel 4.17 or newer.
|
||||
|
||||
See:
|
||||
https://xilinx.slack.com/archives/D04G2647CTV/p1705074697942019
|
||||
|
||||
https://www.qemu.org/docs/master/about/build-platforms.html
|
||||
|
||||
The project aims to support the most recent major version at all times for up
|
||||
to five years after its initial release. Support for the previous major
|
||||
version will be dropped 2 years after the new major version is released or
|
||||
when the vendor itself drops support, whichever comes first.
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@amd.com>
|
||||
---
|
||||
linux-user/elfload.c | 7 +++--
|
||||
linux-user/meson.build | 1 +
|
||||
linux-user/mmap-fixed.c | 63 +++++++++++++++++++++++++++++++++++++++++
|
||||
linux-user/mmap-fixed.h | 39 +++++++++++++++++++++++++
|
||||
linux-user/mmap.c | 31 +++++++++++---------
|
||||
linux-user/syscall.c | 1 +
|
||||
6 files changed, 125 insertions(+), 17 deletions(-)
|
||||
create mode 100644 linux-user/mmap-fixed.c
|
||||
create mode 100644 linux-user/mmap-fixed.h
|
||||
|
||||
Index: qemu-8.2.1/linux-user/elfload.c
|
||||
===================================================================
|
||||
--- qemu-8.2.1.orig/linux-user/elfload.c
|
||||
+++ qemu-8.2.1/linux-user/elfload.c
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "target_signal.h"
|
||||
#include "accel/tcg/debuginfo.h"
|
||||
+#include "mmap-fixed.h"
|
||||
|
||||
#ifdef TARGET_ARM
|
||||
#include "target/arm/cpu-features.h"
|
||||
@@ -2765,9 +2766,9 @@ static abi_ulong create_elf_tables(abi_u
|
||||
static int pgb_try_mmap(uintptr_t addr, uintptr_t addr_last, bool keep)
|
||||
{
|
||||
size_t size = addr_last - addr + 1;
|
||||
- void *p = mmap((void *)addr, size, PROT_NONE,
|
||||
- MAP_ANONYMOUS | MAP_PRIVATE |
|
||||
- MAP_NORESERVE | MAP_FIXED_NOREPLACE, -1, 0);
|
||||
+ void *p = mmap_fixed_noreplace((void *)addr, size, PROT_NONE,
|
||||
+ MAP_ANONYMOUS | MAP_PRIVATE |
|
||||
+ MAP_NORESERVE | MAP_FIXED_NOREPLACE, -1, 0);
|
||||
int ret;
|
||||
|
||||
if (p == MAP_FAILED) {
|
||||
Index: qemu-8.2.1/linux-user/meson.build
|
||||
===================================================================
|
||||
--- qemu-8.2.1.orig/linux-user/meson.build
|
||||
+++ qemu-8.2.1/linux-user/meson.build
|
||||
@@ -14,6 +14,7 @@ linux_user_ss.add(files(
|
||||
'linuxload.c',
|
||||
'main.c',
|
||||
'mmap.c',
|
||||
+ 'mmap-fixed.c',
|
||||
'signal.c',
|
||||
'strace.c',
|
||||
'syscall.c',
|
||||
Index: qemu-8.2.1/linux-user/mmap-fixed.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ qemu-8.2.1/linux-user/mmap-fixed.c
|
||||
@@ -0,0 +1,63 @@
|
||||
+/*
|
||||
+ * Workaround for MAP_FIXED_NOREPLACE
|
||||
+ *
|
||||
+ * Copyright (c) 2024, Advanced Micro Devices, Inc.
|
||||
+ * Developed by Fred Konrad <fkonrad@amd.com>
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
+ * of this software and associated documentation files (the "Software"), to deal
|
||||
+ * in the Software without restriction, including without limitation the rights
|
||||
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
+ * copies of the Software, and to permit persons to whom the Software is
|
||||
+ * furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
+ * THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#include <sys/mman.h>
|
||||
+#include <errno.h>
|
||||
+
|
||||
+#ifndef MAP_FIXED_NOREPLACE
|
||||
+#include "mmap-fixed.h"
|
||||
+
|
||||
+void *mmap_fixed_noreplace(void *addr, size_t len, int prot, int flags,
|
||||
+ int fd, off_t offset)
|
||||
+{
|
||||
+ void *retaddr;
|
||||
+
|
||||
+ if (!(flags & MAP_FIXED_NOREPLACE)) {
|
||||
+ /* General case, use the regular mmap. */
|
||||
+ return mmap(addr, len, prot, flags, fd, offset);
|
||||
+ }
|
||||
+
|
||||
+ /* Since MAP_FIXED_NOREPLACE is not implemented, try to emulate it. */
|
||||
+ flags = flags & ~(MAP_FIXED_NOREPLACE | MAP_FIXED);
|
||||
+ retaddr = mmap(addr, len, prot, flags, fd, offset);
|
||||
+ if ((retaddr == addr) || (retaddr == MAP_FAILED)) {
|
||||
+ /*
|
||||
+ * Either the map worked and we get the good address so it can be
|
||||
+ * returned, or it failed and would have failed the same with
|
||||
+ * MAP_FIXED*, in which case return MAP_FAILED.
|
||||
+ */
|
||||
+ return retaddr;
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * Page has been mapped but not at the requested address.. unmap it and
|
||||
+ * return EEXIST.
|
||||
+ */
|
||||
+ munmap(retaddr, len);
|
||||
+ errno = EEXIST;
|
||||
+ return MAP_FAILED;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
Index: qemu-8.2.1/linux-user/mmap-fixed.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ qemu-8.2.1/linux-user/mmap-fixed.h
|
||||
@@ -0,0 +1,39 @@
|
||||
+/*
|
||||
+ * Workaround for MAP_FIXED_NOREPLACE
|
||||
+ *
|
||||
+ * Copyright (c) 2024, Advanced Micro Devices, Inc.
|
||||
+ * Developed by Fred Konrad <fkonrad@amd.com>
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
+ * of this software and associated documentation files (the "Software"), to deal
|
||||
+ * in the Software without restriction, including without limitation the rights
|
||||
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
+ * copies of the Software, and to permit persons to whom the Software is
|
||||
+ * furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
+ * THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#ifndef MMAP_FIXED_H
|
||||
+#define MMAP_FIXED_H
|
||||
+
|
||||
+#ifndef MAP_FIXED_NOREPLACE
|
||||
+#define MAP_FIXED_NOREPLACE 0x100000
|
||||
+
|
||||
+void *mmap_fixed_noreplace(void *addr, size_t len, int prot, int flags,
|
||||
+ int fd, off_t offset);
|
||||
+
|
||||
+#else /* MAP_FIXED_NOREPLACE */
|
||||
+#define mmap_fixed_noreplace mmap
|
||||
+#endif /* MAP_FIXED_NOREPLACE */
|
||||
+
|
||||
+#endif /* MMAP_FIXED_H */
|
||||
Index: qemu-8.2.1/linux-user/mmap.c
|
||||
===================================================================
|
||||
--- qemu-8.2.1.orig/linux-user/mmap.c
|
||||
+++ qemu-8.2.1/linux-user/mmap.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "user-mmap.h"
|
||||
#include "target_mman.h"
|
||||
#include "qemu/interval-tree.h"
|
||||
+#include "mmap-fixed.h"
|
||||
|
||||
#ifdef TARGET_ARM
|
||||
#include "target/arm/cpu-features.h"
|
||||
@@ -273,7 +274,7 @@ int target_mprotect(abi_ulong start, abi
|
||||
static int do_munmap(void *addr, size_t len)
|
||||
{
|
||||
if (reserved_va) {
|
||||
- void *ptr = mmap(addr, len, PROT_NONE,
|
||||
+ void *ptr = mmap_fixed_noreplace(addr, len, PROT_NONE,
|
||||
MAP_FIXED | MAP_ANONYMOUS
|
||||
| MAP_PRIVATE | MAP_NORESERVE, -1, 0);
|
||||
return ptr == addr ? 0 : -1;
|
||||
@@ -319,9 +320,9 @@ static bool mmap_frag(abi_ulong real_sta
|
||||
* outside of the fragment we need to map. Allocate a new host
|
||||
* page to cover, discarding whatever else may have been present.
|
||||
*/
|
||||
- void *p = mmap(host_start, qemu_host_page_size,
|
||||
- target_to_host_prot(prot),
|
||||
- flags | MAP_ANONYMOUS, -1, 0);
|
||||
+ void *p = mmap_fixed_noreplace(host_start, qemu_host_page_size,
|
||||
+ target_to_host_prot(prot),
|
||||
+ flags | MAP_ANONYMOUS, -1, 0);
|
||||
if (p != host_start) {
|
||||
if (p != MAP_FAILED) {
|
||||
munmap(p, qemu_host_page_size);
|
||||
@@ -420,8 +421,9 @@ abi_ulong mmap_find_vma(abi_ulong start,
|
||||
* - mremap() with MREMAP_FIXED flag
|
||||
* - shmat() with SHM_REMAP flag
|
||||
*/
|
||||
- ptr = mmap(g2h_untagged(addr), size, PROT_NONE,
|
||||
- MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
|
||||
+ ptr = mmap_fixed_noreplace(g2h_untagged(addr), size, PROT_NONE,
|
||||
+ MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE,
|
||||
+ -1, 0);
|
||||
|
||||
/* ENOMEM, if host address space has no memory */
|
||||
if (ptr == MAP_FAILED) {
|
||||
@@ -615,16 +617,16 @@ abi_long target_mmap(abi_ulong start, ab
|
||||
* especially important if qemu_host_page_size >
|
||||
* qemu_real_host_page_size.
|
||||
*/
|
||||
- p = mmap(g2h_untagged(start), host_len, host_prot,
|
||||
- flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
|
||||
+ p = mmap_fixed_noreplace(g2h_untagged(start), host_len, host_prot,
|
||||
+ flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
|
||||
if (p == MAP_FAILED) {
|
||||
goto fail;
|
||||
}
|
||||
/* update start so that it points to the file position at 'offset' */
|
||||
host_start = (uintptr_t)p;
|
||||
if (!(flags & MAP_ANONYMOUS)) {
|
||||
- p = mmap(g2h_untagged(start), len, host_prot,
|
||||
- flags | MAP_FIXED, fd, host_offset);
|
||||
+ p = mmap_fixed_noreplace(g2h_untagged(start), len, host_prot,
|
||||
+ flags | MAP_FIXED, fd, host_offset);
|
||||
if (p == MAP_FAILED) {
|
||||
munmap(g2h_untagged(start), host_len);
|
||||
goto fail;
|
||||
@@ -749,8 +751,9 @@ abi_long target_mmap(abi_ulong start, ab
|
||||
len1 = real_last - real_start + 1;
|
||||
want_p = g2h_untagged(real_start);
|
||||
|
||||
- p = mmap(want_p, len1, target_to_host_prot(target_prot),
|
||||
- flags, fd, offset1);
|
||||
+ p = mmap_fixed_noreplace(want_p, len1,
|
||||
+ target_to_host_prot(target_prot),
|
||||
+ flags, fd, offset1);
|
||||
if (p != want_p) {
|
||||
if (p != MAP_FAILED) {
|
||||
munmap(p, len1);
|
||||
Index: qemu-8.2.1/linux-user/syscall.c
|
||||
===================================================================
|
||||
--- qemu-8.2.1.orig/linux-user/syscall.c
|
||||
+++ qemu-8.2.1/linux-user/syscall.c
|
||||
@@ -145,6 +145,7 @@
|
||||
#include "qapi/error.h"
|
||||
#include "fd-trans.h"
|
||||
#include "cpu_loop-common.h"
|
||||
+#include "mmap-fixed.h"
|
||||
|
||||
#ifndef CLONE_IO
|
||||
#define CLONE_IO 0x80000000 /* Clone io context */
|
||||
@@ -0,0 +1,51 @@
|
||||
From 5c73e53997df800a742f9cd7355f3045861984bb Mon Sep 17 00:00:00 2001
|
||||
From: Frederic Konrad <fkonrad@amd.com>
|
||||
Date: Thu, 18 Jan 2024 10:43:44 +0000
|
||||
Subject: [PATCH 2/2] linux-user/*: workaround for missing MAP_SHARED_VALIDATE
|
||||
|
||||
QEMU v8.1.0 recently requires MAP_SHARED_VALIDATE flags implementation for mmap.
|
||||
|
||||
This is missing from the Ubuntu 18.04 compiler but looks like to be in the
|
||||
kernel source.
|
||||
|
||||
Signed-off-by: Frederic Konrad <fkonrad@amd.com>
|
||||
Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com>
|
||||
|
||||
Upstream-Status: Inappropriate [OE specific]
|
||||
|
||||
The upstream only supports the last two major releases of an OS. The ones
|
||||
they have declared all have kernel 4.17 or newer.
|
||||
|
||||
See:
|
||||
https://xilinx.slack.com/archives/D04G2647CTV/p1705074697942019
|
||||
|
||||
https://www.qemu.org/docs/master/about/build-platforms.html
|
||||
|
||||
The project aims to support the most recent major version at all times for up
|
||||
to five years after its initial release. Support for the previous major
|
||||
version will be dropped 2 years after the new major version is released or
|
||||
when the vendor itself drops support, whichever comes first.
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@amd.com>
|
||||
---
|
||||
linux-user/mmap-fixed.h | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/linux-user/mmap-fixed.h b/linux-user/mmap-fixed.h
|
||||
index ef6eef5114..ec86586c1f 100644
|
||||
--- a/linux-user/mmap-fixed.h
|
||||
+++ b/linux-user/mmap-fixed.h
|
||||
@@ -26,6 +26,10 @@
|
||||
#ifndef MMAP_FIXED_H
|
||||
#define MMAP_FIXED_H
|
||||
|
||||
+#ifndef MAP_SHARED_VALIDATE
|
||||
+#define MAP_SHARED_VALIDATE 0x03
|
||||
+#endif
|
||||
+
|
||||
#ifndef MAP_FIXED_NOREPLACE
|
||||
#define MAP_FIXED_NOREPLACE 0x100000
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
From 4a8579ad8629b57a43daa62e46cc7af6e1078116 Mon Sep 17 00:00:00 2001
|
||||
From: Richard Henderson <richard.henderson@linaro.org>
|
||||
Date: Tue, 13 Feb 2024 10:20:27 -1000
|
||||
Subject: [PATCH] linux-user: Split out do_munmap
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Upstream-Status: Submitted [https://gitlab.com/rth7680/qemu/-/commit/4a8579ad8629b57a43daa62e46cc7af6e1078116]
|
||||
|
||||
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
|
||||
---
|
||||
linux-user/mmap.c | 23 ++++++++++++++++-------
|
||||
1 file changed, 16 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
||||
index 1bbfeb25b14..8ebcca44444 100644
|
||||
--- a/linux-user/mmap.c
|
||||
+++ b/linux-user/mmap.c
|
||||
@@ -267,6 +267,21 @@ int target_mprotect(abi_ulong start, abi_ulong len, int target_prot)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Perform munmap on behalf of the target, with host parameters.
|
||||
+ * If reserved_va, we must replace the memory reservation.
|
||||
+ */
|
||||
+static int do_munmap(void *addr, size_t len)
|
||||
+{
|
||||
+ if (reserved_va) {
|
||||
+ void *ptr = mmap(addr, len, PROT_NONE,
|
||||
+ MAP_FIXED | MAP_ANONYMOUS
|
||||
+ | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
|
||||
+ return ptr == addr ? 0 : -1;
|
||||
+ }
|
||||
+ return munmap(addr, len);
|
||||
+}
|
||||
+
|
||||
/* map an incomplete host page */
|
||||
static bool mmap_frag(abi_ulong real_start, abi_ulong start, abi_ulong last,
|
||||
int prot, int flags, int fd, off_t offset)
|
||||
@@ -854,13 +869,7 @@ static int mmap_reserve_or_unmap(abi_ulong start, abi_ulong len)
|
||||
real_len = real_last - real_start + 1;
|
||||
host_start = g2h_untagged(real_start);
|
||||
|
||||
- if (reserved_va) {
|
||||
- void *ptr = mmap(host_start, real_len, PROT_NONE,
|
||||
- MAP_FIXED | MAP_ANONYMOUS
|
||||
- | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
|
||||
- return ptr == host_start ? 0 : -1;
|
||||
- }
|
||||
- return munmap(host_start, real_len);
|
||||
+ return do_munmap(host_start, real_len);
|
||||
}
|
||||
|
||||
int target_munmap(abi_ulong start, abi_ulong len)
|
||||
--
|
||||
GitLab
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
Upstream-Status: Inappropriate [workaround, would need a real fix for upstream]
|
||||
|
||||
Index: qemu-8.2.0/configure
|
||||
===================================================================
|
||||
--- qemu-8.2.0.orig/configure
|
||||
+++ qemu-8.2.0/configure
|
||||
@@ -955,12 +955,7 @@ fi
|
||||
$mkvenv ensuregroup --dir "${source_path}/python/wheels" \
|
||||
${source_path}/pythondeps.toml meson || exit 1
|
||||
|
||||
-# At this point, we expect Meson to be installed and available.
|
||||
-# We expect mkvenv or pip to have created pyvenv/bin/meson for us.
|
||||
-# We ignore PATH completely here: we want to use the venv's Meson
|
||||
-# *exclusively*.
|
||||
-
|
||||
-meson="$(cd pyvenv/bin; pwd)/meson"
|
||||
+meson=`which meson`
|
||||
|
||||
# Conditionally ensure Sphinx is installed.
|
||||
|
||||
45
sources/poky/meta/recipes-devtools/qemu/qemu/no-pip.patch
Normal file
45
sources/poky/meta/recipes-devtools/qemu/qemu/no-pip.patch
Normal file
@@ -0,0 +1,45 @@
|
||||
qemu: Ensure pip and the python venv aren't used for meson
|
||||
|
||||
Qemu wants to use a supported python version and a specific meson version
|
||||
to "help" users and uses pip and creates a venv to do this. This is a nightmare
|
||||
for us. Our versions stay up to date and should be supported so we don't
|
||||
really need/want this wrapping. Tweak things to disable it.
|
||||
|
||||
There was breakage from the wrapper shown by:
|
||||
|
||||
bitbake qemu-system-native
|
||||
<add DISTRO_FEATURES:remove = "opengl" to local.conf>
|
||||
bitbake qemu-system-native -c configure
|
||||
|
||||
which would crash. The issue is the change in configuration removes pieces
|
||||
from the sysroot but pyc files remainm as do pieces of pip which causes
|
||||
problems.
|
||||
|
||||
Ideally we'd convince upstream to allow some way to disable the venv on
|
||||
the understanding that if/when it breaks, we keep the pieces. The patch
|
||||
as it stands is a workaround.
|
||||
|
||||
Upstream-Status: Inappropriate [oe specific]
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
|
||||
Index: qemu-8.2.0/configure
|
||||
===================================================================
|
||||
--- qemu-8.2.0.orig/configure
|
||||
+++ qemu-8.2.0/configure
|
||||
@@ -937,7 +937,7 @@ python="$(command -v "$python")"
|
||||
echo "python determined to be '$python'"
|
||||
echo "python version: $($python --version)"
|
||||
|
||||
-python="$($python -B "${source_path}/python/scripts/mkvenv.py" create pyvenv)"
|
||||
+python=python3
|
||||
if test "$?" -ne 0 ; then
|
||||
error_exit "python venv creation failed"
|
||||
fi
|
||||
@@ -945,6 +945,7 @@ fi
|
||||
# Suppress writing compiled files
|
||||
python="$python -B"
|
||||
mkvenv="$python ${source_path}/python/scripts/mkvenv.py"
|
||||
+mkvenv=true
|
||||
|
||||
# Finish preparing the virtual environment using vendored .whl files
|
||||
|
||||
BIN
sources/poky/meta/recipes-devtools/qemu/qemu/powerpc_rom.bin
Normal file
BIN
sources/poky/meta/recipes-devtools/qemu/qemu/powerpc_rom.bin
Normal file
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"
|
||||
13
sources/poky/meta/recipes-devtools/qemu/qemu/run-ptest
Normal file
13
sources/poky/meta/recipes-devtools/qemu/qemu/run-ptest
Normal file
@@ -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
|
||||
27
sources/poky/meta/recipes-devtools/qemu/qemu_8.2.7.bb
Normal file
27
sources/poky/meta/recipes-devtools/qemu/qemu_8.2.7.bb
Normal file
@@ -0,0 +1,27 @@
|
||||
BBCLASSEXTEND = "nativesdk"
|
||||
|
||||
require qemu.inc
|
||||
|
||||
DEPENDS += "glib-2.0 zlib pixman"
|
||||
|
||||
DEPENDS:append:libc-musl = " libucontext"
|
||||
|
||||
CFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
|
||||
|
||||
RDEPENDS:${PN}-common: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 pulseaudio 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