This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][AArch64] Fix PR63293
- From: Jiong Wang <jiong dot wang at arm dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 19 Sep 2014 14:17:49 +0100
- Subject: [PATCH][AArch64] Fix PR63293
- Authentication-results: sourceware.org; auth=none
when generating instructions to access local variable, for example a local array,
if the array size very big, then we need a temp reg to keep the intermediate index,
then use that temp reg as base reg, so that ldr is capable of indexing the element.
while this will cause trouble, because the introduce of temp reg break the dependence
between the stack variable access and stack adjustment instructions which is unsafe
when signal trampoline executed.
this patch add barrier before stack adjustment in epilogue.
ok for trunk?
thanks.
gcc/
* gcc/config/aarch64.c (aarch64_expand_epilogue): Add barrier before stack adjustment.
-- Jiong
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 023f9fd..8eed9cf 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -2431,6 +2431,8 @@ aarch64_expand_epilogue (bool for_sibcall)
if (frame_size > 0)
{
+ emit_insn (gen_stack_tie (stack_pointer_rtx, stack_pointer_rtx));
+
if (frame_size >= 0x1000000)
{
rtx op0 = gen_rtx_REG (Pmode, IP0_REGNUM);