[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86emul: some REX related polishing
commit 3c52e84b26dad16380a7a08160aa119327ff2ffb Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Wed Dec 21 16:57:34 2016 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Dec 21 16:57:34 2016 +0100 x86emul: some REX related polishing While there are a few cases where it seems better to open-code REX_* values, there's one where this clearly is a bad idea. And the SYSEXIT emulation has no need to look at REX at all, it can simply use op_bytes instead. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/x86_emulate/x86_emulate.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 34a511b..f134b1f 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -3142,7 +3142,7 @@ x86_emulate( case 0x90: /* nop / xchg %%r8,%%rax */ case X86EMUL_OPC_F3(0, 0x90): /* pause / xchg %%r8,%%rax */ - if ( !(rex_prefix & 1) ) + if ( !(rex_prefix & REX_B) ) break; /* nop / pause */ /* fall through */ @@ -4971,7 +4971,6 @@ x86_emulate( case X86EMUL_OPC(0x0f, 0x35): /* sysexit */ { uint64_t msr_content; - bool user64 = rex_prefix & REX_W; vcpu_must_have(sep); generate_exception_if(!mode_ring0(), EXC_GP, 0); @@ -4982,16 +4981,17 @@ x86_emulate( goto done; generate_exception_if(!(msr_content & 0xfffc), EXC_GP, 0); - generate_exception_if(user64 && (!is_canonical_address(_regs.edx) || - !is_canonical_address(_regs.ecx)), + generate_exception_if(op_bytes == 8 && + (!is_canonical_address(_regs.edx) || + !is_canonical_address(_regs.ecx)), EXC_GP, 0); cs.sel = (msr_content | 3) + /* SELECTOR_RPL_MASK */ - (user64 ? 32 : 16); + (op_bytes == 8 ? 32 : 16); cs.base = 0; /* flat segment */ cs.limit = ~0u; /* 4GB limit */ - cs.attr.bytes = user64 ? 0xafb /* L+DB+P+DPL3+S+Code */ - : 0xcfb; /* G+DB+P+DPL3+S+Code */ + cs.attr.bytes = op_bytes == 8 ? 0xafb /* L+DB+P+DPL3+S+Code */ + : 0xcfb; /* G+DB+P+DPL3+S+Code */ sreg.sel = cs.sel + 8; sreg.base = 0; /* flat segment */ @@ -5003,8 +5003,8 @@ x86_emulate( (rc = ops->write_segment(x86_seg_ss, &sreg, ctxt)) != 0 ) goto done; - _regs.eip = user64 ? _regs.edx : (uint32_t)_regs.edx; - _regs.esp = user64 ? _regs.ecx : (uint32_t)_regs.ecx; + _regs.eip = op_bytes == 8 ? _regs.edx : (uint32_t)_regs.edx; + _regs.esp = op_bytes == 8 ? _regs.ecx : (uint32_t)_regs.ecx; break; } -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |