aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-12-11 15:03:29 +0000
committerOlivier Hainque <hainque@gcc.gnu.org>2018-12-11 15:03:29 +0000
commitf9d4d3cf937b5a94d461a51799018dfb33262650 (patch)
treeca0e23df3d60b8b13277c05133a80e7c6c2f5501
parent61d1d9a664851d5004d8238c996d0f42768c0562 (diff)
downloadgcc-f9d4d3cf937b5a94d461a51799018dfb33262650.zip
gcc-f9d4d3cf937b5a94d461a51799018dfb33262650.tar.gz
gcc-f9d4d3cf937b5a94d461a51799018dfb33262650.tar.bz2
Fix stack offsets and alloca alignments on ppc-vxworks
* 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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/vxworks.h13
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 31cafdca..99ba8bd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h
index d2033f6..4968643 100644
--- a/gcc/config/rs6000/vxworks.h
+++ b/gcc/config/rs6000/vxworks.h
@@ -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 { \