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 <[email protected]>
* 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 { } {
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University