2011-12-15 David Daney <david.daney@cavium.com>
authorDavid Daney <ddaney@avtrex.com>
Fri, 16 Dec 2011 06:18:55 +0000 (06:18 +0000)
committerDavid Daney <ddaney@avtrex.com>
Fri, 16 Dec 2011 06:18:55 +0000 (06:18 +0000)
    Nick Clifton <nickc@redhat.com>

* ld-elfvers/vers.exp (picflag): Set to -fpic for mips*-*-* when
using GCC-4.3 or later.
(pic): Set to "yes" for mips*-*-linux*.
* ld-elfvsb/elfvsb.exp: Don't test non-PIC shared libraried on
mips*-*-linux*.
(picflag): Set to -fpic for mips*-*-* when using GCC-4.3 or later.
* ld-elfweak/elfweak.exp (picflag): Set to -fpic for mips*-*-*
when using GCC-4.3 or later.
* ld-shared/shared.exp (picflag): Same.
* lib/ld-lib.exp (at_least_gcc_version): New proc.

ld/testsuite/ChangeLog
ld/testsuite/ld-elfvers/vers.exp
ld/testsuite/ld-elfvsb/elfvsb.exp
ld/testsuite/ld-elfweak/elfweak.exp
ld/testsuite/ld-shared/shared.exp
ld/testsuite/lib/ld-lib.exp

index 27f44c2b71e1427910e8be39819bc08a3f85beba..6dd2e3d1b4eff9c99d4d3478fe33c83393b21bae 100644 (file)
@@ -1,3 +1,17 @@
+2011-12-15  David Daney  <david.daney@cavium.com>
+           Nick Clifton <nickc@redhat.com>
+
+       * ld-elfvers/vers.exp (picflag): Set to -fpic for mips*-*-* when
+       using GCC-4.3 or later.
+       (pic): Set to "yes" for mips*-*-linux*.
+       * ld-elfvsb/elfvsb.exp: Don't test non-PIC shared libraried on
+       mips*-*-linux*.
+       (picflag): Set to -fpic for mips*-*-* when using GCC-4.3 or later.
+       * ld-elfweak/elfweak.exp (picflag): Set to -fpic for mips*-*-*
+       when using GCC-4.3 or later.
+       * ld-shared/shared.exp (picflag): Same.
+       * lib/ld-lib.exp (at_least_gcc_version): New proc.
+
 2011-12-10 David Daney <david.daney@cavium.com>
 
        * ld-mips-elf/pic-and-nonpic-6-n64.dd: Use correct encoding for
index d1c2228dc96d59491dd4c64fdd6008f0ca3c2aaf..b8fefb6eae58275b06de9bc4aec77737a8420c64 100644 (file)
@@ -72,7 +72,9 @@ set SOBJDUMP_FLAGS --syms
 set shared "--shared --no-undefined-version"
 set script --version-script
 
-if [istarget mips*-*-*] {
+# Old version of GCC for MIPS default to enabling -fpic
+# and get confused if it is used on the command line.
+if { [istarget mips*-*-*] && ! [at_least_gcc_version 4 3] } then {
     set picflag ""
 } else {
     # Unfortunately, the gcc argument is -fpic and the cc argument is
@@ -768,8 +770,9 @@ proc build_exec { test source execname flags solibname verexp versymexp symexp }
     pass $test
 }
 
-if [istarget x86_64-*-linux*] {
-    # x86_64 doesn't like non-pic shared libraries
+if { [istarget x86_64-*-linux*] \
+     || ( [istarget mips*-*-linux*] && [at_least_gcc_version 4 3] ) } {
+    # x86_64 and newer MIPS toolchains do not like non-pic shared libraries
     set pic "yes"
 } else {
     set pic "no"
index 3c6478398c81b83d3e8d89b01bc0279de962e59a..58bc8f2dca57c5b115d948e1a59b76d649712f62 100644 (file)
@@ -249,7 +249,8 @@ proc visibility_run {visibility} {
        set VSBCFLAG ""
     }}}}}}}}}
 
-    if { [istarget powerpc*-*-linux*] } {
+    if { [istarget powerpc*-*-linux*] \
+        || ( [istarget mips*-*-linux*] && [at_least_gcc_version 4 3] )} {
        # Testing non-PIC libraries is a waste of effort on any target.
        # If you don't pass -fpic or -fPIC to gcc, gcc will assume quite
        # reasonably that you are not compiling for a shared library.
@@ -453,7 +454,9 @@ proc visibility_run {visibility} {
     }}
 }
 
-if [istarget mips*-*-*] {
+# Old version of GCC for MIPS default to enabling -fpic
+# and get confused if it is used on the command line.
+if { [istarget mips*-*-*] && ! [at_least_gcc_version 4 3] } then {
     set picflag ""
 } else {
     # Unfortunately, the gcc argument is -fpic and the cc argument is
index 0cc1299351e6cbbae5277555d626e2154441391f..1b60b89943f3580f2010cb3438581f720ddc3f15 100644 (file)
@@ -370,7 +370,9 @@ proc build_exec { test execname objs flags dat dynsymexp symexp} {
     pass $test
 }
 
-if [istarget mips*-*-*] {
+# Old version of GCC for MIPS default to enabling -fpic
+# and get confused if it is used on the command line.
+if { [istarget mips*-*-*] && ! [at_least_gcc_version 4 3] } then {
     set picflag ""
 } else {
     # Unfortunately, the gcc argument is -fpic and the cc argument is
index 1d25d51c927a8fe0cc1b154b462688edbd447ccf..c31ac7da28cdc088f27b05d256e6699d27143c2f 100644 (file)
@@ -181,7 +181,9 @@ proc shared_test { progname testname main sh1 sh2 dat args } {
     pass "$testname"
 }
 
-if [istarget mips*-*-*] {
+# Old version of GCC for MIPS default to enabling -fpic
+# and get confused if it is used on the command line.
+if { [istarget mips*-*-*] && ! [at_least_gcc_version 4 3] } then {
     set picflag ""
 } else {
     # Unfortunately, the gcc argument is -fpic and the cc argument is
index 30098c1ae2099c777f2c107144bdc783a95e7b19..25999e9220bc6292879b5ad06032428ddbc351e5 100644 (file)
@@ -27,6 +27,31 @@ proc load_common_lib { name } {
 
 load_common_lib binutils-common.exp
 
+# Returns 1 if the gcc for the target is at least version MAJOR.MINOR
+# Returns 0 otherwise.
+#
+proc at_least_gcc_version { major minor } {
+    
+    if {![info exists CC]} {
+       set CC [find_gcc]
+    }
+    if { $CC == "" } {
+      return 0
+    }
+    set state [remote_exec host $CC --version]
+    set tmp "[lindex $state 1]\n"
+    # Look for (eg) 4.6.1 in the version output.
+    regexp " .* (\[1-9\])\\.(\[0-9\])\\.\[0-9\]* .*" "$tmp" fred maj min
+    verbose "gcc version: $tmp"
+    verbose "major gcc version is $maj, want at least $major"
+    if { $maj == $major } then {
+       verbose "minor gcc version is $min, want at least $minor"
+       return [expr  $min >= $minor ]
+    } else {
+       return [expr $maj > $major ]
+    }
+}
+
 # Extract and print the version number of ld.
 #
 proc default_ld_version { ld } {