mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 12:54:13 +00:00
Make FPU emulation use CS:IP when determining location of calling
software interrupt.
This commit is contained in:
parent
37925eaf7b
commit
fbbe6a43aa
1 changed files with 4 additions and 4 deletions
|
@ -222,8 +222,7 @@ void WINAPI DOSVM_Int3eHandler(CONTEXT86 *context)
|
|||
*/
|
||||
static void FPU_ModifyCode(CONTEXT86 *context, BYTE Opcode)
|
||||
{
|
||||
WORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp);
|
||||
BYTE *code = CTX_SEG_OFF_TO_LIN(context, stack[1], stack[0]);
|
||||
BYTE *code = CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip);
|
||||
|
||||
/*
|
||||
* All *NIX systems should have a real or kernel emulated FPU.
|
||||
|
@ -232,9 +231,10 @@ static void FPU_ModifyCode(CONTEXT86 *context, BYTE Opcode)
|
|||
code[-2] = 0x9b; /* The fwait instruction */
|
||||
code[-1] = Opcode; /* Insert the opcode */
|
||||
|
||||
if ( stack[0] < 2 ) FIXME("Backed up over a segment boundry in FPU code.\n");
|
||||
if ( ISV86(context) && LOWORD(context->Eip) < 2 )
|
||||
FIXME("Backed up over a real mode segment boundary in FPU code.\n");
|
||||
|
||||
stack[0] -= 2; /* back up the return address 2 bytes */
|
||||
context->Eip -= 2; /* back up the return address 2 bytes */
|
||||
|
||||
TRACE("Modified code in FPU int call to 0x9b 0x%x\n",Opcode);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue