mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 13:41:51 +00:00
KVM: x86: Emulate push sreg as done in Core
According to Intel SDM push of segment selectors is done in the following manner: "if the operand size is 32-bits, either a zero-extended value is pushed on the stack or the segment selector is written on the stack using a 16-bit move. For the last case, all recent Core and Atom processors perform a 16-bit move, leaving the upper portion of the stack location unmodified." This patch modifies the behavior to match the core behavior. Signed-off-by: Nadav Amit <namit@cs.technion.ac.il> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
5aca372236
commit
0fcc207c66
@ -1817,6 +1817,10 @@ static int em_push_sreg(struct x86_emulate_ctxt *ctxt)
|
||||
int seg = ctxt->src2.val;
|
||||
|
||||
ctxt->src.val = get_segment_selector(ctxt, seg);
|
||||
if (ctxt->op_bytes == 4) {
|
||||
rsp_increment(ctxt, -2);
|
||||
ctxt->op_bytes = 2;
|
||||
}
|
||||
|
||||
return em_push(ctxt);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user