Index: ld-elfvers/vers.exp =================================================================== RCS file: /cvs/src/src/ld/testsuite/ld-elfvers/vers.exp,v retrieving revision 1.53 diff -u -p -r1.53 vers.exp --- ld-elfvers/vers.exp 15 Mar 2011 23:34:30 -0000 1.53 +++ ld-elfvers/vers.exp 9 Dec 2011 23:01:05 -0000 @@ -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 f 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: ld-elfvsb/elfvsb.exp =================================================================== RCS file: /cvs/src/src/ld/testsuite/ld-elfvsb/elfvsb.exp,v retrieving revision 1.36 diff -u -p -r1.36 elfvsb.exp --- ld-elfvsb/elfvsb.exp 19 Jun 2011 21:22:13 -0000 1.36 +++ ld-elfvsb/elfvsb.exp 9 Dec 2011 23:01:05 -0000 @@ -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: ld-elfweak/elfweak.exp =================================================================== RCS file: /cvs/src/src/ld/testsuite/ld-elfweak/elfweak.exp,v retrieving revision 1.18 diff -u -p -r1.18 elfweak.exp --- ld-elfweak/elfweak.exp 21 Dec 2010 11:00:48 -0000 1.18 +++ ld-elfweak/elfweak.exp 9 Dec 2011 23:01:05 -0000 @@ -370,7 +370,9 @@ proc build_exec { test execname objs fla 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: ld-shared/shared.exp =================================================================== RCS file: /cvs/src/src/ld/testsuite/ld-shared/shared.exp,v retrieving revision 1.27 diff -u -p -r1.27 shared.exp --- ld-shared/shared.exp 19 Jun 2011 21:22:13 -0000 1.27 +++ ld-shared/shared.exp 9 Dec 2011 23:01:05 -0000 @@ -181,7 +181,9 @@ proc shared_test { progname testname mai 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: lib/ld-lib.exp =================================================================== RCS file: /cvs/src/src/ld/testsuite/lib/ld-lib.exp,v retrieving revision 1.88 diff -u -p -r1.88 ld-lib.exp --- lib/ld-lib.exp 29 Nov 2011 12:42:10 -0000 1.88 +++ lib/ld-lib.exp 9 Dec 2011 23:01:05 -0000 @@ -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 } {