mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-25 13:45:36 +00:00
c3a0cba5b1
The code that calculates the set of supported XSAVE components on CPUID looks at ext_save_areas to find out which components should be enabled. However, if there are zeroed entries in the ext_save_areas array, the ((env->features[esa->feature] & esa->bits) == esa->bits) check will always succeed and QEMU will unconditionally try to enable the component. Luckily this never caused any problems because the only missing entry in ext_save_areas is the PT State component (bit 8), and KVM currently doesn't support it (so it was cleared on ena_mask). But the code was still incorrect and would break if KVM starts returning CPUID[EAX=0xD,ECX=0].EAX[bit 8] as supported on GET_SUPPORTED_CPUID. Fix the problem by changing the code to not enable a XSAVE component if ExtSaveArea::bits is zero. Backports commit 9646f4927faf68e8690588c2fd6dc9834c440b58 from qemu |
||
---|---|---|
.. | ||
arch_memory_mapping.c | ||
bpt_helper.c | ||
cc_helper.c | ||
cc_helper_template.h | ||
cpu-qom.h | ||
cpu.c | ||
cpu.h | ||
excp_helper.c | ||
fpu_helper.c | ||
helper.c | ||
helper.h | ||
int_helper.c | ||
Makefile.objs | ||
mem_helper.c | ||
misc_helper.c | ||
mpx_helper.c | ||
ops_sse.h | ||
ops_sse_header.h | ||
seg_helper.c | ||
shift_helper_template.h | ||
smm_helper.c | ||
svm.h | ||
svm_helper.c | ||
TODO | ||
topology.h | ||
translate.c | ||
unicorn.c | ||
unicorn.h |