fixed a serious codegen bug where profiled internal functions in plugins could have their return values smashed. this only affected plugins being internally profiled

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401919
This commit is contained in:
David Anderson 2008-03-02 18:18:42 +00:00
parent 31a745422d
commit e6d37a3850

View File

@ -1351,16 +1351,20 @@ inline void WriteOp_Call(JitWriter *jit)
IA32_Add_Rm_Imm8(jit, REG_ESP, 8, MOD_REG);
//call <addr>
//push eax
jmp = IA32_Call_Imm32(jit, 0);
IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false));
IA32_Push_Reg(jit, REG_EAX);
//push [esi+context]
//call ProfCallGate_End
//add esp, 4
//pop eax
IA32_Push_Rm_Disp8(jit, AMX_REG_INFO, AMX_INFO_CONTEXT);
jmp = IA32_Call_Imm32(jit, 0);
IA32_Write_Jump32_Abs(jit, jmp, (void *)ProfCallGate_End);
IA32_Add_Rm_Imm8(jit, REG_ESP, 4, MOD_REG);
IA32_Pop_Reg(jit, REG_EAX);
}
else
{