diff options
author | H.J. Lu <hjl@gcc.gnu.org> | 2016-03-30 05:37:37 -0700 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2016-03-30 05:37:37 -0700 |
commit | a5463d23252d2e2532f2499381a9bdfbce39abd4 (patch) | |
tree | cc8b39d5803ac334b8c43367d1dacd675ac29618 /gcc | |
parent | 9c49362f039750b5ea63a32c3e403bd9865a3738 (diff) | |
download | gcc-a5463d23252d2e2532f2499381a9bdfbce39abd4.zip gcc-a5463d23252d2e2532f2499381a9bdfbce39abd4.tar.gz gcc-a5463d23252d2e2532f2499381a9bdfbce39abd4.tar.bz2 |
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.
From-SVN: r234557
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/cleanup-1.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/cleanup-2.c | 17 |
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 fc82f35..dcfcc4e 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 0ec7c31..7e603233 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" |