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);
|
IA32_Add_Rm_Imm8(jit, REG_ESP, 8, MOD_REG);
|
||||||
|
|
||||||
//call <addr>
|
//call <addr>
|
||||||
|
//push eax
|
||||||
jmp = IA32_Call_Imm32(jit, 0);
|
jmp = IA32_Call_Imm32(jit, 0);
|
||||||
IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false));
|
IA32_Write_Jump32(jit, jmp, RelocLookup(jit, offs, false));
|
||||||
|
IA32_Push_Reg(jit, REG_EAX);
|
||||||
|
|
||||||
//push [esi+context]
|
//push [esi+context]
|
||||||
//call ProfCallGate_End
|
//call ProfCallGate_End
|
||||||
//add esp, 4
|
//add esp, 4
|
||||||
|
//pop eax
|
||||||
IA32_Push_Rm_Disp8(jit, AMX_REG_INFO, AMX_INFO_CONTEXT);
|
IA32_Push_Rm_Disp8(jit, AMX_REG_INFO, AMX_INFO_CONTEXT);
|
||||||
jmp = IA32_Call_Imm32(jit, 0);
|
jmp = IA32_Call_Imm32(jit, 0);
|
||||||
IA32_Write_Jump32_Abs(jit, jmp, (void *)ProfCallGate_End);
|
IA32_Write_Jump32_Abs(jit, jmp, (void *)ProfCallGate_End);
|
||||||
IA32_Add_Rm_Imm8(jit, REG_ESP, 4, MOD_REG);
|
IA32_Add_Rm_Imm8(jit, REG_ESP, 4, MOD_REG);
|
||||||
|
IA32_Pop_Reg(jit, REG_EAX);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user