From: Thomas Huth <thuth@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: "Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Zhao Liu" <zhao1.liu@intel.com>,
"Thomas Huth" <thuth@redhat.com>
Subject: [PATCH 05/10] target/i386/cpu: Allow to limit the 64-bit binary to 32-bit mode only
Date: Thu, 2 Apr 2026 11:51:27 +0200 [thread overview]
Message-ID: <20260402095132.29245-6-thuth@redhat.com> (raw)
In-Reply-To: <20260402095132.29245-1-thuth@redhat.com>
From: Thomas Huth <thuth@redhat.com>
qemu-system-x86_64 is pretty much a proper superset of qemu-system-i386,
so in the long run, it does not make too much sense that we continuously
build two binaries here, we should deprecate the latter rather sooner
than later.
However, some people still might want to start QEMU in a mode that limits
the environment to 32-bit. Thus allow qemu-system-x86_64 to run in 32-bit
mode if the binary name ends in "-i386".
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
target/i386/cpu.h | 15 +++------------
target/i386/cpu.c | 20 ++++++++++----------
target/i386/gdbstub.c | 2 +-
3 files changed, 14 insertions(+), 23 deletions(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 0b539155c40..9cb357aa797 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -36,13 +36,8 @@
#define XEN_NR_VIRQS 24
-#ifdef TARGET_X86_64
-#define I386_ELF_MACHINE EM_X86_64
-#define ELF_MACHINE_UNAME "x86_64"
-#else
-#define I386_ELF_MACHINE EM_386
-#define ELF_MACHINE_UNAME "i686"
-#endif
+#define I386_ELF_MACHINE (target_x86_64() ? EM_X86_64 : EM_386)
+#define ELF_MACHINE_UNAME (target_x86_64() ? "x86_64" : "i686")
enum {
R_EAX = 0,
@@ -277,11 +272,7 @@ typedef enum X86Seg {
#define CR4_PKS_MASK (1U << 24)
#define CR4_LAM_SUP_MASK (1U << 28)
-#ifdef TARGET_X86_64
-#define CR4_FRED_MASK (1ULL << 32)
-#else
-#define CR4_FRED_MASK 0
-#endif
+#define CR4_FRED_MASK (target_x86_64() ? (1ULL << 32) : 0)
#define CR4_RESERVED_MASK \
(~(target_ulong)(CR4_VME_MASK | CR4_PVI_MASK | CR4_TSD_MASK \
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index c6fd1dc00eb..e30d47831d6 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -8094,18 +8094,18 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w)
}
switch (w) {
-#ifndef TARGET_X86_64
case FEAT_8000_0001_EDX:
/*
* 32-bit TCG can emulate 64-bit compatibility mode. If there is no
* way for userspace to get out of its 32-bit jail, we can leave
* the LM bit set.
*/
- unavail = tcg_enabled()
- ? CPUID_EXT2_LM & ~CPUID_EXT2_KERNEL_FEATURES
- : CPUID_EXT2_LM;
+ if (target_i386()) {
+ unavail = tcg_enabled()
+ ? CPUID_EXT2_LM & ~CPUID_EXT2_KERNEL_FEATURES
+ : CPUID_EXT2_LM;
+ }
break;
-#endif
case FEAT_8000_0007_EBX:
if (cpu && !IS_AMD_CPU(&cpu->env)) {
@@ -8351,11 +8351,11 @@ static void x86_cpu_load_model(X86CPU *cpu, const X86CPUModel *model)
static const gchar *x86_gdb_arch_name(CPUState *cs)
{
-#ifdef TARGET_X86_64
- return "i386:x86-64";
-#else
- return "i386";
-#endif
+ if (target_x86_64()) {
+ return "i386:x86-64";
+ } else {
+ return "i386";
+ }
}
static void x86_cpu_cpudef_class_init(ObjectClass *oc, const void *data)
diff --git a/target/i386/gdbstub.c b/target/i386/gdbstub.c
index 5c5fa727216..951c443e6d2 100644
--- a/target/i386/gdbstub.c
+++ b/target/i386/gdbstub.c
@@ -498,7 +498,7 @@ void x86_cpu_gdb_init(CPUState *cs)
#ifdef TARGET_X86_64
CPUX86State *env = &X86_CPU(cs)->env;
- if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) {
+ if (target_x86_64() && (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF)) {
gdb_register_coprocessor(cs, i386_cpu_gdb_get_egprs,
i386_cpu_gdb_set_egprs,
gdb_find_static_feature("i386-64bit-apx.xml"));
--
2.53.0
next prev parent reply other threads:[~2026-04-02 9:53 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 9:51 [PATCH for-11.1 00/10] Deprecate the qemu-system-i386 binary Thomas Huth
2026-04-02 9:51 ` [PATCH 01/10] target/i386/tcg/sysemu: Move target specific SMM code to separate functions Thomas Huth
2026-04-02 9:51 ` [PATCH 02/10] target/i386/tcg/sysemu: Allow 32-bit SMM code to be used in the 64-bit binary Thomas Huth
2026-04-02 9:51 ` [PATCH 03/10] target-info: Add functions for querying whether the target is i386 or x86_64 Thomas Huth
2026-04-02 9:51 ` [PATCH 04/10] cpu: Add a way to detect 32-bit mode from argv0 Thomas Huth
2026-04-02 9:51 ` Thomas Huth [this message]
2026-04-02 9:51 ` [PATCH 06/10] target/i386: Select a 32-bit/64-bit default CPU during runtime Thomas Huth
2026-04-02 9:51 ` [PATCH 07/10] target/i386: Adjust the suffix of the CPU devices to 32-bit/64-bit mode Thomas Huth
2026-04-02 9:51 ` [PATCH 08/10] hw/i386/isapc: Adjust the check for valid CPUs in the isapc machine Thomas Huth
2026-04-02 9:51 ` [PATCH 09/10] target/i386: Support migrating from i386 to x86_64 target Thomas Huth
2026-04-02 9:51 ` [PATCH 10/10] docs/about/deprecated: Deprecate the qemu-system-i386 binary Thomas Huth
2026-04-02 10:06 ` Daniel P. Berrangé
2026-04-02 10:11 ` Thomas Huth
2026-04-02 10:41 ` Daniel P. Berrangé
2026-04-02 10:44 ` Daniel P. Berrangé
2026-04-02 11:20 ` [PATCH for-11.1 00/10] " Peter Maydell
2026-04-02 13:02 ` Thomas Huth
2026-04-02 16:37 ` Daniel P. Berrangé
2026-04-02 16:44 ` Thomas Huth
2026-04-06 4:47 ` Pierrick Bouvier
2026-04-08 7:20 ` Thomas Huth
2026-04-08 15:42 ` Pierrick Bouvier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260402095132.29245-6-thuth@redhat.com \
--to=thuth@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=zhao1.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.