On 03/02/2016 07:04 AM, Paolo Bonzini wrote: > While ADDSEG will only be false in 16-bit mode for LEA, it can be > false even in other cases when 16-bit addresses are obtained via > the 67h prefix in 32-bit mode. In this case, gen_lea_v_seg forgets > to add a nonzero FS or GS base if CS/DS/ES/SS are all zero. This > case is pretty rare but happens when booting Windows 95/98, and > this patch fixes it. > > The bug is visible since commit d6a291498, but it was introduced > together with gen_lea_v_seg and it probably could be reproduced > with a "addr16 gs movsb" instruction as early as in commit > ca2f29f555805d07fb0b9ebfbbfc4e3656530977. > > Cc: r...@twiddle.net > Reported-by: Hervé Poussineau <hpous...@reactos.org> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > target-i386/translate.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-)
Reviewed-by: Richard Henderson <r...@twiddle.net> It doesn't even seem to be uncommon inside the win98 kernel, once you start looking for that addr16 gs pattern. Thanks, r~