aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2014-05-27 15:58:04 +0200
committerMike Pall <mike>2014-05-27 15:58:04 +0200
commit49d3157e146bc33b5b7c3a82ce00a8f824f6fa49 (patch)
tree9eff38158501f9661272ef8c4695ab8fda6c28eb
parentfc76d540a076e44bd95af939e0675b0a44acf3c0 (diff)
downloadluajit-49d3157e146bc33b5b7c3a82ce00a8f824f6fa49.tar.gz
luajit-49d3157e146bc33b5b7c3a82ce00a8f824f6fa49.tar.bz2
luajit-49d3157e146bc33b5b7c3a82ce00a8f824f6fa49.zip
PPC: Fix red zone overflow in machine code generation.
-rw-r--r--src/lj_asm_ppc.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/lj_asm_ppc.h b/src/lj_asm_ppc.h
index e1a496a7..0a3d35e9 100644
--- a/src/lj_asm_ppc.h
+++ b/src/lj_asm_ppc.h
@@ -49,6 +49,8 @@ static void asm_exitstub_setup(ASMState *as, ExitNo nexits)
49{ 49{
50 ExitNo i; 50 ExitNo i;
51 MCode *mxp = as->mctop; 51 MCode *mxp = as->mctop;
52 if (mxp - (nexits + 3 + MCLIM_REDZONE) < as->mclim)
53 asm_mclimit(as);
52 /* 1: mflr r0; bl ->vm_exit_handler; li r0, traceno; bl <1; bl <1; ... */ 54 /* 1: mflr r0; bl ->vm_exit_handler; li r0, traceno; bl <1; bl <1; ... */
53 for (i = nexits-1; (int32_t)i >= 0; i--) 55 for (i = nexits-1; (int32_t)i >= 0; i--)
54 *--mxp = PPCI_BL|(((-3-i)&0x00ffffffu)<<2); 56 *--mxp = PPCI_BL|(((-3-i)&0x00ffffffu)<<2);