This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] PR testsuite/70364: Properly align stack in gcc.target/i386/cleanup-[12].c
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Jakub Jelinek <jakub at redhat dot com>
- Date: Wed, 30 Mar 2016 09:07:17 +0200
- Subject: Re: [PATCH] PR testsuite/70364: Properly align stack in gcc.target/i386/cleanup-[12].c
- Authentication-results: sourceware.org; auth=none
- References: <20160329201352 dot GA11249 at intel dot com>
On Tue, Mar 29, 2016 at 10:13 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> Tested on x86-64. OK for trunk?
>
> H.J.
> ---
> 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.
OK, but let's also ask Jakub, the author of the testcases, for opinion.
Thanks,
Uros.
> ---
> gcc/testsuite/gcc.target/i386/cleanup-1.c | 17 ++++++++++++++---
> 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"
> --
> 2.5.5
>