qemu-patch-raspberry4/target/i386
Andrew Oates 0aca060526 target-i386: Fix lcall/ljmp to call gate in IA-32e mode
Currently call gates are always treated as 32-bit gates.  In IA-32e mode
(either compatibility or 64-bit submode), system segment descriptors are
always 64-bit.  Treating them as 32-bit has the expected unfortunate
effect: only the lower 32 bits of the offset are loaded, the stack
pointer is truncated, a bad new stack pointer is loaded from the TSS (if
switching privilege levels), etc.

This change adds support for 64-bit call gate to the lcall and ljmp
instructions.  Additionally, there should be a check for non-canonical
stack pointers, but I've omitted that since there doesn't seem to be
checks for non-canonical addresses in this code elsewhere.

I've left the raise_exception_err_ra lines unwapped at 80 columns to
match the style in the rest of the file.

Signed-off-by: Andrew Oates <aoates@google.com>
Message-Id: <20180819181725.34098-1-andrew@andrewoates.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2018-08-23 18:46:25 +02:00
..
hvf target: Do not include "exec/exec-all.h" if it is not necessary 2018-06-01 14:15:10 +02:00
arch_dump.c dump: add kernel_gs_base to QEMU CPU state 2018-07-16 16:13:34 +02:00
arch_memory_mapping.c exec,dump,i386,ppc,s390x: don't include exec/cpu-all.h explicitly 2017-09-19 18:21:33 +02:00
bpt_helper.c target-i386: Fix eflags.TF/#DB handling of syscall/sysret insns 2016-12-22 16:01:04 +01:00
cc_helper.c target-i386: Use ctpop helper 2017-01-10 08:49:59 -08:00
cc_helper_template.h Move target-* CPU file into a target/ folder 2016-12-20 21:52:12 +01:00
cpu-qom.h i386: refactor KVM cpuid code so that it applies to hvf as well 2017-12-22 15:01:48 +01:00
cpu.c i386: Fix arch_query_cpu_model_expansion() leak 2018-08-23 18:46:25 +02:00
cpu.h i386: Add CPUID bit for WBNOINVD 2018-08-16 13:43:01 -03:00
excp_helper.c target-i386: Add NPT support 2018-07-02 15:41:18 +02:00
fpu_helper.c target/*/cpu.h: remove softfloat.h 2018-02-21 10:20:24 +00:00
gdbstub.c x86: Fix x86_64 'g' packet response to gdb from 32-bit mode. 2016-12-22 16:00:25 +01:00
hax-all.c target: Do not include "exec/exec-all.h" if it is not necessary 2018-06-01 14:15:10 +02:00
hax-darwin.c Remove unnecessary variables for function return value 2018-05-20 08:48:13 +03:00
hax-darwin.h hax: Support guest RAM sizes of 4GB or more 2018-02-13 11:44:13 +01:00
hax-i386.h hax: Support guest RAM sizes of 4GB or more 2018-02-13 11:44:13 +01:00
hax-interface.h hax: Support guest RAM sizes of 4GB or more 2018-02-13 11:44:13 +01:00
hax-mem.c target: Do not include "exec/exec-all.h" if it is not necessary 2018-06-01 14:15:10 +02:00
hax-windows.c target: Do not include "exec/exec-all.h" if it is not necessary 2018-06-01 14:15:10 +02:00
hax-windows.h hax: Support guest RAM sizes of 4GB or more 2018-02-13 11:44:13 +01:00
helper.c icount: fix cpu_restore_state_from_tb for non-tb-exit cases 2018-04-11 09:05:22 +10:00
helper.h target-i386: correctly propagate retaddr into SVM helpers 2017-02-16 18:37:01 +01:00
hyperv-proto.h i386/kvm: add support for Hyper-V TLB flush 2018-07-02 14:45:23 +02:00
hyperv.c hyperv: ensure VP index equal to QEMU cpu_index 2018-07-16 16:58:16 +02:00
hyperv.h hyperv: ensure VP index equal to QEMU cpu_index 2018-07-16 16:58:16 +02:00
int_helper.c target-i386: Use clz and ctz opcodes 2017-01-10 08:06:11 -08:00
kvm-stub.c hyperv: ensure VP index equal to QEMU cpu_index 2018-07-16 16:58:16 +02:00
kvm.c hyperv: ensure VP index equal to QEMU cpu_index 2018-07-16 16:58:16 +02:00
kvm_i386.h hyperv: ensure VP index equal to QEMU cpu_index 2018-07-16 16:58:16 +02:00
machine.c i386: do not migrate MSR_SMI_COUNT on machine types <2.12 2018-07-30 14:00:11 +02:00
Makefile.objs sev/i386: add command to initialize the memory encryption context 2018-03-13 17:35:16 +01:00
mem_helper.c target-i386: Add NPT support 2018-07-02 15:41:18 +02:00
misc_helper.c i386: implement MSR_SMI_COUNT for TCG 2018-07-30 14:00:11 +02:00
monitor.c i386/monitor.c: make addresses canonical for "info mem" and "info tlb" 2018-07-02 15:41:18 +02:00
mpx_helper.c target/i386: move cpu_sync_bndcs_hflags() function 2017-07-05 09:12:44 +02:00
ops_sse.h target/i386: fix phminposuw in-place operation 2017-09-19 14:09:11 +02:00
ops_sse_header.h target-i386: Use ctpop helper 2017-01-10 08:49:59 -08:00
seg_helper.c target-i386: Fix lcall/ljmp to call gate in IA-32e mode 2018-08-23 18:46:25 +02:00
sev-stub.c sev/i386: add sev_get_capabilities() 2018-03-13 17:36:06 +01:00
sev.c target/i386: sev: fix memory leaks 2018-05-09 00:13:39 +02:00
sev_i386.h sev/i386: add sev_get_capabilities() 2018-03-13 17:36:06 +01:00
shift_helper_template.h Move target-* CPU file into a target/ folder 2016-12-20 21:52:12 +01:00
smm_helper.c i386: implement MSR_SMI_COUNT for TCG 2018-07-30 14:00:11 +02:00
svm.h target-i386: Add NPT support 2018-07-02 15:41:18 +02:00
svm_helper.c target-i386: Add NPT support 2018-07-02 15:41:18 +02:00
TODO Move target-* CPU file into a target/ folder 2016-12-20 21:52:12 +01:00
trace-events sev/i386: finalize the SEV guest launch flow 2018-03-13 17:36:05 +01:00
translate.c fix "Missing break in switch" coverity reports 2018-08-23 13:32:50 +02:00
whp-dispatch.h whpx: commit missing file 2018-06-28 19:05:31 +02:00
whpx-all.c WHPX: register for unrecognized MSR exits 2018-06-28 19:05:36 +02:00
xsave_helper.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00