MIPS/binutils/testsuite: Correct mips.exp test ABI/emul/endian arrangement

The binutils testsuite supports involving LD in processing test cases
and with the MIPS target that has the same issues the LD testsuite does.

So to support LD in the MIPS part of the binutils testsuite similarly
to commit 86b24e15c45b ("MIPS/LD/testsuite: Correct comm-data.exp test
ABI/emul/endian arrangement") update the mips.exp test script to:

- correctly select emulations for targets using non-traditional MIPS
  emulations,

- correctly select ABIs for targets that do not support all of them,

- use the default endianness selection where possible to benefit targets
  that support only one,

- simplify test invocation by providing ABI-specific `run_dump_test'
  wrappers, specifically `run_dump_test_o32', `run_dump_test_n32' and
  `run_dump_test_n64', which remove the need to use conditionals across
  the Expect script or to repeat ABI-specific GAS and LD flags with each
  invocation,

borrowing changes from commit 78da84f99405 ("MIPS/LD/testsuite: Correct
mips-elf.exp test ABI/emul/endian arrangement").

As a side effect this disables o32 ABI testing for targets that are not
supposed to support them and do not with LD, but still have such support
with BFD and GAS due to our inflexibility in configuration.  Ultimately
we ought to support having o32 completely disabled.

	binutils/
	* testsuite/binutils-all/mips/mips.exp (run_dump_test_abi)
	(run_dump_test_o32, run_dump_test_n32, run_dump_test_n64): New
	procedures.
	(has_newabi): Remove variable.
	(has_abi, abi_asflags, abi_ldflags): New associative array
	variables.
	(irixemul): New variable.
	Replace `run_dump_test' calls where applicable throughout with
	`run_dump_test_o32', `run_dump_test_n32' and `run_dump_test_n64'
	as appropriate.  Use `noarch' for tests that require their own
	architecture setting.
	* testsuite/binutils-all/mips/mips-ase-1.d: Remove GAS flags.
	* testsuite/binutils-all/mips/mips-ase-2.d: Likewise.
	* testsuite/binutils-all/mips/mips-ase-3.d: Likewise.
	* testsuite/binutils-all/mips/mips-note-2-n32.d: Likewise.
	* testsuite/binutils-all/mips/mips-note-2-n64.d: Likewise.
	* testsuite/binutils-all/mips/mips-note-2.d: Likewise.
	* testsuite/binutils-all/mips/mips-note-2r-n32.d: Likewise.
	* testsuite/binutils-all/mips/mips-note-2r-n64.d: Likewise.
	* testsuite/binutils-all/mips/mips-note-2r.d: Likewise.
	* testsuite/binutils-all/mips/mips-reginfo-n32.d: Likewise.
	* testsuite/binutils-all/mips/mips-reginfo.d: Likewise.
	* testsuite/binutils-all/mips/mips16-extend-noinsn.d: Likewise.
	* testsuite/binutils-all/mips/mips16-pcrel.d: Likewise.
	* testsuite/binutils-all/mips/mips16-alias.d: Remove `-32' from
	GAS flags.
	* testsuite/binutils-all/mips/mips16-extend-insn.d: Likewise.
	* testsuite/binutils-all/mips/mips16-noalias.d: Likewise.
	* testsuite/binutils-all/mips/mips16-undecoded.d: Likewise.
	* testsuite/binutils-all/mips/mips16e2-extend-insn.d: Likewise.
	* testsuite/binutils-all/mips/mips16e2-undecoded.d: Likewise.
	* testsuite/binutils-all/mips/mixed-micromips.d: Likewise.
	* testsuite/binutils-all/mips/mixed-mips16.d: Likewise.
This commit is contained in:
Maciej W. Rozycki 2020-07-26 14:43:21 +01:00
parent a237ab1af0
commit 3abf975826
23 changed files with 256 additions and 51 deletions

View File

@ -1,3 +1,39 @@
2020-07-26 Maciej W. Rozycki <macro@linux-mips.org>
* testsuite/binutils-all/mips/mips.exp (run_dump_test_abi)
(run_dump_test_o32, run_dump_test_n32, run_dump_test_n64): New
procedures.
(has_newabi): Remove variable.
(has_abi, abi_asflags, abi_ldflags): New associative array
variables.
(irixemul): New variable.
Replace `run_dump_test' calls where applicable throughout with
`run_dump_test_o32', `run_dump_test_n32' and `run_dump_test_n64'
as appropriate. Use `noarch' for tests that require their own
architecture setting.
* testsuite/binutils-all/mips/mips-ase-1.d: Remove GAS flags.
* testsuite/binutils-all/mips/mips-ase-2.d: Likewise.
* testsuite/binutils-all/mips/mips-ase-3.d: Likewise.
* testsuite/binutils-all/mips/mips-note-2-n32.d: Likewise.
* testsuite/binutils-all/mips/mips-note-2-n64.d: Likewise.
* testsuite/binutils-all/mips/mips-note-2.d: Likewise.
* testsuite/binutils-all/mips/mips-note-2r-n32.d: Likewise.
* testsuite/binutils-all/mips/mips-note-2r-n64.d: Likewise.
* testsuite/binutils-all/mips/mips-note-2r.d: Likewise.
* testsuite/binutils-all/mips/mips-reginfo-n32.d: Likewise.
* testsuite/binutils-all/mips/mips-reginfo.d: Likewise.
* testsuite/binutils-all/mips/mips16-extend-noinsn.d: Likewise.
* testsuite/binutils-all/mips/mips16-pcrel.d: Likewise.
* testsuite/binutils-all/mips/mips16-alias.d: Remove `-32' from
GAS flags.
* testsuite/binutils-all/mips/mips16-extend-insn.d: Likewise.
* testsuite/binutils-all/mips/mips16-noalias.d: Likewise.
* testsuite/binutils-all/mips/mips16-undecoded.d: Likewise.
* testsuite/binutils-all/mips/mips16e2-extend-insn.d: Likewise.
* testsuite/binutils-all/mips/mips16e2-undecoded.d: Likewise.
* testsuite/binutils-all/mips/mixed-micromips.d: Likewise.
* testsuite/binutils-all/mips/mixed-mips16.d: Likewise.
2020-07-24 Aaron Merey <amerey@redhat.com>
* Makefile.am: Replace LIBDEBUGINFOD with DEBUGINFOD_LIBS.

View File

@ -1,7 +1,6 @@
#PROG: objcopy
#objdump: -dp --prefix-addresses --show-raw-insn
#name: MIPS ELF file ASE information interpretation for disassembly 1
#as: -32
# Verify that in the absence of its ASE flag MDMX code is not disassembled
# with MIPS64r2, where MDMX presence is not implied.

View File

@ -1,7 +1,6 @@
#PROG: objcopy
#objdump: -dp --prefix-addresses --show-raw-insn
#name: MIPS ELF file ASE information interpretation for disassembly 2
#as: -32
# Verify that in the presence of its ASE flag MDMX code is disassembled
# with MIPS64r2, where MDMX presence is not implied.

View File

@ -1,7 +1,6 @@
#PROG: objcopy
#objdump: -dp --prefix-addresses --show-raw-insn
#name: MIPS ELF file ASE information interpretation for disassembly 3
#as: -32
#objcopy: -R .MIPS.abiflags
#source: mips-ase-2.s

View File

@ -2,6 +2,5 @@
#readelf: --notes --wide
#objcopy: --merge-notes
#name: MIPS merge notes section (n32)
#as: -n32 -mips3
#source: ../note-2-32.s
#dump: ../note-2-32.d

View File

@ -2,6 +2,5 @@
#readelf: --notes --wide
#objcopy: --merge-notes
#name: MIPS merge notes section (n64)
#as: -64 -mips3
#source: ../note-2-64.s
#dump: ../note-2-64.d

View File

@ -2,6 +2,5 @@
#readelf: --notes --wide
#objcopy: --merge-notes
#name: MIPS merge notes section (o32)
#as: -32
#source: ../note-2-32.s
#dump: ../note-2-32.d

View File

@ -2,7 +2,6 @@
#readelf: --relocs
#objcopy: --merge-notes
#name: MIPS merge notes section relocations (n32)
#as: -n32 -mips3
#source: ../note-2-32.s
There are no relocations in this file.

View File

@ -2,7 +2,6 @@
#readelf: --relocs
#objcopy: --merge-notes
#name: MIPS merge notes section relocations (n64)
#as: -64 -mips3
#source: ../note-2-64.s
There are no relocations in this file.

View File

@ -2,7 +2,6 @@
#readelf: --relocs
#objcopy: --merge-notes
#name: MIPS merge notes section relocations (o32)
#as: -32
#source: ../note-2-32.s
There are no relocations in this file.

View File

@ -1,6 +1,5 @@
#PROG: objcopy
#name: MIPS objcopy .reginfo section size (n32)
#as: -n32 -mips3
#objcopy: --rename-section .foo=.reginfo
#source: mips-reginfo.s
#error: \A[^\n]*: incorrect `\.reginfo' section size; expected 24, got 4\n

View File

@ -1,6 +1,5 @@
#PROG: objcopy
#name: MIPS objcopy .reginfo section size
#as: -32
#objcopy: --rename-section .foo=.reginfo
#error: \A[^\n]*: incorrect `\.reginfo' section size; expected 24, got 4\n
#error: [^\n]*: bad value\Z

View File

@ -27,41 +27,223 @@ if [is_remote host] {
set copyfile tmpdir/copy
}
set has_newabi [expr [istarget *-*-irix6*] \
|| [istarget mips*-*-linux*] \
|| [istarget mips*-sde-elf*] \
|| [istarget mips*-mti-elf*] \
|| [istarget mips*-img-elf*]]
# run_dump_test_abi ABI NAME ARGS
#
# Invoke "run_dump_test" for test NAME using ABI if supported by the
# target used, passing predefined ABI-specific arguments. ARGS are
# as with "run_dump_test" and are appended to ABI-specific arguments,
# except for the special "noarch" keyword, which, if present, must
# appear first and is consumed causing any "-march=" option to be
# removed from ABI-specific GAS arguments, and likewise the special
# "useld" keyword, which, if present, must be next and is consumed
# causing LD arguments to be passed.
proc run_dump_test_abi { abi name args } {
global abi_asflags
global abi_ldflags
global has_abi
run_dump_test "mips-ase-1"
run_dump_test "mips-ase-2"
run_dump_test "mips-ase-3"
set args [lindex $args 0]
set asflags $abi_asflags($abi)
if { [lindex $args 0] == "noarch" } {
set asflags [regsub -- {-march=[^[:blank:]]*} $asflags {}]
set args [lreplace $args 0 0]
}
if { [lindex $args 0] == "useld" } {
set ldflags $abi_ldflags($abi)
set args [lreplace $args 0 0]
}
if !$has_abi($abi) {
lappend args {notarget *-*-*}
}
set testargs [list [list as $asflags]]
if { [info exists ldflags] } {
lappend testargs [list ld $ldflags]
}
if { [llength $args] > 0 } {
set testargs [concat $testargs $args]
}
run_dump_test $name $testargs
}
# run_dump_test_o32 NAME ARGS
#
# Invoke "run_dump_test_abi" for test NAME using the o32 ABI and
# passing ARGS.
proc run_dump_test_o32 { name args } {
run_dump_test_abi o32 $name [lindex $args 0]
}
# run_dump_test_n32 NAME ARGS
#
# Invoke "run_dump_test_abi" for test NAME using the n32 ABI and
# passing ARGS.
proc run_dump_test_n32 { name args } {
run_dump_test_abi n32 $name [lindex $args 0]
}
# run_dump_test_n64 NAME ARGS
#
# Invoke "run_dump_test_abi" for test NAME using the n64 ABI and
# passing ARGS.
proc run_dump_test_n64 { name args } {
run_dump_test_abi n64 $name [lindex $args 0]
}
set has_abi(o32) [expr ![istarget *-*-openbsd*] \
&& ![istarget mips64*el-ps2-elf*]]
set has_abi(n32) [expr [istarget *-img-elf*] \
|| [istarget *-mti-elf*] \
|| [istarget mips64*el-ps2-elf*] \
|| [istarget *-sde-elf*] \
|| [istarget *-*-freebsd*] \
|| [istarget *-*-irix6*] \
|| [istarget *-*-kfreebsd*-gnu] \
|| [istarget *-*-linux*]]
set has_abi(n64) [expr [istarget *-*-freebsd*] \
|| [istarget *-*-irix6*] \
|| [istarget *-*-kfreebsd*-gnu] \
|| [istarget *-*-linux*] \
|| [istarget *-*-netbsd*] \
|| [istarget *-*-openbsd*]]
# Set defaults.
set abi_asflags(o32) ""
set abi_asflags(n32) ""
set abi_asflags(n64) ""
set abi_asflags(eabi) ""
set abi_ldflags(o32) ""
set abi_ldflags(n32) ""
set abi_ldflags(n64) ""
set abi_ldflags(eabi) ""
# Override as needed.
if {[istarget *-*-openbsd*] } {
set irixemul 0
} elseif { [istarget mips64*-*-linux*] } {
if [istarget *el-*-*] {
set abi_asflags(o32) -32
set abi_ldflags(o32) -melf32ltsmip
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64ltsmip
} else {
set abi_asflags(o32) -32
set abi_ldflags(o32) -melf32btsmip
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64btsmip
}
set irixemul 0
} elseif {[istarget *-*-linux*] } {
if [istarget *el-*-*] {
set abi_asflags(n32) "-march=from-abi -n32"
set abi_ldflags(n32) -melf32ltsmipn32
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64ltsmip
} else {
set abi_asflags(n32) "-march=from-abi -n32"
set abi_ldflags(n32) -melf32btsmipn32
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64btsmip
}
set irixemul 0
} elseif {[istarget *-img-elf*] \
|| [istarget *-mti-elf*] \
|| [istarget *-sde-elf*] \
|| [istarget *-*-netbsd*] \
|| [istarget *-*-linux*] \
|| [istarget *-*-sysv4*] } {
if [istarget *el-*-*] {
set abi_asflags(o32) -32
set abi_asflags(n32) "-march=from-abi -n32"
set abi_ldflags(n32) -melf32ltsmipn32
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64ltsmip
} else {
set abi_asflags(o32) -32
set abi_asflags(n32) "-march=from-abi -n32"
set abi_ldflags(n32) -melf32btsmipn32
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64btsmip
}
set irixemul 0
} elseif { [istarget mips64*-*-freebsd*] \
|| [istarget mips64*-*-kfreebsd*-gnu] } {
if [istarget *el-*-*] {
set abi_asflags(o32) -32
set abi_ldflags(o32) -melf32ltsmip_fbsd
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64ltsmip_fbsd
} else {
set abi_asflags(o32) -32
set abi_ldflags(o32) -melf32btsmip_fbsd
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64btsmip_fbsd
}
set irixemul 0
} elseif { [istarget *-*-freebsd*] \
|| [istarget *-*-kfreebsd*-gnu] } {
if [istarget *el-*-*] {
set abi_asflags(n32) "-march=from-abi -n32"
set abi_ldflags(n32) -melf32ltsmipn32_fbsd
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64ltsmip_fbsd
} else {
set abi_asflags(n32) "-march=from-abi -n32"
set abi_ldflags(n32) -melf32btsmipn32_fbsd
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(n64) -melf64btsmip_fbsd
}
set irixemul 0
} elseif { [istarget *vr4100*-*-elf*] \
|| [istarget *vr4300*-*-elf*] \
|| [istarget *vr5000*-*-elf*] } {
set abi_asflags(o32) -32
set irixemul 1
} elseif { [istarget mips64*el-ps2-elf*] } {
set abi_asflags(o32) -32
set abi_ldflags(o32) -melf32lr5900
set irixemul 1
} elseif { [istarget *-*-elf*] \
|| [istarget *-*-rtems*] } {
set abi_asflags(o32) -32
set irixemul 1
} elseif { [istarget *-*-irix6*] } {
set abi_asflags(o32) -32
set abi_asflags(n64) "-march=from-abi -64"
set abi_ldflags(o32) -melf32bsmip
set abi_ldflags(n64) -melf64bmip
set irixemul 1
} else {
set abi_asflags(o32) -32
set irixemul 1
}
run_dump_test_o32 "mips-ase-1"
run_dump_test_o32 "mips-ase-2"
run_dump_test_o32 "mips-ase-3"
run_dump_test "mips-xpa-virt-1"
run_dump_test "mips-xpa-virt-2"
run_dump_test "mips-xpa-virt-3"
run_dump_test "mips-xpa-virt-4"
run_dump_test "mixed-mips16"
run_dump_test "mixed-micromips"
run_dump_test_o32 "mixed-mips16" noarch
run_dump_test_o32 "mixed-micromips" noarch
run_dump_test "mixed-mips16-micromips"
run_dump_test "mips16-undecoded"
run_dump_test "mips16e2-undecoded"
run_dump_test "mips16-pcrel"
run_dump_test "mips16-extend-noinsn"
run_dump_test "mips16-extend-insn"
run_dump_test "mips16e2-extend-insn"
run_dump_test "mips16-alias"
run_dump_test "mips16-noalias"
run_dump_test_o32 "mips16-undecoded" noarch
run_dump_test_o32 "mips16e2-undecoded" noarch
run_dump_test_o32 "mips16-pcrel"
run_dump_test_o32 "mips16-extend-noinsn"
run_dump_test_o32 "mips16-extend-insn" noarch
run_dump_test_o32 "mips16e2-extend-insn" noarch
run_dump_test_o32 "mips16-alias" noarch
run_dump_test_o32 "mips16-noalias" noarch
run_dump_test "mips-note-2"
run_dump_test "mips-note-2r"
if $has_newabi {
run_dump_test "mips-note-2-n32"
run_dump_test "mips-note-2-n64"
run_dump_test "mips-note-2r-n32"
run_dump_test "mips-note-2r-n64"
}
run_dump_test_o32 "mips-note-2"
run_dump_test_n32 "mips-note-2-n32"
run_dump_test_n64 "mips-note-2-n64"
run_dump_test_o32 "mips-note-2r"
run_dump_test_n32 "mips-note-2r-n32"
run_dump_test_n64 "mips-note-2r-n64"
run_dump_test "mips-reginfo"
if $has_newabi {
run_dump_test "mips-reginfo-n32"
}
run_dump_test_o32 "mips-reginfo"
run_dump_test_n32 "mips-reginfo-n32"

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -d --prefix-addresses --show-raw-insn
#name: MIPS16 instruction alias disassembly
#as: -32 -mips3
#as: -mips3
.*: +file format .*mips.*

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -d --prefix-addresses --show-raw-insn
#name: MIPS16 extensible and non-extensible instruction disassembly
#as: -32 -mips64
#as: -mips64
# Verify interpreted and separate respectively EXTEND prefix disassembly
# for extensible and non-extensible instructions.

View File

@ -1,7 +1,6 @@
#PROG: objcopy
#objdump: -d --prefix-addresses --show-raw-insn
#name: MIPS16 unsupported EXTEND and undefined opcode disassembly
#as: -32
# Verify raw hexadecimal EXTEND and inexistent opcode disassembly.

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -M no-aliases -d --prefix-addresses --show-raw-insn
#name: MIPS16 canonical alias disassembly
#as: -32 -mips3
#as: -mips3
#source: mips16-alias.s
.*: +file format .*mips.*

View File

@ -1,7 +1,6 @@
#PROG: objcopy
#objdump: -d --prefix-addresses --show-raw-insn
#name: MIPS16 PC-relative instruction disassembly
#as: -32
# Verify delay-slot adjustment for PC-relative operations.

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16 undecoded extended instruction field disassembly
#as: -32 -mips3
#as: -mips3
.*: +file format .*mips.*

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -d --prefix-addresses --show-raw-insn
#name: MIPS16e2 extensible and non-extensible instruction disassembly
#as: -32 -mips64r2 -mmips16e2
#as: -mips64r2 -mmips16e2
#source: mips16-extend-insn.s
# Verify interpreted and separate respectively EXTEND prefix disassembly

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -dr --prefix-addresses --show-raw-insn
#name: MIPS16e2 undecoded extended instruction field disassembly
#as: -32 -mips64r2 -mmips16e2
#as: -mips64r2 -mmips16e2
#source: mips16-undecoded.s
.*: +file format .*mips.*

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -dr --prefix-addresses --show-raw-insn
#name: Mixed MIPS and microMIPS disassembly
#as: -32 -mips2
#as: -mips2
# Test mixed-mode disassembly in overlapping sections.

View File

@ -1,7 +1,7 @@
#PROG: objcopy
#objdump: -dr --prefix-addresses --show-raw-insn
#name: Mixed MIPS and MIPS16 disassembly
#as: -32 -mips2
#as: -mips2
# Test mixed-mode disassembly in overlapping sections.