diff --git a/bochs/cpu/Makefile.in b/bochs/cpu/Makefile.in index 1f9bf3ebc..a947c0c4c 100644 --- a/bochs/cpu/Makefile.in +++ b/bochs/cpu/Makefile.in @@ -59,7 +59,6 @@ OBJS32 = \ stack_pro.o \ lazy_flags.o \ paging.o \ - vm8086.o \ debugstuff.o \ arith32.o \ mult32.o \ @@ -103,6 +102,7 @@ OBJSXX = \ protect_ctrl_pro.o \ mult8.o \ data_xfer8.o \ + vm8086.o \ # Objects which are only used for x86-64 code, but which have been diff --git a/bochs/cpu/vm8086.cc b/bochs/cpu/vm8086.cc index 900994d47..9ea011e27 100644 --- a/bochs/cpu/vm8086.cc +++ b/bochs/cpu/vm8086.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: vm8086.cc,v 1.12 2002-09-13 00:15:23 kevinlawton Exp $ +// $Id: vm8086.cc,v 1.13 2002-09-13 22:02:11 kevinlawton Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001 MandrakeSoft S.A. @@ -116,7 +116,11 @@ BX_CPU_C::stack_return_to_v86(Bit32u new_eip, Bit32u raw_cs_selector, BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value = raw_fs_selector; BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value = raw_gs_selector; BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value = raw_ss_selector; +#if BX_SUPPORT_X86_64 + RSP = new_esp; +#else ESP = new_esp; // Full 32bits are loaded. +#endif init_v8086_mode(); } @@ -130,7 +134,7 @@ BX_CPU_C::stack_return_from_v86(BxInstruction_t *i) BX_DEBUG(("IRET in vm86 with IOPL != 3")); exception(BX_GP_EXCEPTION, 0, 0); return; - } + } if (i->os_32) { Bit32u eip, ecs_raw, eflags_tmp;