Patchwork [testsuite] Run TLS torture tests with -fpic etc.

login
register
mail settings
Submitter Rainer Orth
Date May 30, 2011, 3:21 p.m.
Message ID <yddvcwsrz89.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/97928/
State New
Headers show

Comments

Rainer Orth - May 30, 2011, 3:21 p.m.
As suggested by Joseph, the gcc.dg/torture/tls tests should be run with
-fpic/-fPIC and -fpie/-fPIE if supported.

The patch below implements part of this.  Unlike
gcc.dg/torture/stackalign/stackalign.exp, I'm using the code below to
add -fpic etc. to the torture options so it shows up in gcc.sum.

Unfortunately, I have no idea how to properly test if -fpie/-fPIE is
supported.  Jakub, do you have a suggestion?  Such a test could (and
probably should) be used in the few tests we currently have for -fpie:

gcc.dg/tls/pie-1.c, gcc.dg/pie-link.c, gcc.target/i386/pr39013-[12].c

Bootstrapped without regression on i386-pc-solaris2.11.

Will install on mainline unless someone objects once the -fpie test has
been fixed.

	Rainer


2011-05-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* lib/target-supports.exp (check_effective_target_fpie): New proc.
	* gcc.dg/torture/tls/tls.exp: Load torture-options.exp.
	Run tests with -fpic/-fPIC, -fpie/-fPIE if supported.
