commit:     2236edd2e6ce716eed195228db35047f5c7dd3d8
Author:     Dave Hughes <davidhughes205 <AT> gmail <DOT> com>
AuthorDate: Sat Mar 13 07:06:22 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Mar 13 21:02:39 2021 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=2236edd2

app-emulation/qemu: sync with ::gentoo

Package-Manager: Portage-3.0.17, Repoman-3.0.2
Manifest-Sign-Key: 0xA1919C830E9498E0
Signed-off-by: Dave Hughes <davidhughes205 <AT> gmail.com>
Closes: https://github.com/gentoo/musl/pull/404
Signed-off-by: Sam James <sam <AT> gentoo.org>

 app-emulation/qemu/Manifest                        |   3 +-
 app-emulation/qemu/files/65-kvm.rules-r2           |   3 +
 ...linux-user-fix-build-with-musl-on-aarch64.patch |  31 ++++
 ...linux-user-fix-build-with-musl-on-ppc64le.patch |  67 ++++++++
 ...-input-use-safe-64-bit-time-accessors-for.patch |  40 +++++
 ...-input-use-safe-64-bit-time-accessors-for.patch |  40 +++++
 ...signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch |  37 ++++
 .../qemu/files/musl-patches/MAP_SYNC-fix.patch     |  22 +++
 .../musl-patches/fix-segevent-and-sigval_t.patch   |  24 +++
 .../qemu/files/musl-patches/fix-sendmsg.patch      |  13 ++
 .../files/musl-patches/fix-sockios-header.patch    |  13 ++
 .../files/musl-patches/guest-agent-shutdown.patch  |  34 ++++
 ...gnals-33-and-64-to-allow-golang-emulation.patch |  56 ++++++
 .../qemu/files/musl-patches/mips-softfloat.patch   |  32 ++++
 .../musl-patches/musl-F_SHLCK-and-F_EXLCK.patch    |  19 +++
 .../qemu/files/musl-patches/xattr_size_max.patch   |  15 ++
 app-emulation/qemu/files/qemu-2.5.0-cflags.patch   |  13 --
 .../qemu/files/qemu-2.5.0-sysmacros.patch          |  15 --
 .../files/qemu-4.0.0-sanitize-interp_info.patch    |  32 ----
 .../qemu/files/qemu-4.0.0-xkbcommon.patch          |  38 -----
 app-emulation/qemu/files/qemu-4.2.0-r2-musl.patch  |  19 ---
 .../qemu-5.1.0-pixman-for-vhost-user-gpu.patch     |  62 +++++++
 ...qemu-5.1.0-usb-host-workaround-libusb-bug.patch |  82 +++++++++
 .../files/qemu-5.1.0-usb-oob-CVE-2020-14364.patch  |  90 ++++++++++
 .../qemu/files/qemu-5.2.0-cleaner-werror.patch     |  40 +++++
 .../qemu/files/qemu-5.2.0-disable-keymap.patch     |  25 +++
 .../qemu/files/qemu-5.2.0-fix-firmware-path.patch  |  16 ++
 .../qemu/files/qemu-5.2.0-no-pie-ld.patch          |  73 ++++++++
 app-emulation/qemu/files/qemu-5.2.0-strings.patch  |  23 +++
 .../qemu/files/qemu-9999-fix-firmware-path.patch   |  17 ++
 app-emulation/qemu/files/qemu-binfmt.initd.head    |   2 +-
 app-emulation/qemu/metadata.xml                    |  11 +-
 .../{qemu-4.2.0-r2.ebuild => qemu-5.2.0-r2.ebuild} | 187 +++++++++++++--------
 33 files changed, 997 insertions(+), 197 deletions(-)

diff --git a/app-emulation/qemu/Manifest b/app-emulation/qemu/Manifest
index 911250c..2157b27 100644
--- a/app-emulation/qemu/Manifest
+++ b/app-emulation/qemu/Manifest
@@ -1,2 +1 @@
-DIST qemu-4.2.0-patches-r1.tar.xz 14552 BLAKE2B 
e8832ce5b7ccda02dcd63fa60a458322a36ba754c8bc682839de4ee33cf21a83cde434bdc062916d3c83e81026b68ebf2fbe099dc6c54c191875f830d95c63ae
 SHA512 
7495e4c9ca80fd25a1bc8244b384f88f3bc6d7190e2840b1614e3bc6fd51938e42792c6a4dbdb2d400a45532e558814462647f35d5ab21e175bec84868a4161d
-DIST qemu-4.2.0.tar.xz 62222068 BLAKE2B 
27c9fbcd5093af425764674817ab9299224bd03f37b5983786f6f437fff1fab3b7da247c55c4ca8b8c42726b9867005944a2f7f04f2d0d94d753961615f901ef
 SHA512 
2a79973c2b07c53e8c57a808ea8add7b6b2cbca96488ed5d4b669ead8c9318907dec2b6109f180fc8ca8f04c0f73a56e82b3a527b5626b799d7e849f2474ec56
+DIST qemu-5.2.0.tar.xz 106902800 BLAKE2B 
4413d5591cbabf80faba5b0b7347ee7749ff0a71af44bdf7f64b1995e17ecf1f3df539fa8e63959e0d50cd0502a41a2921e60cc6d078ed8ab5b09ab4b86d4ed7
 SHA512 
bddd633ce111471ebc651e03080251515178808556b49a308a724909e55dac0be0cc0c79c536ac12d239678ae94c60100dc124be9b9d9538340c03a2f27177f3

diff --git a/app-emulation/qemu/files/65-kvm.rules-r2 
b/app-emulation/qemu/files/65-kvm.rules-r2
new file mode 100644
index 0000000..15c89b2
--- /dev/null
+++ b/app-emulation/qemu/files/65-kvm.rules-r2
@@ -0,0 +1,3 @@
+KERNEL=="kvm", GROUP="kvm", MODE="0660"
+KERNEL=="vhost-net", GROUP="kvm", MODE="0660", OPTIONS+="static_node=vhost-net"
+KERNEL=="vhost-vsock", GROUP="kvm", MODE="0660", 
OPTIONS+="static_node=vhost-vsock"

diff --git 
a/app-emulation/qemu/files/musl-patches/0001-linux-user-fix-build-with-musl-on-aarch64.patch
 
