The qemu32 CPU model is chosen based on the <os arch=...> name when
creating the QEMU command line for a 64-bit host. For the opposite
transformation we can test the guest CPU model for the "lm" feature.
If it is absent, def->os.arch needs to be corrected.
Signed-off-by: Paolo Bonzini <pbonzini(a)redhat.com>
---
src/qemu/qemu_command.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index fc337f7..7fe8c48 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6830,6 +6830,24 @@ qemuParseCommandLineCPU(virDomainDefPtr dom,
}
} while ((p = next));
+ if (STREQ(dom->os.arch, "x86_64")) {
+ bool is_32bit = false;
+ union cpuData *cpuData = NULL;
+ int ret;
+
+ ret = cpuEncode("x86_64", cpu, NULL, &cpuData,
+ NULL, NULL, NULL, NULL);
+ if (ret < 0)
+ goto error;
+
+ is_32bit = (cpuHasFeature("x86_64", cpuData, "lm") != 1);
+ cpuDataFree("x86_64", cpuData);
+
+ if (is_32bit) {
+ VIR_FREE(dom->os.arch);
+ dom->os.arch = strdup("i686");
+ }
+ }
return 0;
syntax:
--
1.7.7.6