summaryrefslogtreecommitdiffstats
path: root/target/i386/hvf/x86_decode.c
Commit message (Collapse)AuthorAgeFilesLines
* hvf: correctly handle REX prefix in relation to legacy prefixesCameron Esfahani2019-11-261-28/+36
| | | | | | | | | | | In real x86 processors, the REX prefix must come after legacy prefixes. REX before legacy is ignored. Update the HVF emulation code to properly handle this. Fix some spelling errors in constants. Fix some decoder table initialization issues found by Coverity. Signed-off-by: Cameron Esfahani <dirty@apple.com> Message-Id: <eff30ded8307471936bec5d84c3b6efbc95e3211.1574625592.git.dirty@apple.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* cpu: Replace ENV_GET_CPU with env_cpuRichard Henderson2019-06-101-11/+11
| | | | | | | | | Now that we have both ArchCPU and CPUArchState, we can define this generically instead of via macro in each target's cpu.h. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Acked-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
* i386: hvf: Don't miss 16-bit displacementRoman Bolshakov2019-02-051-1/+1
| | | | | | | | | | | | | In 16-bit addressing mode, when Mod = 0 and R/M = 6, decoded displacement doesn't reach decode_linear_addr and gets lost. Instructions that involve the combination of ModRM always get a pointer with zero offset from the beginning of DS segment. The change fixes drawing in F-BIRD from day 1 of '18 advent calendar. Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> Message-Id: <20190125154743.14498-1-r.bolshakov@yadro.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: drop debug printf in decode_sldtgroupRoman Bolshakov2018-12-181-2/+0Star
| | | | | | | | It's going to clutter QEMU logs if 0x0f00 is trapped. Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> Message-Id: <20181203100415.53027-2-r.bolshakov@yadro.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
* i386: hvf: Fix overrun of _decode_tbl1Roman Bolshakov2018-12-031-3/+3
| | | | | | | | | | | | | | | Single opcode instructions in ff group were incorrectly processed because an overrun of _decode_tbl1[0xff] resulted in access of _decode_tbl2[0x0]. Thus, decode_sldtgroup was called instead of decode_ffgroup: 7d71: decode_sldtgroup: 1 Unimplemented handler (7d71) for 108 (ff 0) While at it correct maximum length for _decode_tbl2 and _decode_tbl3. Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
* i386: hvf: Fix register refs if REX is presentRoman Bolshakov2018-10-191-29/+38
| | | | | | | | | | | | | | | | | | | | | | | | According to Intel(R)64 and IA-32 Architectures Software Developer's Manual, the following one-byte registers should be fetched when REX prefix is present (sorted by reg encoding index): AL, CL, DL, BL, SPL, BPL, SIL, DIL, R8L - R15L The first 8 are fetched if REX.R is zero, the last 8 if non-zero. The following registers should be fetched for instructions without REX prefix (also sorted by reg encoding index): AL, CL, DL, BL, AH, CH, DH, BH Current emulation code doesn't handle accesses to SPL, BPL, SIL, DIL when REX is present, thefore an instruction 40883e "mov %dil,(%rsi)" is decoded as "mov %bh,(%rsi)". That caused an infinite loop in vp_reset: https://lists.gnu.org/archive/html/qemu-devel/2018-10/msg03293.html Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> Message-Id: <20181018134401.44471-1-r.bolshakov@yadro.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* Use #include "..." for our own headers, <...> for othersMarkus Armbruster2018-02-091-1/+0Star
| | | | | | | | | | | | | | | | | | | | System headers should be included with <...>, our own headers with "...". Offenders tracked down with an ugly, brittle and probably buggy Perl script. Previous iteration was commit a9c94277f0. Delete inclusions of "string.h" and "strings.h" instead of fixing them to <string.h> and <strings.h>, because we always include these via osdep.h. Put the cleaned up system header includes first. While there, separate #include from file comment with exactly one blank line. Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20180201111846.21846-2-armbru@redhat.com>
* i386: hvf: cleanup x86_gen.hPaolo Bonzini2017-12-221-1/+1
| | | | | | This only includes VM_PANIC now. No need to include it from headers. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: remove addr_tPaolo Bonzini2017-12-221-19/+19
| | | | | | | Use target_ulong for virtual addresses and uint64_t for physical addresses. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: remove ZERO_INIT macroPaolo Bonzini2017-12-221-2/+1Star
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: remove more dead emulator codePaolo Bonzini2017-12-221-11/+11
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: unify register enums between HVF and the restPaolo Bonzini2017-12-221-40/+40
| | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: header cleanupPaolo Bonzini2017-12-221-0/+1
| | | | | | Remove inclusions of system headers and avoid "pragma once". Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
* i386: hvf: move all hvf files in the same directoryPaolo Bonzini2017-12-221-0/+2186
Just call it hvf/, no need for the "utils" suffix. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>