[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/emul: Simplfy L{ES, DS, SS, FS, GS} handling
On 14/12/16 13:34, Jan Beulich wrote: >>>> On 14.12.16 at 12:20, <andrew.cooper3@xxxxxxxxxx> wrote: >> --- a/xen/arch/x86/x86_emulate/x86_emulate.c >> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c >> @@ -2765,6 +2765,7 @@ x86_emulate( >> if ( mode_64bit() && (op_bytes == 4) ) >> op_bytes = 8; >> seg = (b >> 3) & 7; >> + ASSERT(is_x86_user_segment(seg)); > Kind of pointless, don't you think? It's guaranteed by the set of > case statements ahead of here. Well, I didn't think so at the time. All other uses either have seg used from a constant, or has previously had a user check in a generate_exception_if() clause. > >> @@ -3393,25 +3394,32 @@ x86_emulate( >> _regs.eip = dst.val; >> break; >> >> - case 0xc4: /* les */ { >> + case 0xc4: /* les */ >> + case 0xc5: /* lds */ >> + { >> unsigned long sel; > Since you're touching this anyway, and since you're eliminating the > use of dst.val here, may I ask that you eliminate this local variable > at once, using dst.val instead? Good point. > >> - dst.val = x86_seg_es; >> - les: /* dst.val identifies the segment */ >> - generate_exception_if(mode_64bit() && !ext, EXC_UD); >> + >> + generate_exception_if(mode_64bit(), EXC_UD); >> + seg = (b & 1) * 3; /* es = 0, ds = 3 */ >> + goto les; >> + >> + case X86EMUL_OPC(0x0f, 0xb2): /* lss */ >> + case X86EMUL_OPC(0x0f, 0xb4): /* lfs */ >> + case X86EMUL_OPC(0x0f, 0xb5): /* lgs */ >> + seg = b & 7; >> + >> + les: > My general line of thinking about where to place case labels was > - next to each other for opcodes sharing all of their code, or allowing > plain fall-through, > - in numeric order when plain fall-through is not possible. > Hence I'd prefer if the three could stay at the place where LSS was. Ok. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |