[Ada] Align stack to 128bits on VxWorks for AArch64
authorDoug Rupp <rupp@adacore.com>
Tue, 22 May 2018 13:21:37 +0000 (13:21 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 22 May 2018 13:21:37 +0000 (13:21 +0000)
Real board requires fat alignment of stack.

2018-05-22  Doug Rupp  <rupp@adacore.com>

gcc/ada/

* sigtramp-vxworks-target.inc: Align stack to 128bits on AArch64.

From-SVN: r260513

gcc/ada/ChangeLog
gcc/ada/sigtramp-vxworks-target.inc

index c8e4d4d9babc7c0d4feb5834668840443c42f9e3..707ca720d6a2c2fc6bd1da495db4b59e74b000a5 100644 (file)
@@ -1,3 +1,7 @@
+2018-05-22  Doug Rupp  <rupp@adacore.com>
+
+       * sigtramp-vxworks-target.inc: Align stack to 128bits on AArch64.
+
 2018-05-22  Jerome Lambourg  <lambourg@adacore.com>
 
        * sigtramp-qnx.c: Fix stack alignment issue in the signal trampoline.
index f8648f1b19eccdfdd71941086ae6521fbe27fe13..1c3ed569c923bccb7b49e786c9841bb74cd87f4d 100644 (file)
@@ -417,17 +417,18 @@ TCR(".cfi_return_column " S(REGNO_PC_OFFSET))
 #ifdef __aarch64__
 #define SIGTRAMP_BODY \
 CR("") \
-TCR("# Push FP and LR on stack") \
-TCR("stp x29, x30, [sp, #-16]!") \
-TCR("# Push register used to hold the CFA on stack (pro forma)") \
-TCR("str x" S(CFA_REG) ", [sp, #-8]!")  \
+TCR("# Allocate the frame (16bytes aligned) and push FP and LR") \
+TCR("stp x29, x30, [sp, #-32]!") \
+TCR("add x29, sp, 0") \
+TCR("# Store register used to hold the CFA on stack (pro forma)") \
+TCR("str x" S(CFA_REG) ", [sp, 16]")  \
 TCR("# Set the CFA reg from the 5th arg") \
 TCR("mov x" S(CFA_REG) ", x4") \
 TCR("# Call the handler") \
 TCR("blr x3") \
 TCR("# Release our frame and return (should never get here!).") \
-TCR("ldr x" S(CFA_REG) " , [sp], 8") \
-TCR("ldp x29, x30, [sp], 16") \
+TCR("ldr x" S(CFA_REG) ", [sp, 16]") \
+TCR("ldp x29, x30, [sp], 32") \
 TCR("ret")
 #else
 #define SIGTRAMP_BODY \