8c721a87ae
- Remove deprecated patch "work-around-SA_RESTART-race" (boo#982208) - Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.6 * Patches dropped: 0002-XXX-work-around-SA_RESTART-race-wit.patch 0003-qemu-0.9.0.cvs-binfmt.patch 0004-qemu-cvs-alsa_bitfield.patch 0005-qemu-cvs-alsa_ioctl.patch 0006-qemu-cvs-alsa_mmap.patch 0007-qemu-cvs-gettimeofday.patch 0008-qemu-cvs-ioctl_debug.patch 0009-qemu-cvs-ioctl_nodirection.patch 0010-block-vmdk-Support-creation-of-SCSI.patch 0011-linux-user-add-binfmt-wrapper-for-a.patch 0012-PPC-KVM-Disable-mmu-notifier-check.patch 0013-linux-user-fix-segfault-deadlock.patch 0014-linux-user-binfmt-support-host-bina.patch 0015-linux-user-Ignore-broken-loop-ioctl.patch 0016-linux-user-lock-tcg.patch 0017-linux-user-Run-multi-threaded-code-.patch 0018-linux-user-lock-tb-flushing-too.patch 0019-linux-user-Fake-proc-cpuinfo.patch 0020-linux-user-implement-FS_IOC_GETFLAG.patch 0021-linux-user-implement-FS_IOC_SETFLAG.patch 0022-linux-user-XXX-disable-fiemap.patch 0023-slirp-nooutgoing.patch 0024-vnc-password-file-and-incoming-conn.patch 0025-linux-user-add-more-blk-ioctls.patch 0026-linux-user-use-target_ulong.patch 0027-block-Add-support-for-DictZip-enabl.patch 0028-block-Add-tar-container-format.patch OBS-URL: https://build.opensuse.org/request/show/408549 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=305
58 lines
1.6 KiB
Diff
58 lines
1.6 KiB
Diff
From 02e298aafcb7bb11036cabec82da958f7d860ac8 Mon Sep 17 00:00:00 2001
|
|
From: Alexander Graf <agraf@suse.de>
|
|
Date: Thu, 2 Feb 2012 18:02:33 +0100
|
|
Subject: [PATCH] linux-user: binfmt: support host binaries
|
|
|
|
When we have a working host binary equivalent for the guest binary we're
|
|
trying to run, let's just use that instead as it will be a lot faster.
|
|
|
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
|
---
|
|
linux-user/binfmt.c | 26 ++++++++++++++++++++++++++
|
|
1 file changed, 26 insertions(+)
|
|
|
|
diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c
|
|
index cd1f513..458f136 100644
|
|
--- a/linux-user/binfmt.c
|
|
+++ b/linux-user/binfmt.c
|
|
@@ -5,6 +5,9 @@
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
+#ifdef __x86_64__
|
|
+#define ARCH_NAME "x86_64"
|
|
+#endif
|
|
|
|
int main(int argc, char **argv, char **envp)
|
|
{
|
|
@@ -28,6 +31,29 @@ int main(int argc, char **argv, char **envp)
|
|
binfmt[0] = '\0';
|
|
/* Now argv[0] is the real qemu binary name */
|
|
|
|
+#ifdef ARCH_NAME
|
|
+ {
|
|
+ char *hostbin;
|
|
+ char *guestarch;
|
|
+ int r;
|
|
+
|
|
+ guestarch = strrchr(argv[0], '-') ;
|
|
+ if (!guestarch) {
|
|
+ goto skip;
|
|
+ }
|
|
+ guestarch++;
|
|
+ r = asprintf(&hostbin, "/emul/" ARCH_NAME "-for-%s/%s", guestarch, argv[1]);
|
|
+ if ((r > 0) && !access(hostbin, X_OK)) {
|
|
+ /*
|
|
+ * We found a host binary replacement for the non-host binary. Let's
|
|
+ * use that instead!
|
|
+ */
|
|
+ return execve(hostbin, &argv[2], envp);
|
|
+ }
|
|
+ }
|
|
+skip:
|
|
+#endif
|
|
+
|
|
new_argv = (char **)malloc((argc + 2) * sizeof(*new_argv));
|
|
if (argc > 3) {
|
|
memcpy(&new_argv[4], &argv[3], (argc - 3) * sizeof(*new_argv));
|