Update to rc4 of v2.9.0. Also includes a few other fixes, and a number of tweaks to the spec files. I'd be happy to answer any questions about all those spec file changes, I believe they were all in the direction of a more correct and maintainable spec file. Since this is still in rc phase, let's keep it in devel project. Final release should appear in time for Beta2 of SLE12SP3. Delta from previous: Added Alex's patch for keyboard empty event. OBS-URL: https://build.opensuse.org/request/show/487699 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=334
58 lines
1.7 KiB
Diff
58 lines
1.7 KiB
Diff
From de4c78727b69b2aa7c2db3ff8cd50c8ae08c1dc5 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 cd1f513b33..458f136fb4 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));
|