From 516633dc42a2cd92347f1bd2ba365b4043b6e8e3 Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 13 Jun 2004 15:20:01 +0000 Subject: [PATCH] jump to gate fix (aka OS/2 Warp install bug) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@923 c046a42c-6fe2-441c-8c8c-71466251a162 --- target-i386/helper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target-i386/helper.c b/target-i386/helper.c index 9a88275f20..46aa7b1ca6 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -1264,6 +1264,9 @@ void helper_ljmp_protected_T0_T1(int next_eip) if (!(e2 & DESC_P_MASK)) raise_exception_err(EXCP0B_NOSEG, new_cs & 0xfffc); gate_cs = e1 >> 16; + new_eip = (e1 & 0xffff); + if (type == 12) + new_eip |= (e2 & 0xffff0000); if (load_segment(&e1, &e2, gate_cs) != 0) raise_exception_err(EXCP0D_GPF, gate_cs & 0xfffc); dpl = (e2 >> DESC_DPL_SHIFT) & 3; @@ -1276,9 +1279,6 @@ void helper_ljmp_protected_T0_T1(int next_eip) raise_exception_err(EXCP0D_GPF, gate_cs & 0xfffc); if (!(e2 & DESC_P_MASK)) raise_exception_err(EXCP0D_GPF, gate_cs & 0xfffc); - new_eip = (e1 & 0xffff); - if (type == 12) - new_eip |= (e2 & 0xffff0000); limit = get_seg_limit(e1, e2); if (new_eip > limit) raise_exception_err(EXCP0D_GPF, 0);