From 2ebb1b42179408831331556fb977d188eb2f3574 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sun, 14 Aug 1994 19:55:59 -0600 Subject: [PATCH] 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 --- gcc/config/pa/pa.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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. */ -- 2.30.2