* [Patch v2] ld testsuite: Fix some FAILs on MIPScaused by missing -fpic.
@ 2011-12-09 23:19 David Daney
2011-12-12 10:25 ` nick clifton
0 siblings, 1 reply; 3+ messages in thread
From: David Daney @ 2011-12-09 23:19 UTC (permalink / raw)
To: binutils, Nick Clifton, Richard Sandiford
[-- Attachment #1: Type: text/plain, Size: 1380 bytes --]
From the first version:
Since the beginning of time (or at least CVS), there has been
special code in the ld testsuite to omit -fpic from the flags used
for building shared libraries on MIPS. This worked for very old
versions of GCC where the generated code was always PIC by default.
Since GCC-4.3, -fpic has been mandatory for creation of shared
objects, and the testsuite's lack of this flag has caused many test
cases to fail.
I originally was removing special handling for mips*, but Nick
preferred checking for the GCC version instead, and supplied a modified
patch to do that. Nick's patch was failing with TCL syntax errors on
my Debian system with tcl 8.4, so I made a couple of modifications.
The result fixes about 35 FAILs on mips64-linux-gnu with no regressions.
OK to commit ?
2011-12-09 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.
[-- Attachment #2: mips-pic.patch --]
[-- Type: text/plain, Size: 4910 bytes --]
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 } {
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch v2] ld testsuite: Fix some FAILs on MIPScaused by missing -fpic.
2011-12-09 23:19 [Patch v2] ld testsuite: Fix some FAILs on MIPScaused by missing -fpic David Daney
@ 2011-12-12 10:25 ` nick clifton
2011-12-12 22:58 ` David Daney
0 siblings, 1 reply; 3+ messages in thread
From: nick clifton @ 2011-12-12 10:25 UTC (permalink / raw)
To: David Daney; +Cc: binutils, Richard Sandiford
Hi David,
> Nick's patch was failing with TCL syntax errors on
> my Debian system with tcl 8.4,
Out of interest, what were these failures ?
> so I made a couple of modifications.
>
> The result fixes about 35 FAILs on mips64-linux-gnu with no regressions.
>
> OK to commit ?
Yes - please do.
Cheers
Nick
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch v2] ld testsuite: Fix some FAILs on MIPScaused by missing -fpic.
2011-12-12 10:25 ` nick clifton
@ 2011-12-12 22:58 ` David Daney
0 siblings, 0 replies; 3+ messages in thread
From: David Daney @ 2011-12-12 22:58 UTC (permalink / raw)
To: nick clifton; +Cc: binutils
On 12/12/2011 02:24 AM, nick clifton wrote:
> Hi David,
>
>> Nick's patch was failing with TCL syntax errors on
>> my Debian system with tcl 8.4,
>
> Out of interest, what were these failures ?
>
.
.
.
Running /root/gccsvn/binutils-cvs/src/ld/testsuite/ld-elfvers/vers.exp ...
ERROR: tcl error sourcing
/root/gccsvn/binutils-cvs/src/ld/testsuite/ld-elfvers/vers.exp.
ERROR: bad option "6": must be -code, -errorcode, or -errorinfo
while executing
"return $min >= $minor"
(procedure "at_least_gcc_version" line 17)
invoked from within
"at_least_gcc_version 4 3"
(file
"/root/gccsvn/binutils-cvs/src/ld/testsuite/ld-elfvers/vers.exp" line 1)
("uplevel" body line 1)
invoked from within
"catch "uplevel #0 source $test_file_name""
.
.
.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-12-12 22:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-09 23:19 [Patch v2] ld testsuite: Fix some FAILs on MIPScaused by missing -fpic David Daney
2011-12-12 10:25 ` nick clifton
2011-12-12 22:58 ` David Daney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).