target/i386: do not set LM for 32-bit emulation '-cpu host/max'

32-bit targets by definition do not support long mode; therefore, the
bit must be masked in the features supported by the accelerator.

As a side effect, this avoids setting up the 0x80000008 CPUID leaf
for

qemu-system-i386 -cpu host

which since commit 5a140b255d ("x86/cpu: Use max host physical address
if -cpu max option is applied") would have printed this error:

qemu-system-i386: phys-bits should be between 32 and 36 (but is 48)

Backports 5ea9e9e239db83391a39c09f1de63c4099c20df5
This commit is contained in:
Paolo Bonzini 2021-03-04 18:07:25 -05:00 committed by Lioncash
parent 18100d1a3b
commit 56afe9f919

View file

@ -4429,6 +4429,11 @@ static uint32_t x86_cpu_get_supported_feature_word(struct uc_struct *uc,
} else { } else {
return ~0; return ~0;
} }
#ifndef TARGET_X86_64
if (w == FEAT_8000_0001_EDX) {
r &= ~CPUID_EXT2_LM;
}
#endif
if (migratable_only) { if (migratable_only) {
r &= x86_cpu_get_migratable_flags(w); r &= x86_cpu_get_migratable_flags(w);
} }