PPC: Fix red zone overflow in machine code generation.

This commit is contained in:
Mike Pall 2014-05-27 15:58:04 +02:00
parent fc76d540a0
commit 49d3157e14

View File

@ -49,6 +49,8 @@ static void asm_exitstub_setup(ASMState *as, ExitNo nexits)
{ {
ExitNo i; ExitNo i;
MCode *mxp = as->mctop; MCode *mxp = as->mctop;
if (mxp - (nexits + 3 + MCLIM_REDZONE) < as->mclim)
asm_mclimit(as);
/* 1: mflr r0; bl ->vm_exit_handler; li r0, traceno; bl <1; bl <1; ... */ /* 1: mflr r0; bl ->vm_exit_handler; li r0, traceno; bl <1; bl <1; ... */
for (i = nexits-1; (int32_t)i >= 0; i--) for (i = nexits-1; (int32_t)i >= 0; i--)
*--mxp = PPCI_BL|(((-3-i)&0x00ffffffu)<<2); *--mxp = PPCI_BL|(((-3-i)&0x00ffffffu)<<2);