Clear hwcap_2 with Sun ld
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Wed, 20 Jun 2012 09:17:53 +0000 (09:17 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Wed, 20 Jun 2012 09:17:53 +0000 (09:17 +0000)
* gcc.target/i386/clearcapv2.map: New file.
* gcc.target/i386/i386.exp: Try it first before clearcap.map.

From-SVN: r188820

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/clearcapv2.map [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/i386.exp

index a3a8166f941e8426200301d8ecc79ad81905b539..db5fe8647b7b0f1ffb882fdf7afc02c64f9c48a7 100644 (file)
@@ -1,3 +1,8 @@
+2012-06-20  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * gcc.target/i386/clearcapv2.map: New file.
+       * gcc.target/i386/i386.exp: Try it first before clearcap.map.
+
 2012-06-19  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        * gcc.dg/stack-usage-1.c: Remove dg-options line for sh targets
diff --git a/gcc/testsuite/gcc.target/i386/clearcapv2.map b/gcc/testsuite/gcc.target/i386/clearcapv2.map
new file mode 100644 (file)
index 0000000..95cb14c
--- /dev/null
@@ -0,0 +1,7 @@
+# clear all hardware capabilities emitted by Sun as: the tests here
+# guard against execution at runtime
+# uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags
+$mapfile_version 2
+CAPABILITY {
+  HW = ;
+};
index 88ff715dc2494e98f40380fa381e5c74bf8859c3..785a973923617da5b4500926c4f6c96eec1b6815 100644 (file)
@@ -256,12 +256,23 @@ proc check_effective_target_rtm { } {
 
 # If the linker used understands -M <mapfile>, pass it to clear hardware
 # capabilities set by the Sun assembler.
-set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcap.map"
+# Try mapfile syntax v2 first which is the only way to clear hwcap_2 flags.
+set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcapv2.map"
 
-if [check_no_compiler_messages mapfile executable {
+if ![check_no_compiler_messages mapfilev2 executable {
+    int main (void) { return 0; }
+} $clearcap_ldflags ] {
+    # If this doesn't work, fall back to the less capable v1 syntax.
+    set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcap.map"
+
+    if ![check_no_compiler_messages mapfile executable {
        int main (void) { return 0; }
-  } $clearcap_ldflags ] {
+    } $clearcap_ldflags ] {
+       unset clearcap_ldflags
+    }
+}
 
+if [info exists clearcap_ldflags] {
   if { [info procs gcc_target_compile] != [list] \
        && [info procs saved_gcc_target_compile] == [list] } {
     rename gcc_target_compile saved_gcc_target_compile