]> TLD Linux GIT Repositories - packages/qemu.git/commitdiff
- updated to 8.0.3, sync with PLD spec changes
authorMarcin Krol <hawk@tld-linux.org>
Sat, 22 Jul 2023 18:05:41 +0000 (20:05 +0200)
committerMarcin Krol <hawk@tld-linux.org>
Sat, 22 Jul 2023 18:05:41 +0000 (20:05 +0200)
qemu-execve.patch [new file with mode: 0644]
qemu-no-fortify.patch
qemu-user-execve.patch [deleted file]
qemu-xattr.patch
qemu.spec

diff --git a/qemu-execve.patch b/qemu-execve.patch
new file mode 100644 (file)
index 0000000..03b0931
--- /dev/null
@@ -0,0 +1,54 @@
+diff -ur qemu-8.0.3.orig/linux-user/syscall.c qemu-8.0.3/linux-user/syscall.c
+--- qemu-8.0.3.orig/linux-user/syscall.c       2023-07-22 14:27:06.999503109 +0200
++++ qemu-8.0.3/linux-user/syscall.c    2023-07-22 15:21:31.161543522 +0200
+@@ -659,6 +659,7 @@
+ #endif
+ safe_syscall5(int, waitid, idtype_t, idtype, id_t, id, siginfo_t *, infop, \
+               int, options, struct rusage *, rusage)
++safe_syscall3(int, execve, const char *, filename, char **, argv, char **, envp)
+ safe_syscall5(int, execveat, int, dirfd, const char *, filename,
+               char **, argv, char **, envp, int, flags)
+ #if defined(TARGET_NR_select) || defined(TARGET_NR__newselect) || \
+@@ -8388,9 +8389,9 @@
+     return safe_openat(dirfd, path(pathname), flags, mode);
+ }
+-static int do_execveat(CPUArchState *cpu_env, int dirfd,
+-                       abi_long pathname, abi_long guest_argp,
+-                       abi_long guest_envp, int flags)
++static int do_execv(CPUArchState *cpu_env, int dirfd,
++                    abi_long pathname, abi_long guest_argp,
++                    abi_long guest_envp, int flags, bool is_execveat)
+ {
+     int ret;
+     char **argp, **envp;
+@@ -8469,11 +8470,14 @@
+         goto execve_efault;
+     }
++    const char *exe = p;
+     if (is_proc_myself(p, "exe")) {
+-        ret = get_errno(safe_execveat(dirfd, exec_path, argp, envp, flags));
+-    } else {
+-        ret = get_errno(safe_execveat(dirfd, p, argp, envp, flags));
++        exe = exec_path;
+     }
++    ret = is_execveat
++        ? safe_execveat(dirfd, exe, argp, envp, flags)
++        : safe_execve(exe, argp, envp);
++    ret = get_errno(ret);
+     unlock_user(p, pathname, 0);
+@@ -9012,9 +9016,9 @@
+         return ret;
+ #endif
+     case TARGET_NR_execveat:
+-        return do_execveat(cpu_env, arg1, arg2, arg3, arg4, arg5);
++        return do_execv(cpu_env, arg1, arg2, arg3, arg4, arg5, true);
+     case TARGET_NR_execve:
+-        return do_execveat(cpu_env, AT_FDCWD, arg1, arg2, arg3, 0);
++        return do_execv(cpu_env, AT_FDCWD, arg1, arg2, arg3, 0, false);
+     case TARGET_NR_chdir:
+         if (!(p = lock_user_string(arg1)))
+             return -TARGET_EFAULT;
index aa69ee07e7568e93fda2ee6d479a18a6ede4cd90..ed6f0e85e4dad167ba8771db52eda5fdceb80798 100644 (file)
@@ -1,7 +1,7 @@
-diff -ur qemu-7.2.0.orig/configure qemu-7.2.0/configure
---- qemu-7.2.0.orig/configure  2023-02-08 21:21:36.128176965 +0100
-+++ qemu-7.2.0/configure       2023-02-08 21:22:06.431170014 +0100
-@@ -275,7 +275,6 @@
+diff -ur qemu-8.0.3.orig/configure qemu-8.0.3/configure
+--- qemu-8.0.3.orig/configure  2023-07-22 14:25:13.756890443 +0200
++++ qemu-8.0.3/configure       2023-07-22 14:25:40.988278232 +0200
+@@ -278,7 +278,6 @@
  debug_tcg="no"
  sanitizers="no"
  tsan="no"
@@ -9,15 +9,15 @@ diff -ur qemu-7.2.0.orig/configure qemu-7.2.0/configure
  EXESUF=""
  modules="no"
  prefix="/usr/local"
-@@ -789,7 +788,6 @@
-       debug_tcg="yes"
+@@ -809,7 +808,6 @@
+       meson_option_parse --enable-debug-graph-lock ""
        meson_option_parse --enable-debug-mutex ""
        meson_option_add -Doptimization=0
 -      fortify_source="no"
    ;;
    --enable-sanitizers) sanitizers="yes"
    ;;
-@@ -1691,20 +1689,6 @@
+@@ -1718,20 +1716,6 @@
      ccache_cpp2=yes
  fi
  
@@ -38,7 +38,7 @@ diff -ur qemu-7.2.0.orig/configure qemu-7.2.0/configure
  ##########################################
  # checks for sanitizers
  
-@@ -2207,10 +2191,6 @@
+@@ -2234,10 +2218,6 @@
  
  write_c_skeleton
  
