summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/rs6000/rs6000.c6
-rw-r--r--gcc/config/rs6000/sysv4.h9
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8a5188a787d..00ec109f87f 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -2994,6 +2994,10 @@ rs6000_makes_calls ()
old SP. To support calls through pointers, we also allocate a
fixed slot to store the TOC, -8 off the old SP. */
+#ifndef ABI_STACK_BOUNDARY
+#define ABI_STACK_BOUNDARY STACK_BOUNDARY
+#endif
+
rs6000_stack_t *
rs6000_stack_info ()
{
@@ -3108,7 +3112,7 @@ rs6000_stack_info ()
+ info_ptr->varargs_size
+ info_ptr->fixed_size);
- info_ptr->total_size = ALIGN (total_raw_size, STACK_BOUNDARY / BITS_PER_UNIT);
+ info_ptr->total_size = ALIGN (total_raw_size, ABI_STACK_BOUNDARY / BITS_PER_UNIT);
/* Determine if we need to allocate any stack frame.
For AIX We need to push the stack if a frame pointer is needed (because
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 2c4fb7082d0..68f4b8396b2 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -383,9 +383,14 @@ do { \
#undef STRICT_ALIGNMENT
#define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN || TARGET_LITTLE_ENDIAN)
-/* Align stack to 8 byte boundaries for eabi, 16 byte boundaries for System V.4 */
+/* Alignment in bits of the stack boundary. Note, in order to allow building
+ one set of libraries with -mno-eabi instead of eabi libraries and non-eabi
+ versions, just use 64 as the stack boundary. */
#undef STACK_BOUNDARY
-#define STACK_BOUNDARY ((TARGET_EABI) ? 64 : 128)
+#define STACK_BOUNDARY 64
+
+/* Real stack boundary as mandated by the appropriate ABI */
+#define ABI_STACK_BOUNDARY ((TARGET_EABI) ? 64 : 128)
/* No data type wants to be aligned rounder than this. */
#undef BIGGEST_ALIGNMENT