From: Jeff Law Date: Mon, 15 Aug 1994 01:55:59 +0000 (-0600) Subject: pa.c (hppa_expand_prologue): Avoid writing outside the current stack boundary in... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2ebb1b42179408831331556fb977d188eb2f3574;p=gcc.git pa.c (hppa_expand_prologue): Avoid writing outside the current stack boundary in code to handle large stack... * pa.c (hppa_expand_prologue): Avoid writing outside the current stack boundary in code to handle large stack frames. From-SVN: r7926 --- diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 2ec1d8b33e5..6adca1b23b8 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -2090,10 +2090,18 @@ hppa_expand_prologue() size_rtx, tmpreg)); else { - store_reg (1, 0, FRAME_POINTER_REGNUM); + /* It is incorrect to store the saved frame pointer at *sp, + then increment sp (writes beyond the current stack boundary). + + So instead use stwm to store at *sp and post-increment the + stack pointer as an atomic operation. Then increment sp to + finish allocating the new frame. */ + emit_insn (gen_post_stwm (stack_pointer_rtx, + stack_pointer_rtx, + GEN_INT (64), tmpreg)); set_reg_plus_d (STACK_POINTER_REGNUM, STACK_POINTER_REGNUM, - actual_fsize); + actual_fsize - 64); } } /* no frame pointer needed. */