diff --git a/qemu-user-execve.patch b/qemu-user-execve.patch
deleted file mode 100644 (file)
index 4faf735..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-Discussion:
-https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/
-
-https://github.com/resin-io/qemu/commit/782e5bb77014ff136f7bb6133a911e5f53e914a7
-
-https://github.com/resin-io/qemu/commit/782e5bb77014ff136f7bb6133a911e5f53e914a7#commitcomment-17193923
-It has gone through review[1][2][3] and I'm waiting for the maintainer of the linux-user subsystem to accept it in his tree.
-
-[1] https://patchwork.ozlabs.org/patch/569452/
-[2] https://patchwork.ozlabs.org/patch/573877/
-[3] https://patchwork.ozlabs.org/patch/582756/
-
-From patchwork Mon Feb 15 05:51:47 2016
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v3] linux-user: add option to intercept execve() syscalls
-From: Petros Angelatos <petrosagg@resin.io>
-X-Patchwork-Id: 582756
-Message-Id: <1455515507-26877-1-git-send-email-petrosagg@resin.io>
-To: qemu-devel@nongnu.org
-Cc: lucas.kaldstrom@hotmail.co.uk, peter.maydell@linaro.org,
- riku.voipio@iki.fi, 
- laurent@vivier.eu, Petros Angelatos <petrosagg@resin.io>
-Date: Sun, 14 Feb 2016 21:51:47 -0800
-
-In order for one to use QEMU user mode emulation under a chroot, it is
-required to use binfmt_misc. This can be avoided by QEMU never doing a
-raw execve() to the host system.
-
-Introduce a new option, -execve, that uses the current QEMU interpreter
-to intercept execve().
-
-qemu_execve() will prepend the interpreter path , similar to what
-binfmt_misc would do, and then pass the modified execve() to the host.
-
-It is necessary to parse hashbang scripts in that function otherwise
-the kernel will try to run the interpreter of a script without QEMU and
-get an invalid exec format error.
-
-Signed-off-by: Petros Angelatos <petrosagg@resin.io>
-Tested-by: Laurent Vivier <laurent@vivier.eu>
-Reviewed-by: Laurent Vivier <laurent@vivier.eu>
----
-v3 changes:
-       - rebase the patchset against current code
-
-diff -urNpa qemu-7.2.0.orig/linux-user/main.c qemu-7.2.0/linux-user/main.c
---- qemu-7.2.0.orig/linux-user/main.c  2023-02-08 21:23:07.149156085 +0100
-+++ qemu-7.2.0/linux-user/main.c       2023-02-08 21:23:36.695149312 +0100
-@@ -123,6 +123,7 @@ static void usage(int exitcode);
- static const char *interp_prefix = CONFIG_QEMU_INTERP_PREFIX;
- const char *qemu_uname_release;
-+const char *qemu_execve_path;
- #if !defined(TARGET_DEFAULT_STACK_SIZE)
- /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so
-@@ -362,6 +363,11 @@ static void handle_arg_guest_base(const
-     have_guest_base = true;
- }
-+static void handle_arg_execve(const char *arg)
-+{
-+    qemu_execve_path = strdup(arg);
-+}
-+
- static void handle_arg_reserved_va(const char *arg)
- {
-     char *p;
-@@ -464,6 +470,8 @@ static const struct qemu_argument arg_ta
-      "uname",      "set qemu uname release string to 'uname'"},
-     {"B",          "QEMU_GUEST_BASE",  true,  handle_arg_guest_base,
-      "address",    "set guest_base address to 'address'"},
-+    {"execve",     "QEMU_EXECVE",      true,   handle_arg_execve,
-+     "path",       "use interpreter at 'path' when a process calls execve()"},
-     {"R",          "QEMU_RESERVED_VA", true,  handle_arg_reserved_va,
-      "size",       "reserve 'size' bytes for guest virtual address space"},
-     {"d",          "QEMU_LOG",         true,  handle_arg_log,
-diff -urNpa qemu-7.2.0.orig/linux-user/syscall.c qemu-7.2.0/linux-user/syscall.c
---- qemu-7.2.0.orig/linux-user/syscall.c       2023-02-08 21:23:07.150156084 +0100
-+++ qemu-7.2.0/linux-user/syscall.c    2023-02-08 21:28:50.327077355 +0100
-@@ -8378,6 +8378,109 @@ static target_timer_t get_timer_id(abi_l
-     return timerid;
- }
-+#define BINPRM_BUF_SIZE 128
-+
-+/* qemu_execve() Must return target values and target errnos. */
-+static abi_long qemu_execve(char *filename, char *argv[],
-+                  char *envp[])
-+{
-+    char *i_arg = NULL, *i_name = NULL;
-+    char **new_argp;
-+    int argc, fd, ret, i, offset = 3;
-+    char *cp;
-+    char buf[BINPRM_BUF_SIZE];
-+
-+    for (argc = 0; argv[argc] != NULL; argc++) {
-+        /* nothing */ ;
-+    }
-+
-+    fd = open(filename, O_RDONLY);
-+    if (fd == -1) {
-+        return -ENOENT;
-+    }
-+
-+    ret = read(fd, buf, BINPRM_BUF_SIZE);
-+    if (ret == -1) {
-+        close(fd);
-+        return -ENOENT;
-+    }
-+
-+    close(fd);
-+
-+    /* adapted from the kernel
-+     * https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/binfmt_script.c
-+     */
-+    if ((buf[0] == '#') && (buf[1] == '!')) {
-+        /*
-+         * This section does the #! interpretation.
-+         * Sorta complicated, but hopefully it will work.  -TYT
-+         */
-+
-+        buf[BINPRM_BUF_SIZE - 1] = '\0';
-+        cp = strchr(buf, '\n');
-+        if (cp == NULL) {
-+            cp = buf+BINPRM_BUF_SIZE-1;
-+        }
-+        *cp = '\0';
-+        while (cp > buf) {
-+            cp--;
-+            if ((*cp == ' ') || (*cp == '\t')) {
-+                *cp = '\0';
-+            } else {
-+                break;
-+            }
-+        }
-+        for (cp = buf+2; (*cp == ' ') || (*cp == '\t'); cp++) {
-+            /* nothing */ ;
-+        }
-+        if (*cp == '\0') {
-+            return -ENOEXEC; /* No interpreter name found */
-+        }
-+        i_name = cp;
-+        i_arg = NULL;
-+        for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) {
-+            /* nothing */ ;
-+        }
-+        while ((*cp == ' ') || (*cp == '\t')) {
-+            *cp++ = '\0';
-+        }
-+        if (*cp) {
-+            i_arg = cp;
-+        }
-+
-+        if (i_arg) {
-+            offset = 5;
-+        } else {
-+            offset = 4;
-+        }
-+    }
-+
-+    new_argp = alloca((argc + offset + 1) * sizeof(void *));
-+
-+    /* Copy the original arguments with offset */
-+    for (i = 0; i < argc; i++) {
-+        new_argp[i + offset] = argv[i];
-+    }
-+
-+    new_argp[0] = strdup(qemu_execve_path);
-+    new_argp[1] = strdup("-0");
-+    new_argp[offset] = filename;
-+    new_argp[argc + offset] = NULL;
-+
-+    if (i_name) {
-+        new_argp[2] = i_name;
-+        new_argp[3] = i_name;
-+
-+        if (i_arg) {
-+            new_argp[4] = i_arg;
-+        }
-+    } else {
-+        new_argp[2] = argv[0];
-+    }
-+
-+    return get_errno(safe_execve(qemu_execve_path, new_argp, envp));
-+}
-+
- static int target_to_host_cpu_mask(unsigned long *host_mask,
-                                    size_t host_size,
-                                    abi_ulong target_addr,
-@@ -8933,9 +9036,17 @@ static abi_long do_syscall1(CPUArchState
-              * program's problem.
-              */
-             if (is_proc_myself(p, "exe")) {
--                ret = get_errno(safe_execve(exec_path, argp, envp));
-+                if (qemu_execve_path && *qemu_execve_path) {
-+                    ret = get_errno(qemu_execve(exec_path, argp, envp));
-+                } else {
-+                    ret = get_errno(safe_execve(exec_path, argp, envp));
-+                }
-             } else {
--                ret = get_errno(safe_execve(p, argp, envp));
-+                if (qemu_execve_path && *qemu_execve_path) {
-+                    ret = get_errno(qemu_execve(p, argp, envp));
-+                } else {
-+                    ret = get_errno(safe_execve(p, argp, envp));
-+                }
-             }
-             unlock_user(p, arg1, 0);
-diff -urNpa qemu-7.2.0.orig/linux-user/user-internals.h qemu-7.2.0/linux-user/user-internals.h
---- qemu-7.2.0.orig/linux-user/user-internals.h        2023-02-08 21:23:07.148156085 +0100
-+++ qemu-7.2.0/linux-user/user-internals.h     2023-02-08 21:23:36.697149312 +0100
-@@ -27,6 +27,7 @@ void init_task_state(TaskState *ts);
- void task_settid(TaskState *);
- void stop_all_tasks(void);
- extern const char *qemu_uname_release;
-+extern const char *qemu_execve_path;
- extern unsigned long mmap_min_addr;
- typedef struct IOCTLEntry IOCTLEntry;
index 96dbae18cf28bdbccc645028a7aa9aa913121327..373f9e925291d3e8697c6dd6b03cec187bcbfc24 100644 (file)
@@ -1,6 +1,6 @@
-diff -ur qemu-7.2.0.orig/fsdev/virtfs-proxy-helper.c qemu-7.2.0/fsdev/virtfs-proxy-helper.c
---- qemu-7.2.0.orig/fsdev/virtfs-proxy-helper.c        2023-02-08 21:30:45.812050860 +0100
-+++ qemu-7.2.0/fsdev/virtfs-proxy-helper.c     2023-02-08 21:31:51.135037450 +0100
+diff -ur qemu-8.0.3.orig/fsdev/virtfs-proxy-helper.c qemu-8.0.3/fsdev/virtfs-proxy-helper.c
+--- qemu-8.0.3.orig/fsdev/virtfs-proxy-helper.c        2023-07-22 15:22:45.090597707 +0200
++++ qemu-8.0.3/fsdev/virtfs-proxy-helper.c     2023-07-22 15:23:27.989209163 +0200
 @@ -10,6 +10,7 @@
   */
  
@@ -16,4 +16,4 @@ diff -ur qemu-7.2.0.orig/fsdev/virtfs-proxy-helper.c qemu-7.2.0/fsdev/virtfs-pro
 -#include "qemu/xattr.h"
  #include "9p-iov-marshal.h"
  #include "hw/9pfs/9p-proxy.h"
- #include "fsdev/9p-iov-marshal.h"
+ #include "hw/9pfs/9p-util.h"
index 204801091ebb5ab1f504c6a6448bca7a48e80a0f..6a74a06f639f74d5e37948434498d9674ee2e22d 100644 (file)
--- a/qemu.spec
+++ b/qemu.spec
@@ -4,7 +4,7 @@
 # Conditional build:
 %bcond_without sdl             # SDL UI and audio support
 %bcond_without opengl          # Don't require GL deps
-%bcond_without ceph            # Ceph/RBD support
+%bcond_with    ceph            # Ceph/RBD support
 %bcond_without glusterfs       # GlusterFS backend
 %bcond_without rdma            # RDMA-based migration support
 %bcond_without gtk3            # Do not build GTK+ UI
@@ -29,7 +29,7 @@
 %bcond_without virgl           # build virgl support
 %bcond_without xkbcommon       # xkbcommon support
 
-%if %{without gtk}
+%if %{without gtk3}
 %undefine      with_vte
 %endif
 %ifarch x32
 Summary:       QEMU CPU Emulator
 Summary(pl.UTF-8):     QEMU - emulator procesora
 Name:          qemu
-Version:       7.2.0
+Version:       8.0.3
 Release:       1
 License:       GPL v2, BSD (edk2 firmware files)
 Group:         Applications/Emulators
 Source0:       https://download.qemu.org/%{name}-%{version}.tar.xz
-# Source0-md5: 7630d6a9eba7ab2bcb9979d6d24c2697
+# Source0-md5: d41853bffb18878dd1ff7afc2eb41f1a
 # Loads kvm kernel modules at boot
 Source3:       kvm-modules-load.conf
 # Creates /dev/kvm
@@ -62,7 +62,7 @@ Source12:     99-%{name}-guest-agent.rules
 Source13:      %{name}-guest-agent.init
 Source14:      %{name}-guest-agent.logrotate
 Patch0:                %{name}-no-fortify.patch
-Patch2:                %{name}-user-execve.patch
+Patch2:                %{name}-execve.patch
 Patch3:                %{name}-xattr.patch
 Patch4:                libjpeg-boolean.patch
 URL:           https://www.qemu.org/
@@ -72,45 +72,58 @@ URL:                https://www.qemu.org/
 %{?with_sdl:BuildRequires:     SDL2-devel >= 2.0}
 %{?with_sdl:BuildRequires:     SDL2_image-devel >= 2.0}
 BuildRequires: alsa-lib-devel
-BuildRequires: bcc >= 0.16.21-2
 %{?with_brlapi:BuildRequires:  brlapi-devel}
 BuildRequires: bzip2-devel
-BuildRequires: capstone-devel >= 3.0.5
-%{?with_ceph:BuildRequires:    ceph-devel}
-BuildRequires: curl-devel
+BuildRequires: capstone-devel >= 4.0
+%{?with_ceph:BuildRequires:    ceph-devel >= 12}
+BuildRequires: curl-devel >= 7.29.0
 BuildRequires: cyrus-sasl-devel >= 2
-BuildRequires: glib2-devel >= 1:2.48
+BuildRequires: daxctl-devel >= 57
+BuildRequires: gcc >= 6:7.4
+BuildRequires: gettext-tools
+BuildRequires: glib2-devel >= 1:2.64
 # minimal is 3.4 but new features are used up to 6
 %{?with_glusterfs:BuildRequires:       glusterfs-devel >= 6}
-BuildRequires: gnutls-devel >= 3.1.18
-%{?with_gtk3:BuildRequires:    gtk+3-devel >= 3.16}
+BuildRequires: gnutls-devel >= 3.6.14
+%{?with_gtk3:BuildRequires:    gtk+3-devel >= 3.22.0}
+BuildRequires: jack-audio-connection-kit-devel
+# for tests
+#BuildRequires:        keyutils-devel
 BuildRequires: libaio-devel
+BuildRequires: libbpf-devel
 %{?with_smartcard:BuildRequires:       libcacard-devel >= 2.5.1}
 BuildRequires: libcap-ng-devel
+BuildRequires: libdrm-devel
 %{?with_opengl:BuildRequires:  libepoxy-devel}
-BuildRequires: libfdt-devel >= 1.4.2
+BuildRequires: libfdt-devel >= 1.5.1
+BuildRequires: libfuse3-devel >= 3.8
 %{?with_rdma:BuildRequires:    libibverbs-devel}
 %{?with_iscsi:BuildRequires:   libiscsi-devel >= 1.9.0}
 %{?with_rdma:BuildRequires:    libibumad-devel}
 BuildRequires: libjpeg-devel
 %{?with_libnfs:BuildRequires:  libnfs-devel >= 1.9.3}
-BuildRequires: libpng-devel
+BuildRequires: libpng-devel >= 2:1.6.34
 %{?with_rdma:BuildRequires:    librdmacm-devel}
 %{?with_seccomp:BuildRequires: libseccomp-devel >= 2.3.0}
-BuildRequires: libssh-devel >= 0.8
+BuildRequires: libselinux-devel
+BuildRequires: libssh-devel >= 0.8.7
+BuildRequires: libslirp-devel >= 4.1.0
 # for tests only
 #BuildRequires:        libtasn1-devel
+BuildRequires: libu2f-emu-devel
 BuildRequires: libusb-devel >= 1.0.22
-BuildRequires: liburing-devel
+BuildRequires: liburing-devel >= 0.3
 BuildRequires: libuuid-devel
 BuildRequires: libxml2-devel >= 2.0
-%{?with_lttng:BuildRequires:   lttng-ust-devel}
+%{?with_lttng:BuildRequires:   lttng-ust-devel >= 2.1}
 BuildRequires: lzfse-devel
 BuildRequires: lzo-devel >= 2
+BuildRequires: meson >= 0.59.3
 %{?with_multipath:BuildRequires:       multipath-tools-devel}
 BuildRequires: ncurses-devel
-# also libgcrypt-devel >= 1.5.0 possible, but gnutls already pulls nettle
-BuildRequires: nettle-devel >= 2.7.1
+# also libgcrypt-devel >= 1.8 possible, but gnutls already pulls nettle
+BuildRequires: nettle-devel >= 3.4
+BuildRequires: ninja
 %{?with_smartcard:BuildRequires:       nss-devel >= 1:3.12.8}
 BuildRequires: numactl-devel
 BuildRequires: pam-devel
@@ -120,7 +133,9 @@ BuildRequires:      pixman-devel >= 0.21.8
 BuildRequires: pkgconfig
 %{?with_pmem:BuildRequires:    pmdk-devel}
 %{?with_pulseaudio:BuildRequires:      pulseaudio-devel}
-BuildRequires: python3 >= 1:3.5
+BuildRequires: python3 >= 1:3.6
+BuildRequires: python3-sphinx_rtd_theme
+BuildRequires: rpm-build >= 4.6
 BuildRequires: rpmbuild(macros) >= 1.644
 %{?with_system_seabios:BuildRequires:  seabios}
 BuildRequires: sed >= 4.0
@@ -130,7 +145,8 @@ BuildRequires:      sphinx-pdg
 BuildRequires: spice-protocol >= 0.12.3
 BuildRequires: spice-server-devel >= 0.12.5
 %endif
-%{?with_systemtap:BuildRequires:       systemtap-devel}
+%{?with_systemtap:BuildRequires:       systemtap-sdt-devel}
+BuildRequires: tar >= 1:1.22
 BuildRequires: texi2html
 BuildRequires: texinfo
 %{?with_multipath:BuildRequires:       udev-devel}
@@ -141,17 +157,21 @@ BuildRequires:    which
 %{?with_virgl:BuildRequires:   virglrenderer-devel}
 %{?with_vte:BuildRequires:     vte-devel >= 0.32.0}
 # xencontrol xenstore xenguest xenforeignmemory xengnttab xenevtchn xendevicemodel; xentoolcore for xen 4.10+
-# min version is 4.2, more features up to 4.10
-%{?with_xen:BuildRequires:     xen-devel >= 4.10}
+# min version is 4.2, more features up to 4.11
+%{?with_xen:BuildRequires:     xen-devel >= 4.11}
 BuildRequires: xfsprogs-devel
-%{?with_xkbcommon:BuildRequires:       xorg-lib-libxkbcommon-devel}
+%if %{with xkbcommon}
+BuildRequires: xkeyboard-config
+BuildRequires: xorg-lib-libxkbcommon-devel
+%endif
 BuildRequires: xorg-lib-libX11-devel
+BuildRequires: xz
 BuildRequires: zlib-devel
 BuildRequires: zstd-devel >= 1.4.0
 %if %{with user_static}
-BuildRequires: glib2-static >= 1:2.48
+BuildRequires: glib2-static >= 1:2.74
 BuildRequires: glibc-static
-BuildRequires: pcre-static
+BuildRequires: pcre2-8-static >= 10.32
 BuildRequires: zlib-static
 %endif
 Requires:      %{name}-img = %{version}-%{release}
@@ -177,17 +197,23 @@ Requires: %{name}-system-tricore = %{version}-%{release}
 Requires:      %{name}-system-x86 = %{version}-%{release}
 Requires:      %{name}-system-xtensa = %{version}-%{release}
 Requires:      %{name}-user = %{version}-%{release}
-Obsoletes:     qemu-kvm
+Obsoletes:     qemu-kvm < 2
 ExcludeArch:   i386
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
 %define        systempkg_req \
-Requires:      capstone >= 3.0.5 \
+Requires:      capstone >= 4.0 \
+Requires:      daxctl-libs >= 57 \
 %{?with_smartcard:Requires:    libcacard >= 2.5.1} \
-Requires:      libfdt >= 1.4.2 \
+Requires:      libfdt >= 1.5.1 \
+Requires:      libfuse3 >= 3.8 \
+%{?with_iscsi:Requires:        libiscsi >= 1.9.0} \
+Requires:      libpng >= 2:1.6.34 \
 %if %{with seccomp} \
 Requires:      libseccomp >= 2.3.0 \
 %endif \
+Requires:      libslirp >= 4.1.0 \
+Requires:      liburing >= 0.3 \
 Requires:      libusb >= 1.0.22 \
 Requires:      pixman >= 0.21.8 \
 %if %{with spice} \
@@ -195,8 +221,7 @@ Requires:   spice-server-libs >= 0.12.5 \
 %endif \
 %if %{with usbredir} \
 Requires:      usbredir >= 0.6 \
-%endif \
-Requires:      zstd >= 1.4.0
+%endif
 
 # don't strip/chrpath anything in there; these are boot images, roms etc
 %define                _noautostrip    .*%{_datadir}/qemu/.*
@@ -243,18 +268,19 @@ Requires(pre):    /bin/id
 Requires(pre): /usr/bin/getgid
 Requires(pre): /usr/sbin/groupadd
 Requires(pre): /usr/sbin/useradd
-Requires:      glib2 >= 1:2.48
-Requires:      gnutls-libs >= 3.1.18
-%{?with_gtk3:Requires: gtk+3 >= 3.16}
-Requires:      nettle >= 2.7.1
+Requires:      glib2 >= 1:2.64
+Requires:      gnutls-libs >= 3.6.14
+%{?with_gtk3:Requires: gtk+3 >= 3.22.0}
+Requires:      nettle >= 3.4
 %{?with_vte:Requires:  vte >= 0.32.0}
+Requires:      zstd >= 1.4.0
 Provides:      group(qemu)
 Provides:      user(qemu)
-Obsoletes:     qemu-kvm-common
+Obsoletes:     qemu-kvm-common < 2
 Obsoletes:     qemu-module-block-archipelago < 2.9.0
-Obsoletes:     qemu-system-lm32
-Obsoletes:     qemu-system-moxie
-Obsoletes:     qemu-system-unicore32
+Obsoletes:     qemu-system-lm32 < 5.2
+Obsoletes:     qemu-system-moxie < 6.1
+Obsoletes:     qemu-system-unicore32 < 5.2
 Conflicts:     qemu < 1.0-2
 
 %description common
@@ -271,24 +297,22 @@ Ten pakiet udostępnia wspólne pliki wymagane przez wszystkie
 środowiska QEMU.
 
 %package devel
-Summary:       Development files for programs using qemu
-Summary(pl.UTF-8):     Pliki programistyczne do programów wykorzystujących qemu
+Summary:       Header file for QEMU plugins development
+Summary(pl.UTF-8):     Plik nagłówkowy do tworzenia wtyczek QEMU
 Group:         Development/Libraries
-Requires:      %{name} = %{version}-%{release}
+BuildArch:     noarch
 
 %description devel
-This package contains the header files needed for developing programs
-using the QEMU.
+Header file for QEMU plugins development.
 
 %description devel -l pl.UTF-8
-Ten pakiet zawiera pliki nagłówkowe potrzebne do tworzenia programów
-wykorzystujących QEMU.
+Plik nagłówkowy do tworzenia wtyczek QEMU.
 
 %package img
 Summary:       QEMU command line tool for manipulating disk images
 Summary(pl.UTF-8):     Narzędzie QEMU do operacji na obrazach dysków
 Group:         Applications/Emulators
-Obsoletes:     qemu-kvm-img
+Obsoletes:     qemu-kvm-img < 2
 Conflicts:     qemu < 1.0-2
 
 %description img
@@ -299,12 +323,25 @@ images.
 Ten pakiet udostępnia działające z linii poleceń narzędzia do operacji
 na obrazach dysków.
 
+%package ivshmem
+Summary:       Client and server for QEMU ivshmem device
+Summary(pl.UTF-8):     Klient i serwer dla urzÄ\85dzeia ivshmem QEMU
+Group:         Development/Tools
+
+%description ivshmem
+This package provides client and server tools for QEMU's ivshmem
+device.
+
+%description ivshmem -l pl.UTF-8
+Ten pakiet udostępnia działające z linii poleceń narzędzia dla
+urządzenia ivshmem QEMU.
+
 %package user
 Summary:       QEMU user mode emulation of qemu targets
 Summary(pl.UTF-8):     QEMU - emulacja trybu użytkownika środowisk qemu
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
-Obsoletes:     qemu-kvm-user
+Obsoletes:     qemu-kvm-user < 2
 
 %description user
 QEMU is a generic and open source processor emulator which achieves a
@@ -343,7 +380,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem AArch64
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-aarch64
+Obsoletes:     qemu-kvm-system-aarch64 < 2
 
 %description system-aarch64
 QEMU is a generic and open source processor emulator which achieves a
@@ -363,7 +400,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem Alpha
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-alpha
+Obsoletes:     qemu-kvm-system-alpha < 2
 
 %description system-alpha
 QEMU is a generic and open source processor emulator which achieves a
@@ -383,7 +420,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z 32-bitowym procesorem ARM
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-arm
+Obsoletes:     qemu-kvm-system-arm < 2
 
 %description system-arm
 QEMU is a generic and open source processor emulator which achieves a
@@ -403,7 +440,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem AVR
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-avr
+Obsoletes:     qemu-kvm-system-avr < 2
 
 %description system-avr
 QEMU is a generic and open source processor emulator which achieves a
@@ -423,7 +460,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem CRIS
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-cris
+Obsoletes:     qemu-kvm-system-cris < 2
 
 %description system-cris
 QEMU is a generic and open source processor emulator which achieves a
@@ -481,7 +518,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem m68k
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-m68k
+Obsoletes:     qemu-kvm-system-m68k < 2
 
 %description system-m68k
 QEMU is a generic and open source processor emulator which achieves a
@@ -503,7 +540,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem MicroBlaze
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-microblaze
+Obsoletes:     qemu-kvm-system-microblaze < 2
 
 %description system-microblaze
 QEMU is a generic and open source processor emulator which achieves a
@@ -523,7 +560,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem MIPS
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-mips
+Obsoletes:     qemu-kvm-system-mips < 2
 
 %description system-mips
 QEMU is a generic and open source processor emulator which achieves a
@@ -562,8 +599,8 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem OpenRISC
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-or1k
-Obsoletes:     qemu-system-or32
+Obsoletes:     qemu-kvm-system-or1k < 2
+Obsoletes:     qemu-system-or32 < 2.9.0
 
 %description system-or1k
 QEMU is a generic and open source processor emulator which achieves a
@@ -583,7 +620,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem PowerPC
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-ppc
+Obsoletes:     qemu-kvm-system-ppc < 2
 
 %description system-ppc
 QEMU is a generic and open source processor emulator which achieves a
@@ -660,7 +697,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem S390x (IBM Z)
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-s390x
+Obsoletes:     qemu-kvm-system-s390x < 2
 
 %description system-s390x
 QEMU is a generic and open source processor emulator which achieves a
@@ -680,7 +717,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem SH4
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-sh4
+Obsoletes:     qemu-kvm-system-sh4 < 2
 
 %description system-sh4
 QEMU is a generic and open source processor emulator which achieves a
@@ -700,7 +737,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem SPARC
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-sparc
+Obsoletes:     qemu-kvm-system-sparc < 2
 
 %description system-sparc
 QEMU is a generic and open source processor emulator which achieves a
@@ -727,7 +764,7 @@ good emulation speed by using dynamic translation.
 
 This package provides the system emulator with TriCore CPU.
 
-%description system-sparc -l pl.UTF-8
+%description system-tricore -l pl.UTF-8
 QEMU to ogólny, mający otwarte źródła emulator procesora, osiągający
 dobrą szybkość emulacji dzięki użyciu translacji dynamicznej.
 
@@ -740,8 +777,8 @@ Group:              Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %{?with_system_seabios:Requires:       seabios}
 %systempkg_req
-Obsoletes:     kvm
-Obsoletes:     qemu-kvm-system-x86
+Obsoletes:     kvm < 89
+Obsoletes:     qemu-kvm-system-x86 < 2
 
 %description system-x86
 QEMU is a generic and open source processor emulator which achieves a
@@ -761,7 +798,7 @@ Summary(pl.UTF-8):  QEMU - emulator systemu z procesorem Xtensa
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
 %systempkg_req
-Obsoletes:     qemu-kvm-system-xtensa
+Obsoletes:     qemu-kvm-system-xtensa < 2
 
 %description system-xtensa
 QEMU is a generic and open source processor emulator which achieves a
@@ -779,8 +816,9 @@ Ten pakiet zawiera emulator systemu z procesorem Xtensa.
 Summary:       QEMU guest agent
 Summary(pl.UTF-8):     Agent gościa QEMU
 Group:         Daemons
-Requires:      glib2 >= 1:2.48
-Obsoletes:     qemu-kvm-guest-agent
+Requires:      glib2 >= 1:2.64
+Requires:      liburing >= 0.3
+Obsoletes:     qemu-kvm-guest-agent < 2
 Conflicts:     SysVinit < 2.96-2
 
 %description guest-agent
@@ -803,11 +841,24 @@ systemach-gościach, komunikującego się kanałem virtio-serial o nazwie
 
 Ten pakiet nie musi być zainstalowany w systemie hosta.
 
+%package module-audio-jack
+Summary:       QEMU module for JACK audio output
+Summary(pl.UTF-8):     Moduł QEMU z wyjściem dźwięku JACK
+Group:         Applications/Emulators
+Requires:      %{name}-common = %{version}-%{release}
+
+%description module-audio-jack
+QEMU module for JACK audio output.
+
+%description module-audio-jack -l pl.UTF-8
+Moduł QEMU z wyjściem dźwięku JACK.
+
 %package module-block-curl
 Summary:       QEMU module for 'curl' block devices
 Summary(pl.UTF-8):     Moduł QEMU dla urządeń blokowych typu 'curl'
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
+Requires:      curl-libs >= 7.29.0
 
 %description module-block-curl
 QEMU block device support for CURL. It allows to access remote disks
@@ -865,6 +916,7 @@ Summary:    QEMU module for 'rbd' block devices
 Summary(pl.UTF-8):     Moduł QEMU dla urządeń blokowych typu 'rbd'
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
+Requires:      ceph-libs >= 12
 
 %description module-block-rbd
 QEMU block device support for Ceph/RBD volumes.
@@ -877,7 +929,7 @@ Summary:    QEMU module for 'ssh' block devices
 Summary(pl.UTF-8):     Moduł QEMU dla urządeń blokowych typu 'ssh'
 Group:         Applications/Emulators
 Requires:      %{name}-common = %{version}-%{release}
-Requires:      libssh >= 0.8
+Requires:      libssh >= 0.8.7
 
 %description module-block-ssh
 QEMU block device support for accessing remote disks using the Secure
@@ -887,6 +939,18 @@ Shell (SSH) protocol.
 Moduł urządzeń blokowych QEMU do dostępu do zdalnych dysków poprzez
 protokół SSH (Secure Shell).
 
+%package module-ui-dbus
+Summary:       QEMU DBus UI driver
+Summary(pl.UTF-8):     Sterownik interfejsu użytkownika DBus dla QEMU
+Group:         Applications/Emulators
+Requires:      %{name}-common = %{version}-%{release}
+
+%description module-ui-dbus
+QEMU DBus UI driver.
+
+%description module-ui-dbus -l pl.UTF-8
+Sterownik interfejsu użytkownika DBus dla QEMU.
+
 %package module-ui-gtk
 Summary:       QEMU GTK UI driver
 Summary(pl.UTF-8):     Sterownik interfejsu użytkownika GTK dla QEMU
@@ -935,7 +999,7 @@ Sondy systemtap/dtrace dla QEMU.
 
 %if %{with systemtap}
 # don't require stap binary during build
-%{__sed} -i -e "s/has 'stap'/true/" configure
+%{__sed} -i -e "s/stap.found()/true/" meson.build docs/meson.build scripts/meson.build
 %endif
 %build
 
@@ -971,10 +1035,11 @@ build() {
 build dynamic \
        --extra-cflags="%{rpmcflags} %{rpmcppflags}" \
        --extra-ldflags="%{rpmldflags} -Wl,-z,relro -Wl,-z,now" \
-       --audio-drv-list="alsa%{?with_oss:,oss}%{?with_sdl:,sdl}%{?with_pulseaudio:,pa}" \
+       --audio-drv-list="alsa,jack%{?with_oss:,oss}%{?with_pulseaudio:,pa}%{?with_sdl:,sdl}" \
        --enable-attr \
        %{__enable_disable brlapi} \
        --enable-cap-ng \
+       --enable-capstone \
        --enable-curl \
        --enable-curses \
        --enable-docs \
@@ -993,6 +1058,7 @@ build dynamic \
        %{__enable_disable rdma} \
        %{__enable_disable sdl} \
        %{__enable_disable seccomp} \
+       --enable-slirp=system \
        %{__enable_disable spice} \
        %{__enable_disable smartcard} \
        %{__enable_disable snappy} \
@@ -1025,6 +1091,7 @@ build static \
        --disable-nettle \
        --disable-pie \
        --disable-sdl \
+       --disable-slirp \
        --disable-spice \
        --disable-system \
        --disable-tools \
@@ -1091,12 +1158,6 @@ install -p %{SOURCE14} $RPM_BUILD_ROOT/etc/logrotate.d/qemu-ga
 %if %{with system_seabios}
 ln -sf /usr/share/seabios/bios.bin $RPM_BUILD_ROOT%{_datadir}/%{name}/bios-256k.bin
 # bios.bin provided by qemu is stripped to 128k, with no Xen support, keep it
-for f in $RPM_BUILD_ROOT%{_datadir}/%{name}/*.aml ; do
-       bn="$(basename $f)"
-       if [ -e "/usr/share/seabios/$bn" ] ; then
-               ln -sf "/usr/share/seabios/$bn" "$f"
-       fi
-done
 %endif
 
 %if %{with gtk3}
@@ -1107,11 +1168,20 @@ done
 : > qemu.lang
 %endif
 
+for t in client server; do
+       cp -p build-dynamic/contrib/ivshmem-$t/ivshmem-$t $RPM_BUILD_ROOT%{_bindir}
+done
+
+# test modules
+%{__rm} $RPM_BUILD_ROOT%{_libdir}/%{name}/accel-qtest-*.so
 # Windows installer icon, not used
 %{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/qemu-nsis.bmp
 # packaged as %doc
 %{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/edk2-licenses.txt
 
+# cleanup Sphinx files
+%{__rm} $RPM_BUILD_ROOT%{_docdir}/qemu/{.buildinfo,objects.inv}
+
 %clean
 rm -rf $RPM_BUILD_ROOT
 
@@ -1164,14 +1234,11 @@ fi
 %attr(755,root,root) %{_libexecdir}/vhost-user-gpu
 %endif
 %attr(755,root,root) %{_libexecdir}/virtfs-proxy-helper
-%attr(755,root,root) %{_libexecdir}/virtiofsd
 %dir %{_libdir}/%{name}
 # modules without too many external dependencies
 %attr(755,root,root) %{_libdir}/%{name}/block-dmg-bz2.so
 %attr(755,root,root) %{_libdir}/%{name}/block-dmg-lzfse.so
 %attr(755,root,root) %{_libdir}/%{name}/audio-alsa.so
-%attr(755,root,root) %{_libdir}/%{name}/audio-dbus.so
-%attr(755,root,root) %{_libdir}/%{name}/audio-jack.so
 %if %{with oss}
 %attr(755,root,root) %{_libdir}/%{name}/audio-oss.so
 %endif
@@ -1194,7 +1261,6 @@ fi
 %attr(755,root,root) %{_libdir}/%{name}/hw-usb-redirect.so
 %attr(755,root,root) %{_libdir}/%{name}/hw-usb-smartcard.so
 %attr(755,root,root) %{_libdir}/%{name}/ui-curses.so
-%attr(755,root,root) %{_libdir}/%{name}/ui-dbus.so
 %attr(755,root,root) %{_libdir}/%{name}/ui-egl-headless.so
 %if %{with opengl}
 %attr(755,root,root) %{_libdir}/%{name}/ui-opengl.so
@@ -1211,7 +1277,6 @@ fi
 %if %{with virgl}
 %{_datadir}/%{name}/vhost-user/50-qemu-gpu.json
 %endif
-%{_datadir}/%{name}/vhost-user/50-qemu-virtiofsd.json
 %{_desktopdir}/qemu.desktop
 %{_iconsdir}/hicolor/*x*/apps/qemu.png
 %{_iconsdir}/hicolor/32x32/apps/qemu.bmp
@@ -1219,7 +1284,6 @@ fi
 %{_mandir}/man1/qemu.1*
 %{_mandir}/man1/qemu-storage-daemon.1*
 %{_mandir}/man1/virtfs-proxy-helper.1*
-%{_mandir}/man1/virtiofsd.1*
 %{_mandir}/man7/qemu-block-drivers.7*
 %{_mandir}/man7/qemu-cpu-models.7*
 %{_mandir}/man7/qemu-qmp-ref.7*
@@ -1237,6 +1301,11 @@ fi
 %attr(755,root,root) %{_bindir}/qemu-img
 %{_mandir}/man1/qemu-img.1*
 
+%files ivshmem
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/ivshmem-client
+%attr(755,root,root) %{_bindir}/ivshmem-server
+
 %files user
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_bindir}/qemu-aarch64
@@ -1499,7 +1568,6 @@ fi
 %{_datadir}/%{name}/pxe-rtl8139.rom
 %{_datadir}/%{name}/pxe-virtio.rom
 %{_datadir}/%{name}/qboot.rom
-%{_datadir}/%{name}/sgabios.bin
 %{_datadir}/%{name}/vgabios.bin
 %{_datadir}/%{name}/vgabios-ati.bin
 %{_datadir}/%{name}/vgabios-bochs-display.bin
@@ -1532,6 +1600,10 @@ fi
 %{_mandir}/man7/qemu-ga-ref.7*
 %{_mandir}/man8/qemu-ga.8*
 
+%files module-audio-jack
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/%{name}/audio-jack.so
+
 %files module-block-curl
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/%{name}/block-curl.so
@@ -1564,6 +1636,11 @@ fi
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/%{name}/block-ssh.so
 
+%files module-ui-dbus
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/%{name}/audio-dbus.so
+%attr(755,root,root) %{_libdir}/%{name}/ui-dbus.so
+
 %if %{with gtk3}
 %files module-ui-gtk
 %defattr(644,root,root,755)