target/i386: emulate 64-bit ring 0 for linux-user if LM feature is set
commit40a205da415e9c10ff02505078700e14ead77092
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 20 Jun 2023 14:49:35 +0000 (20 16:49 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 29 Jun 2023 08:49:43 +0000 (29 10:49 +0200)
tree3b55730d2d0541dcecddbcfc39d40e58744a2b4f
parentd903259dd2dbe40e007db1724dd072c5e210b3f4
target/i386: emulate 64-bit ring 0 for linux-user if LM feature is set

32-bit binaries can run on a long mode processor even if the kernel
is 64-bit, of course, and this can have slightly different behavior;
for example, SYSCALL is allowed on Intel processors.

Allow reporting LM to programs running under user mode emulation,
so that "-cpu" can be used with named CPU models even for qemu-i386
and even without disabling LM by hand.

Fortunately, most of the runtime code in QEMU has to depend on HF_LMA_MASK
or on HF_CS64_MASK (which is anyway false for qemu-i386's 32-bit code
segment) rather than TARGET_X86_64, therefore all that is needed is an
update of linux-user's ring 0 setup.

Fixes: https://gitlab.com/qemu-project/qemu/-/issues/1534
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
linux-user/i386/cpu_loop.c
target/i386/cpu.c
target/i386/tcg/translate.c