Fix stack offsets and alloca alignments on ppc-vxworks
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 11 Dec 2018 15:03:29 +0000 (15:03 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Tue, 11 Dec 2018 15:03:29 +0000 (15:03 +0000)
* config/rs6000/vxworks.h (RS6000_STARTING_FRAME_OFFSET): Define,
accounting for STACK_BOUNDARY 128 regardless of TARGET_ALTIVEC/VSX.
(STACK_DYNAMIC_OFFSET): Likewise.

From-SVN: r267024

gcc/ChangeLog
gcc/config/rs6000/vxworks.h

index 31cafdc..99ba8bd 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-11  Eric Botcazou  <botcazou@adacore.com>
+
+       * config/rs6000/vxworks.h (RS6000_STARTING_FRAME_OFFSET): Define,
+       accounting for STACK_BOUNDARY 128.
+       (STACK_DYNAMIC_OFFSET): Likewise.
+
 2018-12-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/88425
index d2033f6..4968643 100644 (file)
@@ -116,7 +116,7 @@ VXWORKS_ADDITIONAL_CPP_SPEC
 #undef SDATA_DEFAULT_SIZE
 #define SDATA_DEFAULT_SIZE (TARGET_VXWORKS_RTP ? 8 : 0)
 
-/* Enforce 16bytes alignment for the stack pointer, to permit general
+/* Enforce 16-byte alignment for the stack pointer, to permit general
    compliance with e.g. Altivec instructions requirements.  Make sure
    this isn't overruled by the EABI constraints.  */
 
@@ -128,6 +128,17 @@ VXWORKS_ADDITIONAL_CPP_SPEC
 
 #undef  ABI_STACK_BOUNDARY
 
+#undef RS6000_STARTING_FRAME_OFFSET
+#define RS6000_STARTING_FRAME_OFFSET                                   \
+  (cfun->calls_alloca                                                  \
+   ? RS6000_ALIGN (crtl->outgoing_args_size + RS6000_SAVE_AREA, 16)    \
+   : (RS6000_ALIGN (crtl->outgoing_args_size, 16) + RS6000_SAVE_AREA))
+
+#undef STACK_DYNAMIC_OFFSET
+#define STACK_DYNAMIC_OFFSET(FUNDECL)                                  \
+   RS6000_ALIGN (crtl->outgoing_args_size.to_constant ()               \
+                + STACK_POINTER_OFFSET, 16)
+
 #undef SUBSUBTARGET_OVERRIDE_OPTIONS
 #define SUBSUBTARGET_OVERRIDE_OPTIONS          \
   do {                                         \