aboutsummaryrefslogtreecommitdiff
path: root/target-i386/helper.c
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2004-06-13 15:20:01 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2004-06-13 15:20:01 +0000
commit516633dc42a2cd92347f1bd2ba365b4043b6e8e3 (patch)
tree7a8f784ad8d5360f64f69792c587332c7651419a /target-i386/helper.c
parentdc196a57e3e2e00e0c5f887390b1191787990193 (diff)
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
Diffstat (limited to 'target-i386/helper.c')
-rw-r--r--target-i386/helper.c6
1 files 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);