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:
parent
31a745422d
commit
e6d37a3850
@ -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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user