public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [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).