diff mbox

PR testsuite/70364: Properly align stack in gcc.target/i386/cleanup-[12].c

Message ID 20160329201352.GA11249@intel.com
State New
Headers show

Commit Message

H.J. Lu March 29, 2016, 8:13 p.m. UTC
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.
---
 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(-)

Comments

Uros Bizjak March 30, 2016, 7:07 a.m. UTC | #1
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
>
Jakub Jelinek March 30, 2016, 11:09 a.m. UTC | #2
On Wed, Mar 30, 2016 at 09:07:17AM +0200, Uros Bizjak wrote:
> 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.

Ok.

	Jakub
diff mbox

Patch

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"