[committed] MIPS/LD/testsuite: Correct comm-data.exp test ABI/emul/endian arrangement

Message ID alpine.DEB.2.00.1801262323340.4074@tp.orcam.me.uk
State New
Headers show
Series
  • [committed] MIPS/LD/testsuite: Correct comm-data.exp test ABI/emul/endian arrangement
Related show

Commit Message

Maciej W. Rozycki Jan. 29, 2018, 8:20 p.m.
Update the ld-mips-elf/comm-data.exp test script to correctly select 
emulations for targets using non-traditional MIPS emulation and also 
correctly select ABIs for targets that do not support all of them, and 
finally use the default endianness selection to benefit targets which 
support only one, complementing commit 05a5feafdd38 ("Rewrite 
check_shared_lib_support") and removing numerous test failures such as:

FAIL: MIPS o32/copyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS o32/copyreloc common symbol override test
FAIL: MIPS o32/nocopyreloc common symbol override test (auxiliary shared objectbuild)
FAIL: MIPS o32/nocopyreloc common symbol override test
FAIL: MIPS n32/copyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS n32/copyreloc common symbol override test
FAIL: MIPS n32/nocopyreloc common symbol override test (auxiliary shared objectbuild)
FAIL: MIPS n32/nocopyreloc common symbol override test

due to:

.../ld/ld-new: unrecognised emulation mode: elf32btsmip
Supported emulations: elf64btsmip elf64ltsmip

or:

.../ld/ld-new: unrecognised emulation mode: elf32btsmip
Supported emulations: elf32ebmip

or:

.../ld/ld-new: unrecognised emulation mode: elf32btsmip
Supported emulations: elf32l4300

etc., and:

ERROR: -n32 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n32/copyreloc common symbol override test (auxiliary shared object build)
ERROR: -n32 -march=mips3 -EB -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s: assembly failed
UNRESOLVED: MIPS n32/copyreloc common symbol override test
ERROR: -n32 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n32/nocopyreloc common symbol override test (auxiliary shared object build)
ERROR: -n32 -march=mips3 -EB -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s: assembly failed
UNRESOLVED: MIPS n32/nocopyreloc common symbol override test

due to:

Assembler messages:
Fatal error: selected target format 'elf32-nbigmips' unknown

and:

ERROR: -64 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n64/copyreloc common symbol override test (auxiliary shared object build)
ERROR: -64 -march=mips3 -EB --defsym ELF64=1 -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s:assembly failed
UNRESOLVED: MIPS n64/copyreloc common symbol override test
ERROR: -64 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n64/nocopyreloc common symbol override test (auxiliary shared object build)
ERROR: -64 -march=mips3 -EB --defsym ELF64=1 -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s:assembly failed
UNRESOLVED: MIPS n64/nocopyreloc common symbol override test

due to:

Assembler messages:
Fatal error: no compiled in support for 64 bit object file format

	ld/
	* testsuite/ld-mips-elf/comm-data.exp: Correct support for 
	targets using non-traditional MIPS emulation or having a limited 
	selection of ABIs available.  Don't force big endianness, use 
	defaults.
---
Hi,

 A number of failures remain across various MIPS targets, but they are due
do binary format peculiarities, to be addressed separately:

extra regexps in .../ld/testsuite/ld-elf/comm-data1.sd starting with "^ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo$"
EOF from dump.out
FAIL: MIPS o32/copyreloc common symbol override test (auxiliary shared object build)

extra regexps in .../ld/testsuite/ld-elf/comm-data1.sd starting with "^ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo$"
EOF from dump.out
FAIL: MIPS o32/nocopyreloc common symbol override test (auxiliary shared object build)

due to:

     7: 5ffe02e8     0 OBJECT  GLOBAL DEFAULT PRC[0xff02] foo

file contents vs:

 +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo

pattern expected, or due to a handling peculiarity with the IRIX format 
variation where a debug reference to a common symbol converted to an 
undefined reference is initialised to the link-time value of the dynamic
symbol satisfying the reference:

regexp_diff match failure
regexp "^ +0x0*76540000 00000000 00000000 00000000 00000000 .*$"
line   "  0x76540000 5ffe02e8 00000000 00000000 00000000 _..............."
FAIL: MIPS o32/copyreloc common symbol override test

regexp_diff match failure
regexp "^ +0x0*76540000 00000000 00000000 00000000 00000000 .*$"
line   "  0x76540000 5ffe02e8 00000000 00000000 00000000 _..............."
FAIL: MIPS o32/nocopyreloc common symbol override test

The latter is probably a BFD bug, which will have to be addressed 
sometime.

 Also a similar arrangement will have to be made for main mips-elf.exp 
tests, but that's for another day.  Committed.

  Maciej

---
 ld/testsuite/ld-mips-elf/comm-data.exp |   86 +++++++++++++++++++++++++++++++--
 1 file changed, 83 insertions(+), 3 deletions(-)

binutils-mips-ld-test-comm-data-abi.diff

Patch

Index: binutils/ld/testsuite/ld-mips-elf/comm-data.exp
===================================================================
--- binutils.orig/ld/testsuite/ld-mips-elf/comm-data.exp	2018-01-25 15:14:42.315971547 +0000
+++ binutils/ld/testsuite/ld-mips-elf/comm-data.exp	2018-01-26 01:23:22.140531384 +0000
@@ -31,13 +31,84 @@  if { ![istarget mips*-*-*]
     return
 }
 
+set has_o32abi [expr ![istarget *-*-openbsd*] \
+		     && ![istarget mips64*-ps2-elf*]]
+set has_n32abi [expr [istarget *-img-elf*] \
+		     || [istarget *-mti-elf*] \
+		     || [istarget *-ps2-elf*] \
+		     || [istarget *-sde-elf*] \
+		     || [istarget *-*-freebsd*] \
+		     || [istarget *-*-irix6*] \
+		     || [istarget *-*-linux*]]
+set has_n64abi [expr [istarget *-*-freebsd*] \
+		     || [istarget *-*-irix6*] \
+		     || [istarget *-*-linux*] \
+		     || [istarget *-*-netbsd*] \
+		     || [istarget *-*-openbsd*]]
+
+if {[istarget *-img-elf*] \
+     || [istarget *-mti-elf*] \
+     || [istarget *-sde-elf*] \
+     || [istarget *-*-netbsd*] \
+     || [istarget *-*-linux*] \
+     || [istarget *-*-openbsd*] \
+     || [istarget *-*-sysv4*] } {
+    if [istarget *el-*-*] {
+	set abi_ldemul(o32) elf32ltsmip
+	set abi_ldemul(n32) elf32ltsmipn32
+	set abi_ldemul(n64) elf64ltsmip
+    } else {
+	set abi_ldemul(o32) elf32btsmip
+	set abi_ldemul(n32) elf32btsmipn32
+	set abi_ldemul(n64) elf64btsmip
+    }
+} elseif { [istarget *-*-freebsd*] } {
+    if [istarget *el-*-*] {
+	set abi_ldemul(o32) elf32ltsmip_fbsd
+	set abi_ldemul(n32) elf32ltsmipn32_fbsd
+	set abi_ldemul(n64) elf64ltsmip_fbsd
+    } else {
+	set abi_ldemul(o32) elf32btsmip_fbsd
+	set abi_ldemul(n32) elf32btsmipn32_fbsd
+	set abi_ldemul(n64) elf64btsmip_fbsd
+    }
+} elseif { [istarget *vr4100*-*-elf*] \
+	   || [istarget *vr4300*-*-elf*] \
+	   || [istarget *vr5000*-*-elf*] } {
+    if [istarget *el-*-*] {
+	set abi_ldemul(o32) elf32l4300
+    } else {
+	set abi_ldemul(o32) elf32b4300
+    }
+} elseif { [istarget *-ps2-elf*] } {
+    set abi_ldemul(o32) elf32lr5900
+    set abi_ldemul(n32) elf32lr5900n32
+} elseif { [istarget *-*-elf*] \
+	   || [istarget *-*-rtems*] } {
+    if [istarget *el-*-*] {
+	set abi_ldemul(o32) elf32elmip
+    } else {
+	set abi_ldemul(o32) elf32ebmip
+    }
+} else {
+    if [istarget *el-*-*] {
+	set abi_ldemul(o32) elf32lsmip
+	set abi_ldemul(n32) elf32lmipn32
+	set abi_ldemul(n64) elf64lmip
+    } else {
+	set abi_ldemul(o32) elf32bsmip
+	set abi_ldemul(n32) elf32bmipn32
+	set abi_ldemul(n64) elf64bmip
+    }
+}
+
 proc mips_comm_data_test { abi flag emul reloc } {
 
     set testname "MIPS $abi/$reloc common symbol override test"
 
     # There's no "-z copyreloc" option, deal with it.
     set ZFLAG [string map [list copyreloc "" nocopyreloc "-z $reloc"] $reloc]
-    set AFLAGS "$flag -EB"
+    set AFLAGS "$flag"
     set LDFLAGS "-m$emul"
 
     # Define a global symbol.
@@ -81,7 +152,16 @@  proc mips_comm_data_test { abi flag emul
 # For targets that default to a specific ISA (instead of "from-abi"),
 # the 64-bit -march option is required to override it, like for
 # "mipsisa32r2el-*-*".
-set abis { o32 -32 elf32btsmip n32 "-n32 -march=mips3" elf32btsmipn32 n64 "-64 -march=mips3" elf64btsmip }
+set abis ""
+if $has_o32abi {
+    lappend abis o32 -32 $abi_ldemul(o32)
+}
+if $has_n32abi {
+    lappend abis n32 "-n32 -march=mips3" $abi_ldemul(n32)
+}
+if $has_n64abi {
+    lappend abis n64 "-64 -march=mips3" $abi_ldemul(n64)
+}
 set relocs { copyreloc nocopyreloc }
 foreach { abi flag emul } $abis {
     foreach reloc $relocs {