b/app-emulation/qemu/files/musl-patches/0001-linux-user-fix-build-with-musl-on-aarch64.patch
new file mode 100644
index 0000000..1bbae7d
--- /dev/null
+++ 
b/app-emulation/qemu/files/musl-patches/0001-linux-user-fix-build-with-musl-on-aarch64.patch
@@ -0,0 +1,31 @@
+From 806cb2ed28a16cf2894fabef034347f426f1d04e Mon Sep 17 00:00:00 2001
+From: Natanael Copa <nc...@alpinelinux.org>
+Date: Thu, 15 Dec 2016 11:53:07 +0100
+Subject: [PATCH] linux-user: fix build with musl on aarch64
+
+Use the standard uint64_t instead of internal __u64.
+
+This fixes compiler error with musl libc on aarch64:
+.../qemu-2.7.0/linux-user/host/aarch64/hostdep.h:28:5:
+error: unknown type name '__u64'
+     __u64 *pcreg = &uc->uc_mcontext.pc;
+     ^~~~~
+
+Signed-off-by: Natanael Copa <nc...@alpinelinux.org>
+---
+ linux-user/host/aarch64/hostdep.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/linux-user/host/aarch64/hostdep.h 
b/linux-user/host/aarch64/hostdep.h
+index 64f75cef49..6fd6e36b2a 100644
+--- a/linux-user/host/aarch64/hostdep.h
++++ b/linux-user/host/aarch64/hostdep.h
+@@ -25,7 +25,7 @@ extern char safe_syscall_end[];
+ static inline void rewind_if_in_safe_syscall(void *puc)
+ {
+     ucontext_t *uc = puc;
+-    __u64 *pcreg = &uc->uc_mcontext.pc;
++    uint64_t *pcreg = &uc->uc_mcontext.pc;
+ 
+     if (*pcreg > (uintptr_t)safe_syscall_start
+         && *pcreg < (uintptr_t)safe_syscall_end) {

diff --git 
a/app-emulation/qemu/files/musl-patches/0001-linux-user-fix-build-with-musl-on-ppc64le.patch
 
b/app-emulation/qemu/files/musl-patches/0001-linux-user-fix-build-with-musl-on-ppc64le.patch
new file mode 100644
index 0000000..c3a9187
--- /dev/null
+++ 
b/app-emulation/qemu/files/musl-patches/0001-linux-user-fix-build-with-musl-on-ppc64le.patch
@@ -0,0 +1,67 @@
+--- a/linux-user/host/ppc64/hostdep.h
++++ b/linux-user/host/ppc64/hostdep.h
+@@ -25,7 +25,11 @@
+ static inline void rewind_if_in_safe_syscall(void *puc)
+ {
+     ucontext_t *uc = puc;
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+     unsigned long *pcreg = &uc->uc_mcontext.gp_regs[PT_NIP];
++#else // Musl
++    unsigned long *pcreg = &uc->uc_mcontext.gp_regs[32];
++#endif
+ 
+     if (*pcreg > (uintptr_t)safe_syscall_start
+         && *pcreg < (uintptr_t)safe_syscall_end) {
+--- a/accel/tcg/user-exec.c
++++ a/accel/tcg/user-exec.c
+@@ -228,6 +228,7 @@
+  */
+ #ifdef linux
+ /* All Registers access - only for local access */
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+ #define REG_sig(reg_name, context)              \
+     ((context)->uc_mcontext.regs->reg_name)
+ /* Gpr Registers access  */
+@@ -245,15 +246,42 @@
+ /* Condition register */
+ #define CR_sig(context)                        REG_sig(ccr, context)
+
++#else // Musl
++#define REG_sig(reg_num, context)              \
++    ((context)->uc_mcontext.gp_regs[reg_num])
++/* Gpr Registers access  */
++#define GPR_sig(reg_num, context)              REG_sig(gpr[reg_num], context)
++/* Program counter */
++#define IAR_sig(context)                       REG_sig(32, context)
++/* Machine State Register (Supervisor) */
++#define MSR_sig(context)                       REG_sig(33, context)
++/* Count register */
++#define CTR_sig(context)                       REG_sig(35, context)
++/* User's integer exception register */
++#define XER_sig(context)                       REG_sig(37, context)
++/* Link register */
++#define LR_sig(context)                        REG_sig(36, context)
++/* Condition register */
++#define CR_sig(context)                        REG_sig(38, context)
++#endif
++
++
+ /* Float Registers access  */
+ #define FLOAT_sig(reg_num, context)                                     \
+     (((double *)((char *)((context)->uc_mcontext.regs + 48 * 4)))[reg_num])
+ #define FPSCR_sig(context) \
+     (*(int *)((char *)((context)->uc_mcontext.regs + (48 + 32 * 2) * 4)))
+ /* Exception Registers access */
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+ #define DAR_sig(context)                       REG_sig(dar, context)
+ #define DSISR_sig(context)                     REG_sig(dsisr, context)
+ #define TRAP_sig(context)                      REG_sig(trap, context)
++#else // Musl
++#define DAR_sig(context)                       REG_sig(41, context)
++#define DSISR_sig(context)                     REG_sig(42, context)
++#define TRAP_sig(context)                      REG_sig(40, context)
++#endif
++
+ #endif /* linux */
+
+ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)

diff --git 
a/app-emulation/qemu/files/musl-patches/0001-virtio-host-input-use-safe-64-bit-time-accessors-for.patch
 
b/app-emulation/qemu/files/musl-patches/0001-virtio-host-input-use-safe-64-bit-time-accessors-for.patch
new file mode 100644
index 0000000..ba66aae
--- /dev/null
+++ 
b/app-emulation/qemu/files/musl-patches/0001-virtio-host-input-use-safe-64-bit-time-accessors-for.patch
@@ -0,0 +1,40 @@
+From 388ef67707f01fe4ad337642325ae974dd81c242 Mon Sep 17 00:00:00 2001
+From: Ariadne Conill <aria...@dereferenced.org>
+Date: Wed, 22 Jul 2020 02:45:00 -0600
+Subject: [PATCH 1/2] virtio host input: use safe 64-bit time accessors for
+ input_event
+
+On 32-bit systems with 64-bit time_t, input_event.time is not
+directly accessible.  Instead, we must use input_event_sec and
+input_event_usec accessors to set the time values.
+
+Signed-off-by: Ariadne Conill <aria...@dereferenced.org>
+---
+ hw/input/virtio-input-host.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/hw/input/virtio-input-host.c b/hw/input/virtio-input-host.c
+index 85daf73f1a..7b81bf09f5 100644
+--- a/hw/input/virtio-input-host.c
++++ b/hw/input/virtio-input-host.c
+@@ -193,13 +193,16 @@ static void virtio_input_host_handle_status(VirtIOInput 
*vinput,
+ {
+     VirtIOInputHost *vih = VIRTIO_INPUT_HOST(vinput);
+     struct input_event evdev;
++    struct timeval tv;
+     int rc;
+ 
+-    if (gettimeofday(&evdev.time, NULL)) {
++    if (gettimeofday(&tv, NULL)) {
+         perror("virtio_input_host_handle_status: gettimeofday");
+         return;
+     }
+ 
++    evdev.input_event_sec = tv.tv_sec;
++    evdev.input_event_usec = tv.tv_usec;
+     evdev.type = le16_to_cpu(event->type);
+     evdev.code = le16_to_cpu(event->code);
+     evdev.value = le32_to_cpu(event->value);
+-- 
+2.27.0
+

diff --git 
a/app-emulation/qemu/files/musl-patches/0002-virtio-user-input-use-safe-64-bit-time-accessors-for.patch
 
b/app-emulation/qemu/files/musl-patches/0002-virtio-user-input-use-safe-64-bit-time-accessors-for.patch
new file mode 100644
index 0000000..b965f66
--- /dev/null
+++ 
b/app-emulation/qemu/files/musl-patches/0002-virtio-user-input-use-safe-64-bit-time-accessors-for.patch
@@ -0,0 +1,40 @@
+From de7cf9878a216143db677820c23407c3b032d12c Mon Sep 17 00:00:00 2001
+From: Ariadne Conill <aria...@dereferenced.org>
+Date: Wed, 22 Jul 2020 02:51:30 -0600
+Subject: [PATCH 2/2] virtio user input: use safe 64-bit time accessors for
+ input_event
+
+On 32-bit systems with 64-bit time_t, input_event.time is not
+directly accessible.  Instead, we must use input_event_sec and
+input_event_usec accessors to set the time values.
+
+Signed-off-by: Ariadne Conill <aria...@dereferenced.org>
+---
+ contrib/vhost-user-input/main.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/contrib/vhost-user-input/main.c b/contrib/vhost-user-input/main.c
+index 6020c6f33a..4887a6cb44 100644
+--- a/contrib/vhost-user-input/main.c
++++ b/contrib/vhost-user-input/main.c
+@@ -115,13 +115,16 @@ vi_evdev_watch(VuDev *dev, int condition, void *data)
+ static void vi_handle_status(VuInput *vi, virtio_input_event *event)
+ {
+     struct input_event evdev;
++    struct timeval tv;
+     int rc;
+ 
+-    if (gettimeofday(&evdev.time, NULL)) {
++    if (gettimeofday(&tv, NULL)) {
+         perror("vi_handle_status: gettimeofday");
+         return;
+     }
+ 
++    evdev.input_event_sec = tv.tv_sec;
++    evdev.input_event_usec = tv.tv_usec;
+     evdev.type = le16toh(event->type);
+     evdev.code = le16toh(event->code);
+     evdev.value = le32toh(event->value);
+-- 
+2.27.0
+

diff --git 
a/app-emulation/qemu/files/musl-patches/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
 
b/app-emulation/qemu/files/musl-patches/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
new file mode 100644
index 0000000..528b5d5
--- /dev/null
+++ 
b/app-emulation/qemu/files/musl-patches/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
@@ -0,0 +1,37 @@
+From 8fbb4e6797ed67310b74cbaaa061269db45a5b71 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <nc...@alpinelinux.org>
+Date: Tue, 29 Apr 2014 15:51:31 +0200
+Subject: [PATCH] linux-user/signal.c: define __SIGRTMIN/MAX for non-GNU
+ platforms
+
+The __SIGRTMIN and __SIGRTMAX are glibc internals and are not available
+on all platforms, so we define those if they are missing.
+
+This is needed for musl libc.
+
+Signed-off-by: Natanael Copa <nc...@alpinelinux.org>
+---
+ linux-user/signal.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/linux-user/signal.c b/linux-user/signal.c
+index 5ca6d62b15..e917c16d91 100644
+--- a/linux-user/signal.c
++++ b/linux-user/signal.c
+@@ -25,6 +25,13 @@
+ #include "trace.h"
+ #include "signal-common.h"
+ 
++#ifndef __SIGRTMIN
++#define __SIGRTMIN 32
++#endif
++#ifndef __SIGRTMAX
++#define __SIGRTMAX (NSIG-1)
++#endif
++
+ static struct target_sigaction sigact_table[TARGET_NSIG];
+ 
+ static void host_signal_handler(int host_signum, siginfo_t *info,
+-- 
+2.23.0
+

diff --git a/app-emulation/qemu/files/musl-patches/MAP_SYNC-fix.patch 
b/app-emulation/qemu/files/musl-patches/MAP_SYNC-fix.patch
new file mode 100644
index 0000000..e13609d
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/MAP_SYNC-fix.patch
@@ -0,0 +1,22 @@
+diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c
+index f7f177d..7598960 100644
+--- a/util/mmap-alloc.c
++++ b/util/mmap-alloc.c
+@@ -10,14 +10,16 @@
+  * later.  See the COPYING file in the top-level directory.
+  */
+ 
++#include "qemu/osdep.h"
++
+ #ifdef CONFIG_LINUX
+ #include <linux/mman.h>
++#include <asm-generic/mman.h> /* for ppc64le */
+ #else  /* !CONFIG_LINUX */
+ #define MAP_SYNC              0x0
+ #define MAP_SHARED_VALIDATE   0x0
+ #endif /* CONFIG_LINUX */
+ 
+-#include "qemu/osdep.h"
+ #include "qemu/mmap-alloc.h"
+ #include "qemu/host-utils.h"
+ 

diff --git 
a/app-emulation/qemu/files/musl-patches/fix-segevent-and-sigval_t.patch 
b/app-emulation/qemu/files/musl-patches/fix-segevent-and-sigval_t.patch
new file mode 100644
index 0000000..1f99eac
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/fix-segevent-and-sigval_t.patch
@@ -0,0 +1,24 @@
+--- qemu-2.2.1/linux-user/syscall.c.orig       2015-04-10 07:10:06.305662505 
+0000
++++ qemu-2.2.1/linux-user/syscall.c    2015-04-10 07:36:53.801871968 +0000
+@@ -5020,9 +5020,20 @@
+     return 0;
+ }
+ 
+-static inline abi_long target_to_host_sigevent(struct sigevent *host_sevp,
++struct host_sigevent {
++    union sigval sigev_value;
++    int sigev_signo;
++    int sigev_notify;
++    union {
++       int _pad[64-sizeof(int) * 2 + sizeof(union sigval)];
++       int _tid;
++    } _sigev_un;
++};
++
++static inline abi_long target_to_host_sigevent(struct sigevent *sevp,
+                                                abi_ulong target_addr)
+ {
++    struct host_sigevent *host_sevp = (struct host_sigevent *) sevp;
+     struct target_sigevent *target_sevp;
+ 
+     if (!lock_user_struct(VERIFY_READ, target_sevp, target_addr, 1)) {

diff --git a/app-emulation/qemu/files/musl-patches/fix-sendmsg.patch 
b/app-emulation/qemu/files/musl-patches/fix-sendmsg.patch
new file mode 100644
index 0000000..dc9c4bc
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/fix-sendmsg.patch
@@ -0,0 +1,13 @@
+diff --git a/linux-user/syscall.c b/linux-user/syscall.c
+index 389ec09764..116d5eaff5 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -3337,7 +3337,7 @@ static abi_long do_sendrecvmsg_locked(int fd, struct 
target_msghdr *msgp,
+                                       int flags, int send)
+ {
+     abi_long ret, len;
+-    struct msghdr msg;
++    struct msghdr msg = {};
+     abi_ulong count;
+     struct iovec *vec;
+     abi_ulong target_vec;

diff --git a/app-emulation/qemu/files/musl-patches/fix-sockios-header.patch 
b/app-emulation/qemu/files/musl-patches/fix-sockios-header.patch
new file mode 100644
index 0000000..1f3cd76
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/fix-sockios-header.patch
@@ -0,0 +1,13 @@
+diff --git a/linux-user/syscall.c b/linux-user/syscall.c
+index 43d0562..afa0ac4 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -59,6 +59,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base,
+ #include <linux/icmp.h>
+ #include <linux/icmpv6.h>
+ #include <linux/errqueue.h>
++#include <linux/sockios.h>
+ #include <linux/random.h>
+ #include "qemu-common.h"
+ #ifdef CONFIG_TIMERFD
+ #include <sys/timerfd.h>

diff --git a/app-emulation/qemu/files/musl-patches/guest-agent-shutdown.patch 
b/app-emulation/qemu/files/musl-patches/guest-agent-shutdown.patch
new file mode 100644
index 0000000..742f281
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/guest-agent-shutdown.patch
@@ -0,0 +1,34 @@
+diff --git a/qga/commands-posix.c b/qga/commands-posix.c
+index 1877976..7915aab 100644
+--- a/qga/commands-posix.c
++++ b/qga/commands-posix.c
+@@ -82,6 +82,7 @@ static void ga_wait_child(pid_t pid, int *status, Error 
**errp)
+ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+ {
+     const char *shutdown_flag;
++    const char *fallback_cmd = NULL;
+     Error *local_err = NULL;
+     pid_t pid;
+     int status;
+@@ -89,10 +90,13 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, 
Error **errp)
+     slog("guest-shutdown called, mode: %s", mode);
+     if (!has_mode || strcmp(mode, "powerdown") == 0) {
+         shutdown_flag = "-P";
++        fallback_cmd = "/sbin/poweroff";
+     } else if (strcmp(mode, "halt") == 0) {
+         shutdown_flag = "-H";
++        fallback_cmd = "/sbin/halt";
+     } else if (strcmp(mode, "reboot") == 0) {
+         shutdown_flag = "-r";
++        fallback_cmd = "/sbin/reboot";
+     } else {
+         error_setg(errp,
+                    "mode is invalid (valid values are: 
halt|powerdown|reboot");
+@@ -109,6 +113,7 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, 
Error **errp)
+ 
+         execle("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
+                "hypervisor initiated shutdown", (char*)NULL, environ);
++        execle(fallback_cmd, fallback_cmd, (char*)NULL, environ);
+         _exit(EXIT_FAILURE);
+     } else if (pid < 0) {
+         error_setg_errno(errp, errno, "failed to create child process");

diff --git 
a/app-emulation/qemu/files/musl-patches/ignore-signals-33-and-64-to-allow-golang-emulation.patch
 
b/app-emulation/qemu/files/musl-patches/ignore-signals-33-and-64-to-allow-golang-emulation.patch
new file mode 100644
index 0000000..1162542
--- /dev/null
+++ 
b/app-emulation/qemu/files/musl-patches/ignore-signals-33-and-64-to-allow-golang-emulation.patch
@@ -0,0 +1,56 @@
+From db186a3f83454268c43fc793a48bc28c41368a6c Mon Sep 17 00:00:00 2001
+From: Petros Angelatos <petros...@gmail.com>
+Date: Thu, 3 Mar 2016 23:58:53 -0800
+Subject: [PATCH] linux-user: ignore signals 33 and 64 to allow golang
+ emulation
+
+Signal 33 will always fail. This causes golang crash since
+https://github.com/golang/go/commit/675eb72c285cd0dd44a5f280bb3fa456ddf6de16
+
+As explained in that commit, these signals are very rarely used in a
+way that causes problems, so it's ok-ish to ignore one of them.
+
+Signal 64 will fail because QEMU uses SIGRTMAX for itself. This causes
+golang to crash for versions earlier than
+https://github.com/golang/go/commit/d10675089d74db0408f2432eae3bd89a8e1c2d6a
+
+Since after that commit golang ignores that signal, we also ignore it here to
+allow earlier versions to run as well.
+
+Signed-off-by: Petros Angelatos <petros...@gmail.com>
+---
+ linux-user/signal.c | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/linux-user/signal.c b/linux-user/signal.c
+index 9a4d894..90aca55 100644
+--- a/linux-user/signal.c
++++ b/linux-user/signal.c
+@@ -744,6 +744,27 @@ int do_sigaction(int sig, const struct target_sigaction 
*act,
+     }
+ 
+     k = &sigact_table[sig - 1];
++
++    /* This signal will always fail. This causes golang crash since
++     * 
https://github.com/golang/go/commit/675eb72c285cd0dd44a5f280bb3fa456ddf6de16
++     *
++     * As explained in that commit, these signals are very rarely used in a
++     * way that causes problems, so it's ok-ish to ignore one of them here.
++     */
++    if (sig == 33) {
++        return 0;
++    }
++    /* This signal will fail because QEMU uses SIGRTMAX for itself. This 
causes
++     * golang to crash for versions earlier than
++     * 
https://github.com/golang/go/commit/d10675089d74db0408f2432eae3bd89a8e1c2d6a
++     *
++     * Since after that commit golang ignores that signal, we also ignore it 
here to
++     * allow earlier versions to run as well.
++     */
++    if (sig == 64) {
++        return 0;
++    }
++
+     if (oact) {
+         __put_user(k->_sa_handler, &oact->_sa_handler);
+         __put_user(k->sa_flags, &oact->sa_flags);

diff --git a/app-emulation/qemu/files/musl-patches/mips-softfloat.patch 
b/app-emulation/qemu/files/musl-patches/mips-softfloat.patch
new file mode 100644
index 0000000..4d9b489
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/mips-softfloat.patch
@@ -0,0 +1,32 @@
+diff --git a/tests/fp/fp-bench.c b/tests/fp/fp-bench.c
+index 4ba5e1d..313256c 100644
+--- a/tests/fp/fp-bench.c
++++ b/tests/fp/fp-bench.c
+@@ -479,6 +479,7 @@ static void QEMU_NORETURN die_host_rounding(enum rounding 
rounding)
+     exit(EXIT_FAILURE);
+ }
+ 
++#ifndef __mips_soft_float
+ static void set_host_precision(enum rounding rounding)
+ {
+     int rhost;
+@@ -507,6 +508,7 @@ static void set_host_precision(enum rounding rounding)
+         die_host_rounding(rounding);
+     }
+ }
++#endif
+ 
+ static void set_soft_precision(enum rounding rounding)
+ {
+@@ -596,9 +598,11 @@ static void parse_args(int argc, char *argv[])
+ 
+     /* set precision and rounding mode based on the tester */
+     switch (tester) {
++#ifndef __mips_soft_float
+     case TESTER_HOST:
+         set_host_precision(rounding);
+         break;
++#endif
+     case TESTER_SOFT:
+         set_soft_precision(rounding);
+         switch (precision) {

diff --git 
a/app-emulation/qemu/files/musl-patches/musl-F_SHLCK-and-F_EXLCK.patch 
b/app-emulation/qemu/files/musl-patches/musl-F_SHLCK-and-F_EXLCK.patch
new file mode 100644
index 0000000..316819a
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/musl-F_SHLCK-and-F_EXLCK.patch
@@ -0,0 +1,19 @@
+This patch was not upstreamed to qemu as those should probably be
+defined in musl libc.
+
+--- ./linux-user/syscall.c.orig
++++ ./linux-user/syscall.c
+@@ -114,6 +114,13 @@
+ 
+ #include "qemu.h"
+ 
++#ifndef F_SHLCK
++#define F_SHLCK 8
++#endif
++#ifndef F_EXLCK
++#define F_EXLCK 4
++#endif
++
+ #ifndef CLONE_IO
+ #define CLONE_IO                0x80000000      /* Clone io context */
+ #endif

diff --git a/app-emulation/qemu/files/musl-patches/xattr_size_max.patch 
b/app-emulation/qemu/files/musl-patches/xattr_size_max.patch
new file mode 100644
index 0000000..1a33cbf
--- /dev/null
+++ b/app-emulation/qemu/files/musl-patches/xattr_size_max.patch
@@ -0,0 +1,15 @@
+diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
+index faebd91..a0f15b6 100644
+--- a/hw/9pfs/9p.c
++++ b/hw/9pfs/9p.c
+@@ -25,6 +25,10 @@
+ #include "trace.h"
+ #include "migration/migration.h"
+ 
++#ifdef __linux__
++#include <linux/limits.h> /* for XATTR_SIZE_MAX */
++#endif
++
+ int open_fd_hw;
+ int total_open_fd;
+ static int open_fd_rc;

diff --git a/app-emulation/qemu/files/qemu-2.5.0-cflags.patch 
b/app-emulation/qemu/files/qemu-2.5.0-cflags.patch
deleted file mode 100644
index 173394f..0000000
--- a/app-emulation/qemu/files/qemu-2.5.0-cflags.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -4468,10 +4468,6 @@ fi
- if test "$gcov" = "yes" ; then
-   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
-   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
--elif test "$fortify_source" = "yes" ; then
--  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
--elif test "$debug" = "no"; then
--  CFLAGS="-O2 $CFLAGS"
- fi
- 
- ##########################################

diff --git a/app-emulation/qemu/files/qemu-2.5.0-sysmacros.patch 
b/app-emulation/qemu/files/qemu-2.5.0-sysmacros.patch
deleted file mode 100644
index f2e766d..0000000
--- a/app-emulation/qemu/files/qemu-2.5.0-sysmacros.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Linux C libs are moving away from implicit header pollution with sys/types.h
-
---- a/include/qemu/osdep.h
-+++ b/include/qemu/osdep.h
-@@ -78,6 +78,10 @@ extern int daemon(int, int);
- #include <assert.h>
- #include <signal.h>
- 
-+#ifdef __linux__
-+#include <sys/sysmacros.h>
-+#endif
-+
- #ifdef __OpenBSD__
- #include <sys/signal.h>
- #endif

diff --git a/app-emulation/qemu/files/qemu-4.0.0-sanitize-interp_info.patch 
b/app-emulation/qemu/files/qemu-4.0.0-sanitize-interp_info.patch
deleted file mode 100644
index 58ff0c7..0000000
--- a/app-emulation/qemu/files/qemu-4.0.0-sanitize-interp_info.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-linux-user: Sanitize interp_info and, for mips
-
-Sanitize interp_info structure in load_elf_binary() and, for mips only,
-init its field fp_abi. This fixes appearances of "Unexpected FPU mode"
-message in some MIPS use cases.
-
-Signed-off-by: Daniel Santos <address@hidden>
-Signed-off-by: Aleksandar Markovic <address@hidden>
----
- linux-user/elfload.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/linux-user/elfload.c b/linux-user/elfload.c
-index c1a2602..7f09d57 100644
---- a/linux-user/elfload.c
-+++ b/linux-user/elfload.c
-@@ -2698,6 +2698,11 @@ int load_elf_binary(struct linux_binprm *bprm, struct 
image_info *info)
-     char *elf_interpreter = NULL;
-     char *scratch;
- 
-+    memset(&interp_info, 0, sizeof(interp_info));
-+#ifdef TARGET_MIPS
-+    interp_info.fp_abi = MIPS_ABI_FP_UNKNOWN;
-+#endif
-+
-     info->start_mmap = (abi_ulong)ELF_START_MMAP;
- 
-     load_elf_image(bprm->filename, bprm->fd, info,
--- 
-2.7.4
-
-

diff --git a/app-emulation/qemu/files/qemu-4.0.0-xkbcommon.patch 
b/app-emulation/qemu/files/qemu-4.0.0-xkbcommon.patch
deleted file mode 100644
index 3d9a516..0000000
--- a/app-emulation/qemu/files/qemu-4.0.0-xkbcommon.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From cef396dc0b11a09ede85b275ed1ceee71b60a4b3 Mon Sep 17 00:00:00 2001
-From: James Le Cuirot <ch...@gentoo.org>
-Date: Sat, 14 Sep 2019 15:47:20 +0100
-Subject: [PATCH] configure: Add xkbcommon configure options
-
-This dependency is currently "automagic", which is bad for distributions.
-
-Signed-off-by: James Le Cuirot <ch...@gentoo.org>
----
- configure | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/configure b/configure
-index 30aad233d1..30544f52e6 100755
---- a/configure
-+++ b/configure
-@@ -1521,6 +1521,10 @@ for opt do
-   ;;
-   --disable-libpmem) libpmem=no
-   ;;
-+  --enable-xkbcommon) xkbcommon=yes
-+  ;;
-+  --disable-xkbcommon) xkbcommon=no
-+  ;;
-   *)
-       echo "ERROR: unknown option $opt"
-       echo "Try '$0 --help' for more information"
-@@ -1804,6 +1808,7 @@ disabled with --disable-FEATURE, default is enabled if 
available:
-   capstone        capstone disassembler support
-   debug-mutex     mutex debugging support
-   libpmem         libpmem support
-+  xkbcommon       xkbcommon support
- 
- NOTE: The object files are built at the place where configure is launched
- EOF
--- 
-2.23.0
-

diff --git a/app-emulation/qemu/files/qemu-4.2.0-r2-musl.patch 
b/app-emulation/qemu/files/qemu-4.2.0-r2-musl.patch
deleted file mode 100644
index 70332da..0000000
--- a/app-emulation/qemu/files/qemu-4.2.0-r2-musl.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Build of qemu 4.2.0-r2 with virtfs on musl fail :
-
-qemu-4.2.0-r2/work/qemu-4.2.0/hw/9pfs/9p.c:3821:16: error: ‘XATTR_SIZE_MAX’ 
undeclared (first use in this function)
-3821 |     if (size > XATTR_SIZE_MAX)
-
-Fix : Add limits.h header 
-
----
-
---- a/hw/9pfs/9p.c
-+++ b/hw/9pfs/9p.c
-@@ -13,6 +13,7 @@
- 
- #include "qemu/osdep.h"
- #include <glib/gprintf.h>
-+#include <linux/limits.h>
- #include "hw/virtio/virtio.h"
- #include "qapi/error.h"
- #include "qemu/error-report.h"

diff --git 
a/app-emulation/qemu/files/qemu-5.1.0-pixman-for-vhost-user-gpu.patch 
b/app-emulation/qemu/files/qemu-5.1.0-pixman-for-vhost-user-gpu.patch
new file mode 100644
index 0000000..4eb644f
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.1.0-pixman-for-vhost-user-gpu.patch
@@ -0,0 +1,62 @@
+https://bugs.gentoo.org/735146
+
+From 4fd46e6cdd976f4aecdc3fbbad728e00a7bc4ee0 Mon Sep 17 00:00:00 2001
+From: Rafael Kitover <rkito...@gmail.com>
+Date: Thu, 13 Aug 2020 20:19:24 +0000
+Subject: [PATCH] configure: Require pixman for vhost-user-gpu.
+
+Use the test from Makefile to check if vhost-user-gpu is being built,
+and if so require pixman.
+
+Signed-off-by: Rafael Kitover <rkito...@gmail.com>
+---
+ configure | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+--- a/configure
++++ b/configure
+@@ -4062,20 +4062,6 @@ if test "$modules" = yes; then
+     fi
+ fi
+ 
+-##########################################
+-# pixman support probe
+-
+-if test "$softmmu" = "no"; then
+-  pixman_cflags=
+-  pixman_libs=
+-elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
+-  pixman_cflags=$($pkg_config --cflags pixman-1)
+-  pixman_libs=$($pkg_config --libs pixman-1)
+-else
+-  error_exit "pixman >= 0.21.8 not present." \
+-      "Please install the pixman devel package."
+-fi
+-
+ ##########################################
+ # libmpathpersist probe
+ 
+@@ -4491,6 +4477,20 @@ if test "$opengl" = "yes" && test "$have_x11" = "yes"; 
then
+   done
+ fi
+ 
++##########################################
++# pixman support probe
++
++if test "$softmmu" = "no" && ! test "${linux} ${virglrenderer} ${gbm} 
${want_tools}" = "yes yes yes yes";  then
++  pixman_cflags=
++  pixman_libs=
++elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
++  pixman_cflags=$($pkg_config --cflags pixman-1)
++  pixman_libs=$($pkg_config --libs pixman-1)
++else
++  error_exit "pixman >= 0.21.8 not present." \
++      "Please install the pixman devel package."
++fi
++
+ ##########################################
+ # libxml2 probe
+ if test "$libxml2" != "no" ; then
+-- 
+2.28.0
+

diff --git 
a/app-emulation/qemu/files/qemu-5.1.0-usb-host-workaround-libusb-bug.patch 
b/app-emulation/qemu/files/qemu-5.1.0-usb-host-workaround-libusb-bug.patch
new file mode 100644
index 0000000..34a50a9
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.1.0-usb-host-workaround-libusb-bug.patch
@@ -0,0 +1,82 @@
+From 202d69a715a4b1824dcd7ec1683d027ed2bae6d3 Mon Sep 17 00:00:00 2001
+Message-Id: 
<202d69a715a4b1824dcd7ec1683d027ed2bae6d3.1606202550.git.mpriv...@redhat.com>
+From: Gerd Hoffmann <kra...@redhat.com>
+Date: Mon, 24 Aug 2020 13:00:57 +0200
+Subject: [PATCH] usb-host: workaround libusb bug
+
+libusb_get_device_speed() does not work for
+libusb_wrap_sys_device() devices in v1.0.23.
+
+Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1871090
+Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
+Message-id: 20200824110057.32089-1-kra...@redhat.com
+Signed-off-by: Michal Privoznik <mpriv...@redhat.com>
+---
+ hw/usb/host-libusb.c | 37 ++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 36 insertions(+), 1 deletion(-)
+
+diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c
+index c474551d84..08604f787f 100644
+--- a/hw/usb/host-libusb.c
++++ b/hw/usb/host-libusb.c
+@@ -39,6 +39,11 @@
+ #endif
+ #include <libusb.h>
+ 
++#ifdef CONFIG_LINUX
++#include <sys/ioctl.h>
++#include <linux/usbdevice_fs.h>
++#endif
++
+ #include "qapi/error.h"
+ #include "migration/vmstate.h"
+ #include "monitor/monitor.h"
+@@ -885,6 +890,7 @@ static void usb_host_ep_update(USBHostDevice *s)
+ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd)
+ {
+     USBDevice *udev = USB_DEVICE(s);
++    int libusb_speed;
+     int bus_num = 0;
+     int addr = 0;
+     int rc;
+@@ -935,7 +941,36 @@ static int usb_host_open(USBHostDevice *s, libusb_device 
*dev, int hostfd)
+     usb_ep_init(udev);
+     usb_host_ep_update(s);
+ 
+-    udev->speed     = speed_map[libusb_get_device_speed(dev)];
++    libusb_speed = libusb_get_device_speed(dev);
++#ifdef CONFIG_LINUX
++    if (hostfd && libusb_speed == 0) {
++        /*
++         * Workaround libusb bug: libusb_get_device_speed() does not
++         * work for libusb_wrap_sys_device() devices in v1.0.23.
++         *
++         * Speeds are defined in linux/usb/ch9.h, file not included
++         * due to name conflicts.
++         */
++        int rc = ioctl(hostfd, USBDEVFS_GET_SPEED, NULL);
++        switch (rc) {
++        case 1: /* low */
++            libusb_speed = LIBUSB_SPEED_LOW;
++            break;
++        case 2: /* full */
++            libusb_speed = LIBUSB_SPEED_FULL;
++            break;
++        case 3: /* high */
++        case 4: /* wireless */
++            libusb_speed = LIBUSB_SPEED_HIGH;
++            break;
++        case 5: /* super */
++        case 6: /* super plus */
++            libusb_speed = LIBUSB_SPEED_SUPER;
++            break;
++        }
++    }
++#endif
++    udev->speed = speed_map[libusb_speed];
+     usb_host_speed_compat(s);
+ 
+     if (s->ddesc.iProduct) {
+-- 
+2.26.2
+

diff --git a/app-emulation/qemu/files/qemu-5.1.0-usb-oob-CVE-2020-14364.patch 
b/app-emulation/qemu/files/qemu-5.1.0-usb-oob-CVE-2020-14364.patch
new file mode 100644
index 0000000..d1d23ec
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.1.0-usb-oob-CVE-2020-14364.patch
@@ -0,0 +1,90 @@
+https://bugs.gentoo.org/743649
+
+From b946434f2659a182afc17e155be6791ebfb302eb Mon Sep 17 00:00:00 2001
+From: Gerd Hoffmann <kra...@redhat.com>
+Date: Tue, 25 Aug 2020 07:36:36 +0200
+Subject: [PATCH] usb: fix setup_len init (CVE-2020-14364)
+
+Store calculated setup_len in a local variable, verify it, and only
+write it to the struct (USBDevice->setup_len) in case it passed the
+sanity checks.
+
+This prevents other code (do_token_{in,out} functions specifically)
+from working with invalid USBDevice->setup_len values and overrunning
+the USBDevice->setup_buf[] buffer.
+
+Fixes: CVE-2020-14364
+Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
+Tested-by: Gonglei <arei.gong...@huawei.com>
+Reviewed-by: Li Qiang <liq...@gmail.com>
+Message-id: 20200825053636.29648-1-kra...@redhat.com
+---
+ hw/usb/core.c | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/hw/usb/core.c b/hw/usb/core.c
+index 5abd128b6b..5234dcc73f 100644
+--- a/hw/usb/core.c
++++ b/hw/usb/core.c
+@@ -129,6 +129,7 @@ void usb_wakeup(USBEndpoint *ep, unsigned int stream)
+ static void do_token_setup(USBDevice *s, USBPacket *p)
+ {
+     int request, value, index;
++    unsigned int setup_len;
+ 
+     if (p->iov.size != 8) {
+         p->status = USB_RET_STALL;
+@@ -138,14 +139,15 @@ static void do_token_setup(USBDevice *s, USBPacket *p)
+     usb_packet_copy(p, s->setup_buf, p->iov.size);
+     s->setup_index = 0;
+     p->actual_length = 0;
+-    s->setup_len   = (s->setup_buf[7] << 8) | s->setup_buf[6];
+-    if (s->setup_len > sizeof(s->data_buf)) {
++    setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];
++    if (setup_len > sizeof(s->data_buf)) {
+         fprintf(stderr,
+                 "usb_generic_handle_packet: ctrl buffer too small (%d > 
%zu)\n",
+-                s->setup_len, sizeof(s->data_buf));
++                setup_len, sizeof(s->data_buf));
+         p->status = USB_RET_STALL;
+         return;
+     }
++    s->setup_len = setup_len;
+ 
+     request = (s->setup_buf[0] << 8) | s->setup_buf[1];
+     value   = (s->setup_buf[3] << 8) | s->setup_buf[2];
+@@ -259,26 +261,28 @@ static void do_token_out(USBDevice *s, USBPacket *p)
+ static void do_parameter(USBDevice *s, USBPacket *p)
+ {
+     int i, request, value, index;
++    unsigned int setup_len;
+ 
+     for (i = 0; i < 8; i++) {
+         s->setup_buf[i] = p->parameter >> (i*8);
+     }
+ 
+     s->setup_state = SETUP_STATE_PARAM;
+-    s->setup_len   = (s->setup_buf[7] << 8) | s->setup_buf[6];
+     s->setup_index = 0;
+ 
+     request = (s->setup_buf[0] << 8) | s->setup_buf[1];
+     value   = (s->setup_buf[3] << 8) | s->setup_buf[2];
+     index   = (s->setup_buf[5] << 8) | s->setup_buf[4];
+ 
+-    if (s->setup_len > sizeof(s->data_buf)) {
++    setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];
++    if (setup_len > sizeof(s->data_buf)) {
+         fprintf(stderr,
+                 "usb_generic_handle_packet: ctrl buffer too small (%d > 
%zu)\n",
+-                s->setup_len, sizeof(s->data_buf));
++                setup_len, sizeof(s->data_buf));
+         p->status = USB_RET_STALL;
+         return;
+     }
++    s->setup_len = setup_len;
+ 
+     if (p->pid == USB_TOKEN_OUT) {
+         usb_packet_copy(p, s->data_buf, s->setup_len);
+-- 
+2.28.0
+

diff --git a/app-emulation/qemu/files/qemu-5.2.0-cleaner-werror.patch 
b/app-emulation/qemu/files/qemu-5.2.0-cleaner-werror.patch
new file mode 100644
index 0000000..33115f1
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.2.0-cleaner-werror.patch
@@ -0,0 +1,40 @@
+-Wall -Wextra compains about unused arguments,
+causes safe-stack to be mis-detected.
+--- a/configure
++++ b/configure
+@@ -2293,7 +2293,7 @@ fi
+ cat > $TMPC << EOF
+ #include <stdint.h>
+ #include <stdio.h>
+-int main(int argc, char *argv[]) {
++int main(void) {
+     return printf("%zu", SIZE_MAX);
+ }
+ EOF
+@@ -4911,7 +4911,7 @@ fi
+ 
+ if test "$safe_stack" = "yes"; then
+ cat > $TMPC << EOF
+-int main(int argc, char *argv[])
++int main(void)
+ {
+ #if ! __has_feature(safe_stack)
+ #error SafeStack Disabled
+@@ -4933,7 +4933,7 @@ EOF
+   fi
+ else
+ cat > $TMPC << EOF
+-int main(int argc, char *argv[])
++int main(void)
+ {
+ #if defined(__has_feature)
+ #if __has_feature(safe_stack)
+@@ -5283,7 +5283,7 @@ static const int Z = 1;
+ #define TAUT(X) ((X) == Z)
+ #define PAREN(X, Y) (X == Y)
+ #define ID(X) (X)
+-int main(int argc, char *argv[])
++int main(void)
+ {
+     int x = 0, y = 0;
+     x = ID(x);

diff --git a/app-emulation/qemu/files/qemu-5.2.0-disable-keymap.patch 
b/app-emulation/qemu/files/qemu-5.2.0-disable-keymap.patch
new file mode 100644
index 0000000..4b5676b
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.2.0-disable-keymap.patch
@@ -0,0 +1,25 @@
+Do not use system's 'qemu-keymap' in native case.
+--- a/meson.build
++++ b/meson.build
+@@ -337,6 +337,8 @@ if 'CONFIG_LIBCAP_NG' in config_host
+ endif
+ if get_option('xkbcommon').auto() and not have_system and not have_tools
+   xkbcommon = not_found
++elif get_option('xkbcommon').disabled()
++  xkbcommon = not_found
+ else
+   xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
+                          method: 'pkg-config', static: enable_static)
+--- a/pc-bios/keymaps/meson.build
++++ b/pc-bios/keymaps/meson.build
+@@ -33,7 +33,9 @@ keymaps = {
+   'tr': '-l tr',
+ }
+ 
+-if meson.is_cross_build() or 'CONFIG_XKBCOMMON' not in config_host
++if meson.is_cross_build()
+   native_qemu_keymap = find_program('qemu-keymap', required: false, disabler: 
true)
++elif get_option('xkbcommon').disabled()
++  native_qemu_keymap = not_found
+ else
+   native_qemu_keymap = qemu_keymap

diff --git a/app-emulation/qemu/files/qemu-5.2.0-fix-firmware-path.patch 
b/app-emulation/qemu/files/qemu-5.2.0-fix-firmware-path.patch
new file mode 100644
index 0000000..5396983
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.2.0-fix-firmware-path.patch
@@ -0,0 +1,16 @@
+Se absolute filename in files like
+    /usr/share/qemu/firmware/50-edk2-x86_64-secure.json
+
+Bug: https://bugs.gentoo.org/766743
+Patch-by: Jannik Glückert
+--- a/pc-bios/descriptors/meson.build
++++ b/pc-bios/descriptors/meson.build
+@@ -8,7 +8,7 @@ foreach f: [
+ ]
+   configure_file(input: files(f),
+                  output: f,
+-                 configuration: {'DATADIR': qemu_datadir},
++                 configuration: {'DATADIR': get_option('prefix') / 
qemu_datadir},
+                  install: get_option('install_blobs'),
+                  install_dir: qemu_datadir / 'firmware')
+ endforeach

diff --git a/app-emulation/qemu/files/qemu-5.2.0-no-pie-ld.patch 
b/app-emulation/qemu/files/qemu-5.2.0-no-pie-ld.patch
new file mode 100644
index 0000000..f47a587
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.2.0-no-pie-ld.patch
@@ -0,0 +1,73 @@
+From bbd2d5a8120771ec59b86a80a1f51884e0a26e53 Mon Sep 17 00:00:00 2001
+From: Christian Ehrhardt <christian.ehrha...@canonical.com>
+Date: Mon, 14 Dec 2020 16:09:38 +0100
+Subject: [PATCH] build: -no-pie is no functional linker flag
+
+Recent binutils changes dropping unsupported options [1] caused a build
+issue in regard to the optionroms.
+
+  ld -m elf_i386 -T /<<PKGBUILDDIR>>/pc-bios/optionrom//flat.lds -no-pie \
+    -s -o multiboot.img multiboot.o
+  ld.bfd: Error: unable to disambiguate: -no-pie (did you mean --no-pie ?)
+
+This isn't really a regression in ld.bfd, filing the bug upstream
+revealed that this never worked as a ld flag [2] - in fact it seems we
+were by accident setting --nmagic).
+
+Since it never had the wanted effect this usage of LDFLAGS_NOPIE, should be
+droppable without any effect. This also is the only use-case of LDFLAGS_NOPIE
+in .mak, therefore we can also remove it from being added there.
+
+[1]: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=983d925d
+[2]: https://sourceware.org/bugzilla/show_bug.cgi?id=27050#c5
+
+Signed-off-by: Christian Ehrhardt <christian.ehrha...@canonical.com>
+Message-Id: <20201214150938.1297512-1-christian.ehrha...@canonical.com>
+Cc: qemu-sta...@nongnu.org
+Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
+---
+ configure                  | 3 ---
+ pc-bios/optionrom/Makefile | 1 -
+ 2 files changed, 4 deletions(-)
+
+--- a/configure
++++ b/configure
+@@ -2137,7 +2137,6 @@ EOF
+ # Check we support --no-pie first; we will need this for building ROMs.
+ if compile_prog "-Werror -fno-pie" "-no-pie"; then
+   CFLAGS_NOPIE="-fno-pie"
+-  LDFLAGS_NOPIE="-no-pie"
+ fi
+ 
+ if test "$static" = "yes"; then
+@@ -2153,7 +2152,6 @@ if test "$static" = "yes"; then
+   fi
+ elif test "$pie" = "no"; then
+   CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
+-  CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
+ elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
+   CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
+   CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
+@@ -6714,7 +6712,6 @@ echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
+ echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
+ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
+ echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
+-echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
+ echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
+ echo "EXESUF=$EXESUF" >> $config_host_mak
+ echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
+diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
+index 084fc10f05..30771f8d17 100644
+--- a/pc-bios/optionrom/Makefile
++++ b/pc-bios/optionrom/Makefile
+@@ -41,7 +41,6 @@ override CFLAGS += $(call cc-option, $(Wa)-32)
+ 
+ LD_I386_EMULATION ?= elf_i386
+ override LDFLAGS = -m $(LD_I386_EMULATION) -T $(SRC_DIR)/flat.lds
+-override LDFLAGS += $(LDFLAGS_NOPIE)
+ 
+ all: multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin pvh.bin
+ 
+-- 
+2.30.0
+

diff --git a/app-emulation/qemu/files/qemu-5.2.0-strings.patch 
b/app-emulation/qemu/files/qemu-5.2.0-strings.patch
new file mode 100644
index 0000000..0b3dcdc
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-5.2.0-strings.patch
@@ -0,0 +1,23 @@
+https://bugs.gentoo.org/759310
+--- a/configure
++++ b/configure
+@@ -521,6 +521,7 @@ ld="${LD-${cross_prefix}ld}"
+ ranlib="${RANLIB-${cross_prefix}ranlib}"
+ nm="${NM-${cross_prefix}nm}"
+ strip="${STRIP-${cross_prefix}strip}"
++strings="${STRINGS-${cross_prefix}strings}"
+ windres="${WINDRES-${cross_prefix}windres}"
+ pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
+ query_pkg_config() {
+@@ -2265,9 +2266,9 @@ int main(int argc, char *argv[]) {
+ EOF
+ 
+ if compile_object ; then
+-    if strings -a $TMPO | grep -q BiGeNdIaN ; then
++    if $strings -a $TMPO | grep -q BiGeNdIaN ; then
+         bigendian="yes"
+-    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
++    elif $strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
+         bigendian="no"
+     else
+         echo big/little test failed

diff --git a/app-emulation/qemu/files/qemu-9999-fix-firmware-path.patch 
b/app-emulation/qemu/files/qemu-9999-fix-firmware-path.patch
new file mode 100644
index 0000000..ffff314
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-9999-fix-firmware-path.patch
@@ -0,0 +1,17 @@
+Set absolute filename in files like
+    /usr/share/qemu/firmware/50-edk2-x86_64-secure.json
+
+Bug: https://bugs.gentoo.org/766743
+Bug: https://bugs.launchpad.net/qemu/+bug/1913012
+Patch-by: Jannik Glückert
+--- a/pc-bios/descriptors/meson.build
++++ b/pc-bios/descriptors/meson.build
+@@ -9,7 +9,7 @@ if install_edk2_blobs
+   ]
+     configure_file(input: files(f),
+                    output: f,
+-                   configuration: {'DATADIR': qemu_datadir},
++                   configuration: {'DATADIR': get_option('prefix') / 
qemu_datadir},
+                    install: get_option('install_blobs'),
+                    install_dir: qemu_datadir / 'firmware')
+   endforeach

diff --git a/app-emulation/qemu/files/qemu-binfmt.initd.head 
b/app-emulation/qemu/files/qemu-binfmt.initd.head
index 0dcacef..7bada95 100644
--- a/app-emulation/qemu/files/qemu-binfmt.initd.head
+++ b/app-emulation/qemu/files/qemu-binfmt.initd.head
@@ -1,5 +1,5 @@
 #!/sbin/openrc-run
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # Enable automatic non-native program execution by the kernel.

diff --git a/app-emulation/qemu/metadata.xml b/app-emulation/qemu/metadata.xml
index 07244b5..ec3f45a 100644
--- a/app-emulation/qemu/metadata.xml
+++ b/app-emulation/qemu/metadata.xml
@@ -18,7 +18,7 @@
                <flag name="aio">Enables support for Linux's Async IO</flag>
                <flag name="alsa">Enable alsa output for sound emulation</flag>
                <flag name="capstone">Enable disassembly support with 
<pkg>dev-libs/capstone</pkg></flag>
-               <flag name="curl">Support ISOs / -cdrom directives vis HTTP or 
HTTPS.</flag>
+               <flag name="curl">Support ISOs / -cdrom directives via HTTP or 
HTTPS.</flag>
                <flag name="fdt">Enables firmware device tree support</flag>
                <flag name="glusterfs">Enables GlusterFS cluster fileystem via
                        <pkg>sys-cluster/glusterfs</pkg></flag>
@@ -28,6 +28,9 @@
                <flag name="iscsi">Enable direct iSCSI support via
                <pkg>net-libs/libiscsi</pkg> instead of indirectly via the Linux
                block layer that <pkg>sys-block/open-iscsi</pkg> does.</flag>
+               <flag name="io-uring">Enable efficient I/O via 
<pkg>sys-libs/liburing</pkg>.</flag>
+               <flag name="multipath">Enable multipath persistent reservation 
passthrough via
+               <pkg>sys-fs/multipath-tools</pkg>.</flag>
                <flag name="ncurses">Enable the ncurses-based console</flag>
                <flag name="nfs">Enable NFS support</flag>
                <flag name="numa">Enable NUMA support</flag>
@@ -39,12 +42,12 @@
                <flag name="rbd">Enable rados block device backend support, see 
http://ceph.newdream.net/wiki/QEMU-RBD</flag>
                <flag name="sdl">Enable the SDL-based console</flag>
                <flag name="sdl-image">SDL Image support for icons</flag>
+               <flag name="slirp">Enable TCP/IP in hypervisor via 
<pkg>net-libs/libslirp</pkg></flag>
                <flag name="spice">Enable Spice protocol support via 
<pkg>app-emulation/spice</pkg></flag>
                <flag name="ssh">Enable SSH based block device support via 
<pkg>net-libs/libssh2</pkg></flag>
                <flag name="static-user">Build the User targets as static 
binaries</flag>
                <flag name="static">Build the User and Software MMU (system) 
targets as well as tools as static binaries</flag>
                <flag name="systemtap">Enable SystemTAP/DTrace tracing</flag>
-               <flag name="tci">Enable the TCG Interpreter which can speed up 
or slowdown workloads depending on the host and guest CPUs being emulated. In 
the future it will be a runtime option but for now its compile time.</flag>
                <flag name="jemalloc">Enable jemalloc allocator support</flag>
                <flag name="jpeg">Enable jpeg image support for the VNC console 
server</flag>
                <flag name="png">Enable png image support for the VNC console 
server</flag>
@@ -57,11 +60,9 @@
                <flag name="virtfs">Enable VirtFS via virtio-9p-pci / fsdev. 
See http://wiki.qemu.org/Documentation/9psetup</flag>
                <flag name="vte">Enable terminal support 
(<pkg>x11-libs/vte</pkg>) in the GTK+ interface</flag>
                <flag name="xattr">Add support for getting and setting POSIX 
extended attributes, through
-               <pkg>sys-apps/attr</pkg>. Requisite for the virtfs backend.
-       </flag>
+               <pkg>sys-apps/attr</pkg>. Requisite for the virtfs 
backend.</flag>
                <flag name="xen">Enables support for Xen backends</flag>
                <flag name="xfs">Support xfsctl() notification and syncing for 
XFS backed
                virtual disks.</flag>
-               <flag name="xkb">Depend on x11-libs/libxkbcommon to build 
qemu-keymap tool for converting xkb keymaps</flag>
        </use>
 </pkgmetadata>

diff --git a/app-emulation/qemu/qemu-4.2.0-r2.ebuild 
b/app-emulation/qemu/qemu-5.2.0-r2.ebuild
similarity index 83%
rename from app-emulation/qemu/qemu-4.2.0-r2.ebuild
rename to app-emulation/qemu/qemu-5.2.0-r2.ebuild
index 21b7710..549e0c7 100644
--- a/app-emulation/qemu/qemu-4.2.0-r2.ebuild
+++ b/app-emulation/qemu/qemu-5.2.0-r2.ebuild
@@ -1,13 +1,11 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI="7"
 
-PYTHON_COMPAT=( python3_7 )
+PYTHON_COMPAT=( python3_{7,8,9} )
 PYTHON_REQ_USE="ncurses,readline"
 
-PLOCALES="bg de_DE fr_FR hu it tr zh_CN"
-
 FIRMWARE_ABI_VERSION="4.0.0-r50"
 
 inherit eutils linux-info toolchain-funcs multilib python-r1 \
@@ -16,16 +14,16 @@ inherit eutils linux-info toolchain-funcs multilib 
python-r1 \
 if [[ ${PV} = *9999* ]]; then
        EGIT_REPO_URI="https://git.qemu.org/git/qemu.git";
        EGIT_SUBMODULES=(
-               slirp
-               tests/fp/berkeley-{test,soft}float-3
+               meson
+               tests/fp/berkeley-softfloat-3
+               tests/fp/berkeley-testfloat-3
                ui/keycodemapdb
        )
        inherit git-r3
        SRC_URI=""
 else
-       SRC_URI="https://download.qemu.org/${P}.tar.xz
-               https://dev.gentoo.org/~tamiko/distfiles/${P}-patches-r1.tar.xz";
-       KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86"
+       SRC_URI="https://download.qemu.org/${P}.tar.xz";
+       KEYWORDS="amd64 arm64 ~ppc ~ppc64 x86"
 fi
 
 DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
@@ -35,18 +33,21 @@ LICENSE="GPL-2 LGPL-2 BSD-2"
 SLOT="0"
 
 IUSE="accessibility +aio alsa bzip2 capstone +caps +curl debug doc
-       +fdt glusterfs gnutls gtk infiniband iscsi jemalloc +jpeg kernel_linux
-       kernel_FreeBSD lzo ncurses nfs nls numa opengl +oss +pin-upstream-blobs
+       +fdt glusterfs gnutls gtk infiniband iscsi io-uring
+       jack jemalloc +jpeg kernel_linux
+       kernel_FreeBSD lzo multipath
+       ncurses nfs nls numa opengl +oss +pin-upstream-blobs
        plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
-       smartcard snappy spice ssh static static-user systemtap tci test usb
+       +slirp
+       smartcard snappy spice ssh static static-user systemtap test udev usb
        usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen
-       xfs +xkb"
+       xfs zstd"
 
 COMMON_TARGETS="aarch64 alpha arm cris hppa i386 m68k microblaze microblazeel
        mips mips64 mips64el mipsel nios2 or1k ppc ppc64 riscv32 riscv64 s390x
        sh4 sh4eb sparc sparc64 x86_64 xtensa xtensaeb"
 IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS}
-       lm32 moxie tricore unicore32"
+       avr lm32 moxie rx tricore unicore32"
 IUSE_USER_TARGETS="${COMMON_TARGETS}
        aarch64_be armeb mipsn32 mipsn32el ppc64abi32 ppc64le sparc32plus
        tilegx"
@@ -66,10 +67,12 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
        qemu_softmmu_targets_ppc? ( fdt )
        qemu_softmmu_targets_riscv32? ( fdt )
        qemu_softmmu_targets_riscv64? ( fdt )
-       static? ( static-user !alsa !gtk !opengl !pulseaudio !plugins !rbd 
!snappy )
+       static? ( static-user !alsa !gtk !jack !opengl !pulseaudio !plugins 
!rbd !snappy )
        static-user? ( !plugins )
-       virtfs? ( xattr )
+       vhost-user-fs? ( caps seccomp )
+       virtfs? ( caps xattr )
        vte? ( gtk )
+       multipath? ( udev )
        plugins? ( !static !static-user )
 "
 
@@ -92,7 +95,6 @@ ALL_DEPEND="
 # softmmu targets (qemu-system-*).
 SOFTMMU_TOOLS_DEPEND="
        dev-libs/libxml2[static-libs(+)]
-       xkb? ( x11-libs/libxkbcommon[static-libs(+)] )
        >=x11-libs/pixman-0.28.0[static-libs(+)]
        accessibility? (
                app-accessibility/brltty[api]
@@ -120,9 +122,12 @@ SOFTMMU_TOOLS_DEPEND="
                sys-fabric/librdmacm:=[static-libs(+)]
        )
        iscsi? ( net-libs/libiscsi )
+       io-uring? ( sys-libs/liburing:=[static-libs(+)] )
+       jack? ( virtual/jack )
        jemalloc? ( dev-libs/jemalloc )
        jpeg? ( virtual/jpeg:0=[static-libs(+)] )
        lzo? ( dev-libs/lzo:2[static-libs(+)] )
+       multipath? ( sys-fs/multipath-tools )
        ncurses? (
                sys-libs/ncurses:0=[unicode]
                sys-libs/ncurses:0=[static-libs(+)]
@@ -140,11 +145,12 @@ SOFTMMU_TOOLS_DEPEND="
        rbd? ( sys-cluster/ceph )
        sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
        sdl? (
-               media-libs/libsdl2[X]
+               media-libs/libsdl2[video]
                media-libs/libsdl2[static-libs(+)]
        )
        sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
        seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+       slirp? ( net-libs/libslirp[static-libs(+)] )
        smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
        snappy? ( app-arch/snappy:= )
        spice? (
@@ -152,28 +158,31 @@ SOFTMMU_TOOLS_DEPEND="
                >=app-emulation/spice-0.12.0[static-libs(+)]
        )
        ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
+       udev? ( virtual/libudev[static-libs(+)] )
        usb? ( >=virtual/libusb-1-r2[static-libs(+)] )
        usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
        vde? ( net-misc/vde[static-libs(+)] )
        virgl? ( media-libs/virglrenderer[static-libs(+)] )
        virtfs? ( sys-libs/libcap )
        xen? ( app-emulation/xen-tools:= )
-       xfs? ( sys-fs/xfsprogs[static-libs(+)] )"
+       xfs? ( sys-fs/xfsprogs[static-libs(+)] )
+       zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
+"
 
 X86_FIRMWARE_DEPEND="
        pin-upstream-blobs? (
                ~sys-firmware/edk2-ovmf-201905[binary]
-               ~sys-firmware/ipxe-1.0.0_p20190728[binary]
+               ~sys-firmware/ipxe-1.0.0_p20190728[binary,qemu]
                ~sys-firmware/seabios-1.12.0[binary,seavgabios]
                ~sys-firmware/sgabios-0.1_pre8[binary]
        )
        !pin-upstream-blobs? (
                sys-firmware/edk2-ovmf
-               sys-firmware/ipxe
+               sys-firmware/ipxe[qemu]
                >=sys-firmware/seabios-1.10.2[seavgabios]
                sys-firmware/sgabios
        )"
-PPC64_FIRMWARE_DEPEND="
+PPC_FIRMWARE_DEPEND="
        pin-upstream-blobs? (
                ~sys-firmware/seabios-1.12.0[binary,seavgabios]
        )
@@ -201,7 +210,8 @@ CDEPEND="
        )
        qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
        qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
-       qemu_softmmu_targets_ppc64? ( ${PPC64_FIRMWARE_DEPEND} )
+       qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+       qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
 "
 DEPEND="${CDEPEND}
        kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
@@ -215,13 +225,12 @@ RDEPEND="${CDEPEND}
        selinux? ( sec-policy/selinux-qemu )"
 
 PATCHES=(
-       "${FILESDIR}"/${PN}-2.5.0-cflags.patch
-       "${FILESDIR}"/${PN}-2.5.0-sysmacros.patch
        "${FILESDIR}"/${PN}-2.11.1-capstone_include_path.patch
-       "${FILESDIR}"/${PN}-4.0.0-sanitize-interp_info.patch
-       "${FILESDIR}"/${PN}-4.0.0-mkdir_systemtap.patch #684902
-       "${WORKDIR}"/patches
-       "${FILESDIR}"/${PN}-4.2.0-r2-musl.patch
+       "${FILESDIR}"/${PN}-5.2.0-cleaner-werror.patch
+       "${FILESDIR}"/${PN}-5.2.0-disable-keymap.patch
+       "${FILESDIR}"/${PN}-5.2.0-strings.patch
+       "${FILESDIR}"/${PN}-5.2.0-fix-firmware-path.patch
+       "${FILESDIR}"/${PN}-5.2.0-no-pie-ld.patch
 )
 
 QA_PREBUILT="
@@ -229,10 +238,13 @@ QA_PREBUILT="
        usr/share/qemu/openbios-ppc
        usr/share/qemu/openbios-sparc64
        usr/share/qemu/openbios-sparc32
+       usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+       usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
        usr/share/qemu/palcode-clipper
        usr/share/qemu/s390-ccw.img
        usr/share/qemu/s390-netboot.img
-       usr/share/qemu/u-boot.e500"
+       usr/share/qemu/u-boot.e500
+"
 
 QA_WX_LOAD="usr/bin/qemu-i386
        usr/bin/qemu-x86_64
@@ -255,7 +267,8 @@ QA_WX_LOAD="usr/bin/qemu-i386
        usr/bin/qemu-armeb
        usr/bin/qemu-sparc32plus
        usr/bin/qemu-s390x
-       usr/bin/qemu-unicore32"
+       usr/bin/qemu-unicore32
+"
 
 DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you 
have the
 kernel module loaded before running kvm. The easiest way to ensure that the
@@ -280,7 +293,7 @@ For systemd:
 
 pkg_pretend() {
        if use kernel_linux && kernel_is lt 2 6 25; then
-               eerror "This version of KVM requres a host kernel of 2.6.25 or 
higher."
+               eerror "This version of KVM requires a host kernel of 2.6.25 or 
higher."
        elif use kernel_linux; then
                if ! linux_config_exists; then
                        eerror "Unable to check your kernel for KVM support"
@@ -330,7 +343,7 @@ check_targets() {
        local var=$1 mak=$2
        local detected sorted
 
-       pushd "${S}"/default-configs >/dev/null || die
+       pushd "${S}"/default-configs/targets/ >/dev/null || die
 
        # Force C locale until glibc is updated. #564936
        detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | 
LC_COLLATE=C sort -u))
@@ -345,29 +358,6 @@ check_targets() {
        popd >/dev/null
 }
 
-handle_locales() {
-       # Make sure locale list is kept up-to-date.
-       local detected sorted
-       detected=$(echo $(cd po && printf '%s\n' *.po | grep -v messages.po | 
sed 's:.po$::' | sort -u))
-       sorted=$(echo $(printf '%s\n' ${PLOCALES} | sort -u))
-       if [[ ${sorted} != "${detected}" ]] ; then
-               eerror "The ebuild needs to be kept in sync."
-               eerror "PLOCALES: ${sorted}"
-               eerror " po/*.po: ${detected}"
-               die "sync PLOCALES"
-       fi
-
-       # Deal with selective install of locales.
-       if use nls ; then
-               # Delete locales the user does not want. #577814
-               rm_loc() { rm po/$1.po || die; }
-               l10n_for_each_disabled_locale_do rm_loc
-       else
-               # Cheap hack to disable gettext .mo generation.
-               rm -f po/*.po
-       fi
-}
-
 src_prepare() {
        check_targets IUSE_SOFTMMU_TARGETS softmmu
        check_targets IUSE_USER_TARGETS linux-user
@@ -375,17 +365,32 @@ src_prepare() {
        default
 
        # Use correct toolchain to fix cross-compiling
-       tc-export AR LD NM OBJCOPY PKG_CONFIG
+       tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
        export WINDRES=${CHOST}-windres
 
        # Verbose builds
        MAKEOPTS+=" V=1"
 
-       # Run after we've applied all patches.
-       handle_locales
-
        # Remove bundled copy of libfdt
        rm -r dtc || die
+
+       # conditionally apply patches for musl support
+       if use elibc_musl ; then
+               eapply 
"${FILESDIR}"/musl-patches/0001-linux-user-fix-build-with-musl-on-aarch64.patch
+               eapply 
"${FILESDIR}"/musl-patches/0001-linux-user-fix-build-with-musl-on-ppc64le.patch
+               eapply 
"${FILESDIR}"/musl-patches/0001-virtio-host-input-use-safe-64-bit-time-accessors-for.patch
+               eapply 
"${FILESDIR}"/musl-patches/0002-virtio-user-input-use-safe-64-bit-time-accessors-for.patch
+               eapply 
"${FILESDIR}"/musl-patches/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
+               eapply "${FILESDIR}"/musl-patches/MAP_SYNC-fix.patch
+               eapply 
"${FILESDIR}"/musl-patches/fix-segevent-and-sigval_t.patch
+               eapply "${FILESDIR}"/musl-patches/fix-sendmsg.patch
+               eapply "${FILESDIR}"/musl-patches/fix-sockios-header.patch
+               eapply "${FILESDIR}"/musl-patches/guest-agent-shutdown.patch
+               eapply 
"${FILESDIR}"/musl-patches/ignore-signals-33-and-64-to-allow-golang-emulation.patch
+               eapply "${FILESDIR}"/musl-patches/mips-softfloat.patch
+               eapply "${FILESDIR}"/musl-patches/musl-F_SHLCK-and-F_EXLCK.patch
+               eapply "${FILESDIR}"/musl-patches/xattr_size_max.patch
+       fi
 }
 
 ##
@@ -408,11 +413,21 @@ qemu_src_configure() {
                --datadir=/usr/share
                --docdir=/usr/share/doc/${PF}/html
                --mandir=/usr/share/man
-               --with-confsuffix=/qemu
                --localstatedir=/var
                --disable-bsd-user
+               --disable-containers # bug #732972
                --disable-guest-agent
                --disable-strip
+
+               # bug #746752: TCG interpreter has a few limitations:
+               # - it does not support FPU
+               # - it's generally slower on non-self-modifying code
+               # It's advantage is support for host architectures
+               # where native codegeneration is not implemented.
+               # Gentoo has qemu keyworded only on targets with
+               # native code generation available. Avoid the interpreter.
+               --disable-tcg-interpreter
+
                --disable-werror
                # We support gnutls/nettle for crypto operations.  It is 
possible
                # to use gcrypt when gnutls/nettle are disabled (but not when 
they
@@ -426,8 +441,8 @@ qemu_src_configure() {
                $(use_enable debug debug-info)
                $(use_enable debug debug-tcg)
                $(use_enable doc docs)
+               $(use_enable nls gettext)
                $(use_enable plugins)
-               $(use_enable tci tcg-interpreter)
                $(use_enable xattr attr)
        )
 
@@ -440,8 +455,23 @@ qemu_src_configure() {
                        use_enable "$@"
                fi
        }
+       # Enable option only for softmmu build, but not 'user' or 'tools'
+       conf_softmmu() {
+               if [[ ${buildtype} == "softmmu" ]] ; then
+                       use_enable "$@"
+               else
+                       echo "--disable-${2:-$1}"
+               fi
+       }
+       # Enable option only for tools build, but not 'user' or 'softmmu'
+       conf_tools() {
+               if [[ ${buildtype} == "tools" ]] ; then
+                       use_enable "$@"
+               else
+                       echo "--disable-${2:-$1}"
+               fi
+       }
        conf_opts+=(
-               --disable-bluez
                $(conf_notuser accessibility brlapi)
                $(conf_notuser aio linux-aio)
                $(conf_notuser bzip2)
@@ -455,10 +485,12 @@ qemu_src_configure() {
                $(conf_notuser gtk)
                $(conf_notuser infiniband rdma)
                $(conf_notuser iscsi libiscsi)
+               $(conf_notuser io-uring linux-io-uring)
                $(conf_notuser jemalloc jemalloc)
                $(conf_notuser jpeg vnc-jpeg)
                $(conf_notuser kernel_linux kvm)
                $(conf_notuser lzo)
+               $(conf_notuser multipath mpath)
                $(conf_notuser ncurses curses)
                $(conf_notuser nfs libnfs)
                $(conf_notuser numa)
@@ -467,17 +499,20 @@ qemu_src_configure() {
                $(conf_notuser rbd)
                $(conf_notuser sasl vnc-sasl)
                $(conf_notuser sdl)
-               $(conf_notuser sdl-image)
+               $(conf_softmmu sdl-image)
                $(conf_notuser seccomp)
+               $(conf_notuser slirp slirp system)
                $(conf_notuser smartcard)
                $(conf_notuser snappy)
                $(conf_notuser spice)
                $(conf_notuser ssh libssh)
+               $(conf_notuser udev libudev)
                $(conf_notuser usb libusb)
                $(conf_notuser usbredir usb-redir)
                $(conf_notuser vde)
                $(conf_notuser vhost-net)
                $(conf_notuser vhost-user-fs)
+               $(conf_tools vhost-user-fs virtiofsd)
                $(conf_notuser virgl virglrenderer)
                $(conf_notuser virtfs)
                $(conf_notuser vnc)
@@ -485,7 +520,9 @@ qemu_src_configure() {
                $(conf_notuser xen)
                $(conf_notuser xen xen-pci-passthrough)
                $(conf_notuser xfs xfsctl)
-               $(conf_notuser xkb xkbcommon)
+               # use prebuilt keymaps, bug #759604
+               --disable-xkbcommon
+               $(conf_notuser zstd)
        )
 
        if [[ ${buildtype} == "user" ]] ; then
@@ -497,10 +534,13 @@ qemu_src_configure() {
        if [[ ! ${buildtype} == "user" ]] ; then
                # audio options
                local audio_opts=(
+                       # Note: backend order matters here: #716202
+                       # We iterate from higher-level to lower level.
+                       $(usex pulseaudio pa "")
+                       $(usev jack)
+                       $(usev sdl)
                        $(usev alsa)
                        $(usev oss)
-                       $(usev sdl)
-                       $(usex pulseaudio pa "")
                )
                conf_opts+=(
                        --audio-drv-list=$(printf "%s," "${audio_opts[@]}")
@@ -551,6 +591,10 @@ qemu_src_configure() {
                tc-enables-pie && conf_opts+=( --enable-pie )
        fi
 
+       # Plumb through equivalent of EXTRA_ECONF to allow experiments
+       # like bug #747928.
+       conf_opts+=( ${EXTRA_CONF_QEMU} )
+
        echo "../configure ${conf_opts[*]}"
        cd "${builddir}"
        ../configure "${conf_opts[@]}" || die "configure failed"
@@ -610,8 +654,7 @@ src_test() {
        if [[ -n ${softmmu_targets} ]]; then
                cd "${S}/softmmu-build"
                pax-mark m */qemu-system-* #515550
-               emake -j1 check
-               emake -j1 check-report.html
+               emake check
        fi
 }
 
@@ -719,7 +762,7 @@ src_install() {
        doins "${FILESDIR}/bridge.conf"
 
        cd "${S}"
-       dodoc Changelog MAINTAINERS docs/specs/pci-ids.txt
+       dodoc MAINTAINERS docs/specs/pci-ids.txt
        newdoc pc-bios/README README.pc-bios
 
        # Disallow stripping of prebuilt firmware files.
@@ -741,8 +784,8 @@ src_install() {
                rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
                rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
                rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
-               # PPC64 loads vgabios-stdvga
-               if use qemu_softmmu_targets_x86_64 || use 
qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc64; then
+               # PPC/PPC64 loads vgabios-stdvga
+               if use qemu_softmmu_targets_x86_64 || use 
qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use 
qemu_softmmu_targets_ppc64; then
                        dosym ../seavgabios/vgabios-isavga.bin 
/usr/share/qemu/vgabios.bin
                        dosym ../seavgabios/vgabios-cirrus.bin 
/usr/share/qemu/vgabios-cirrus.bin
                        dosym ../seavgabios/vgabios-qxl.bin 
/usr/share/qemu/vgabios-qxl.bin

Reply via email to