unicorn/qemu/target-i386
Bill Paul 5b14f0ed52
Correctly re-init EFER state during INIT IPI
When doing a re-initialization of a CPU core, the default state is to _not_
have 64-bit long mode enabled. This means the LME (long mode enable) and LMA
(long mode active) bits in the EFER model-specific register should be cleared.

However, the EFER state is part of the CPU environment which is
preserved by do_cpu_init(), so if EFER.LME and EFER.LMA were set at the
time an INIT IPI was received, they will remain set after the init completes.

This is contrary to what the Intel architecture manual describes and what
happens on real hardware, and it leaves the CPU in a weird state that the
guest can't clear.

To fix this, the 'efer' member of the CPUX86State structure has been moved
to an area outside the region preserved by do_cpu_init(), so that it can
be properly re-initialized by x86_cpu_reset().

Backports commit 2188cc52cb363433751f72b991d8fb05fc60e39d from qemu
2018-02-17 15:23:55 -05:00
..
arch_memory_mapping.c Switch non-CPU callers from ld/st*_phys to address_space_ld/st* 2018-02-12 19:27:02 -05:00
bpt_helper.c target-i386: Make check_hw_breakpoints static 2018-02-11 12:28:08 -05:00
cc_helper.c target-i386: exception handling for other helper functions 2018-02-17 15:23:51 -05:00
cc_helper_template.h This code should now build the x86_x64-softmmu part 2. 2017-01-19 22:50:28 +11:00
cpu-qom.h target-i386: create a separate AddressSpace for each CPU 2018-02-13 12:36:26 -05:00
cpu.c target-i386: emulate CPUID level of real hardware 2018-02-17 15:23:21 -05:00
cpu.h Correctly re-init EFER state during INIT IPI 2018-02-17 15:23:55 -05:00
excp_helper.c target-i386: introduce new raise_exception functions 2018-02-17 15:23:50 -05:00
fpu_helper.c target-i386: exception handling for FPU instructions 2018-02-17 15:23:50 -05:00
helper.c target-i386: Use correct memory attributes for memory accesses 2018-02-13 11:54:12 -05:00
helper.h target-i386: exception handling for seg_helper functions 2018-02-17 15:23:50 -05:00
int_helper.c target-i386: exception handling for div instructions 2018-02-17 15:23:50 -05:00
Makefile.objs target-i386: Move breakpoint related functions to new file 2018-02-11 12:25:24 -05:00
mem_helper.c target-i386: exception handling for memory helpers 2018-02-17 15:23:50 -05:00
misc_helper.c target-i386: exception handling for other helper functions 2018-02-17 15:23:51 -05:00
ops_sse.h target-i386: exception handling for other helper functions 2018-02-17 15:23:51 -05:00
ops_sse_header.h import 2015-08-21 15:04:50 +08:00
seg_helper.c target-i386: exception handling for seg_helper functions 2018-02-17 15:23:50 -05:00
shift_helper_template.h This code should now build the x86_x64-softmmu part 2. 2017-01-19 22:50:28 +11:00
smm_helper.c target-i386: set G=1 in SMM big real mode selectors 2018-02-13 12:31:18 -05:00
svm.h Automated leading tab to spaces conversion. 2017-01-21 12:28:22 +11:00
svm_helper.c target-i386: Use correct memory attributes for memory accesses 2018-02-13 11:54:12 -05:00
TODO import 2015-08-21 15:04:50 +08:00
topology.h platform.h move #3 2017-01-21 00:13:21 +11:00
translate.c target-i386: exception handling for seg_helper functions 2018-02-17 15:23:50 -05:00
unicorn.c target-i386: make xmm_regs 512-bit wide 2018-02-12 12:38:43 -05:00
unicorn.h New feature: registers can be bulk saved/restored in an opaque blob 2016-08-20 04:14:07 -07:00