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);

Reply via email to