aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2016-03-30 12:37:37 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2016-03-30 12:37:37 +0000
commit883c45b3c18ce243ab6bc0984805a23165081b36 (patch)
treecc8b39d5803ac334b8c43367d1dacd675ac29618
parentce447dd09f4be64d12cbb6bed164475fb714c200 (diff)
Properly align stack in gcc.target/i386/cleanup-[12].c
PR testsuite/70364 * gcc.target/i386/cleanup-1.c: Include <stddef.h>. (check): New function. (bar): Call check. (foo): Align stack to 16 bytes when calling bar. * gcc.target/i386/cleanup-2.c: Likewise. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@234557 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/gcc.target/i386/cleanup-1.c17
-rw-r--r--gcc/testsuite/gcc.target/i386/cleanup-2.c17
2 files changed, 28 insertions, 6 deletions
diff --git a/gcc/testsuite/gcc.target/i386/cleanup-1.c b/gcc/testsuite/gcc.target/i386/cleanup-1.c
index fc82f35a0ab..dcfcc4edb5f 100644
--- a/gcc/testsuite/gcc.target/i386/cleanup-1.c
+++ b/gcc/testsuite/gcc.target/i386/cleanup-1.c
@@ -4,6 +4,7 @@
#include <unwind.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
@@ -47,6 +48,14 @@ handler (void *p __attribute__((unused)))
_exit (0);
}
+static void
+__attribute__((noinline))
+check (intptr_t p)
+{
+ if ((p & 15) != 0)
+ abort ();
+}
+
static int __attribute__((noinline))
fn5 (void)
{
@@ -59,6 +68,8 @@ void
bar (void)
{
char dummy __attribute__((cleanup (counter)));
+ unsigned long tmp[4] __attribute__((aligned(16)));
+ check ((intptr_t) tmp);
fn5 ();
}
@@ -133,9 +144,9 @@ foo (int x)
".type _L_mutex_lock_%=, @function\n"
"_L_mutex_lock_%=:\n"
"1:\t" "leaq %1, %%rdi\n"
-"2:\t" "subq $128, %%rsp\n"
+"2:\t" "subq $136, %%rsp\n"
"3:\t" "call bar\n"
-"4:\t" "addq $128, %%rsp\n"
+"4:\t" "addq $136, %%rsp\n"
"5:\t" "jmp 24f\n"
"6:\t" ".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
".previous\n\t"
@@ -179,7 +190,7 @@ foo (int x)
".sleb128 4b-3b\n"
"16:\t" ".byte 0x40 + (4b-3b-1) # DW_CFA_advance_loc\n\t"
".byte 0x0e # DW_CFA_def_cfa_offset\n\t"
- ".uleb128 128\n\t"
+ ".uleb128 136\n\t"
".byte 0x16 # DW_CFA_val_expression\n\t"
".uleb128 0x10\n\t"
".uleb128 20f-17f\n"
diff --git a/gcc/testsuite/gcc.target/i386/cleanup-2.c b/gcc/testsuite/gcc.target/i386/cleanup-2.c
index 0ec7c3182ad..7e60323373b 100644
--- a/gcc/testsuite/gcc.target/i386/cleanup-2.c
+++ b/gcc/testsuite/gcc.target/i386/cleanup-2.c
@@ -4,6 +4,7 @@
#include <unwind.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
@@ -47,6 +48,14 @@ handler (void *p __attribute__((unused)))
_exit (0);
}
+static void
+__attribute__((noinline))
+check (intptr_t p)
+{
+ if ((p & 15) != 0)
+ abort ();
+}
+
static int __attribute__((noinline))
fn5 (void)
{
@@ -59,6 +68,8 @@ void
bar (void)
{
char dummy __attribute__((cleanup (counter)));
+ unsigned long tmp[4] __attribute__((aligned(16)));
+ check ((intptr_t) tmp);
fn5 ();
}
@@ -74,9 +85,9 @@ foo (int x)
".type _L_mutex_lock_%=, @function\n"
"_L_mutex_lock_%=:\n"
"1:\t" "leaq %1, %%rdi\n"
-"2:\t" "subq $128, %%rsp\n"
+"2:\t" "subq $136, %%rsp\n"
"3:\t" "call bar\n"
-"4:\t" "addq $128, %%rsp\n"
+"4:\t" "addq $136, %%rsp\n"
"5:\t" "jmp 21f\n"
"6:\t" ".size _L_mutex_lock_%=, .-_L_mutex_lock_%=\n\t"
".previous\n\t"
@@ -160,7 +171,7 @@ foo (int x)
".uleb128 6b-5b-1\n"
"19:\t" ".byte 0x40 + (3b-1b) # DW_CFA_advance_loc\n\t"
".byte 0xe # DW_CFA_def_cfa_offset\n\t"
- ".uleb128 128\n\t"
+ ".uleb128 136\n\t"
".byte 0x40 + (5b-3b) # DW_CFA_advance_loc\n\t"
".byte 0xe # DW_CFA_def_cfa_offset\n\t"
".uleb128 0\n\t"