Rainer Orth - June 3, 2011, 7:38 p.m.
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> As suggested by Joseph, the gcc.dg/torture/tls tests should be run with
> -fpic/-fPIC and -fpie/-fPIE if supported.
>
> The patch below implements part of this.  Unlike
> gcc.dg/torture/stackalign/stackalign.exp, I'm using the code below to
> add -fpic etc. to the torture options so it shows up in gcc.sum.
>
> Unfortunately, I have no idea how to properly test if -fpie/-fPIE is
> supported.  Jakub, do you have a suggestion?  Such a test could (and

Jakub, any suggestion how to properly test for -fpie/-fPIE support?
Otherwise, I'll remove that part of the patch for now and just commit
the -fpic/-fPIC one.

> probably should) be used in the few tests we currently have for -fpie:
>
> gcc.dg/tls/pie-1.c, gcc.dg/pie-link.c, gcc.target/i386/pr39013-[12].c
>
> Bootstrapped without regression on i386-pc-solaris2.11.
>
> Will install on mainline unless someone objects once the -fpie test has
> been fixed.
>
> 	Rainer
>
>
> 2011-05-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
>
> 	* lib/target-supports.exp (check_effective_target_fpie): New proc.
> 	* gcc.dg/torture/tls/tls.exp: Load torture-options.exp.
> 	Run tests with -fpic/-fPIC, -fpie/-fPIE if supported.
>
> diff --git a/gcc/testsuite/gcc.dg/torture/tls/tls.exp b/gcc/testsuite/gcc.dg/torture/tls/tls.exp
> --- a/gcc/testsuite/gcc.dg/torture/tls/tls.exp
> +++ b/gcc/testsuite/gcc.dg/torture/tls/tls.exp
> @@ -1,4 +1,4 @@
> -#   Copyright (C) 2010 Free Software Foundation, Inc.
> +# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
>  
>  # This program is free software; you can redistribute it and/or modify
>  # it under the terms of the GNU General Public License as published by
> @@ -18,6 +18,7 @@
>  
>  # Load support procs.
>  load_lib gcc-dg.exp
> +load_lib torture-options.exp
>  
>  # If a testcase doesn't have special options, use these.
>  global DEFAULT_CFLAGS
> @@ -25,12 +26,32 @@ if ![info exists DEFAULT_CFLAGS] then {
>      set DEFAULT_CFLAGS " -ansi -pedantic-errors"
>  }
>  
> +global DG_TORTURE_OPTIONS LTO_TORTURE_OPTIONS
> +set TLS_TORTURE_OPTIONS $DG_TORTURE_OPTIONS
> +if { [check_effective_target_fpic] } then {
> +    foreach pic {fpic fPIC} {
> +	foreach option $DG_TORTURE_OPTIONS {
> +	    lappend TLS_TORTURE_OPTIONS "$option -$pic"
> +	}
> +    }
> +}
> +if { [check_effective_target_fpie] } then {
> +    foreach pie {fpie fPIE} {
> +	foreach option $DG_TORTURE_OPTIONS {
> +	    lappend TLS_TORTURE_OPTIONS "$option -$pie"
> +	}
> +    }
> +}
> +
>  # Initialize `dg'.
>  dg-init
> +torture-init
> +set-torture-options $TLS_TORTURE_OPTIONS {{}} $LTO_TORTURE_OPTIONS
>  
>  # Main loop.
>  gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
>          $DEFAULT_CFLAGS
>  
>  # All done.
> +torture-finish
>  dg-finish
> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -788,6 +788,18 @@ proc check_effective_target_fpic { } {
>      return 0
>  }
>  
> +# Return 1 if -fpie and -fPIE are supported, as in no warnings or errors
> +# emitted, 0 otherwise.
> +
> +proc check_effective_target_fpie { } {
> +    if [check_no_compiler_messages fpie executable {
> +	int main (void) { return 0; }
> +    } "-fpie"] {
> +	return 1
> +    }
> +    return 0
> +}
> +
>  # Return true if the target supports -mpaired-single (as used on MIPS).
>  
>  proc check_effective_target_mpaired_single { } {
Jakub Jelinek - June 3, 2011, 7:44 p.m.
On Fri, Jun 03, 2011 at 09:38:31PM +0200, Rainer Orth wrote:
> Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:
> Jakub, any suggestion how to properly test for -fpie/-fPIE support?
> Otherwise, I'll remove that part of the patch for now and just commit
> the -fpic/-fPIC one.

You want to compile/link the program with -pie -fpie rather than just -fpie,
if it links, otherwise you are testing just linking PIC code into normal
executables.

	Jakub

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/tls/tls.exp b/gcc/testsuite/gcc.dg/torture/tls/tls.exp
--- a/gcc/testsuite/gcc.dg/torture/tls/tls.exp
+++ b/gcc/testsuite/gcc.dg/torture/tls/tls.exp
@@ -1,4 +1,4 @@ 
-#   Copyright (C) 2010 Free Software Foundation, Inc.
+# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -18,6 +18,7 @@ 
 
 # Load support procs.
 load_lib gcc-dg.exp
+load_lib torture-options.exp
 
 # If a testcase doesn't have special options, use these.
 global DEFAULT_CFLAGS
@@ -25,12 +26,32 @@  if ![info exists DEFAULT_CFLAGS] then {
     set DEFAULT_CFLAGS " -ansi -pedantic-errors"
 }
 
+global DG_TORTURE_OPTIONS LTO_TORTURE_OPTIONS
+set TLS_TORTURE_OPTIONS $DG_TORTURE_OPTIONS
+if { [check_effective_target_fpic] } then {
+    foreach pic {fpic fPIC} {
+	foreach option $DG_TORTURE_OPTIONS {
+	    lappend TLS_TORTURE_OPTIONS "$option -$pic"
+	}
+    }
+}
+if { [check_effective_target_fpie] } then {
+    foreach pie {fpie fPIE} {
+	foreach option $DG_TORTURE_OPTIONS {
+	    lappend TLS_TORTURE_OPTIONS "$option -$pie"
+	}
+    }
+}
+
 # Initialize `dg'.
 dg-init
+torture-init
+set-torture-options $TLS_TORTURE_OPTIONS {{}} $LTO_TORTURE_OPTIONS
 
 # Main loop.
 gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
         $DEFAULT_CFLAGS
 
 # All done.
+torture-finish
 dg-finish
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -788,6 +788,18 @@  proc check_effective_target_fpic { } {
     return 0
 }
 
+# Return 1 if -fpie and -fPIE are supported, as in no warnings or errors
+# emitted, 0 otherwise.
+
+proc check_effective_target_fpie { } {
+    if [check_no_compiler_messages fpie executable {
+	int main (void) { return 0; }
+    } "-fpie"] {
+	return 1
+    }
+    return 0
+}
+
 # Return true if the target supports -mpaired-single (as used on MIPS).
 
 proc check_effective_target_mpaired_single { } {