# Expect script for MIPS ELF linker tests
#   Copyright (C) 2002-2014 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
#

if {[istarget "mips*-*-vxworks"]} {
    set mipsvxtests {
	{"VxWorks shared library test 1" "-shared -Tvxworks1.ld" ""
	 "-mips2" {vxworks1-lib.s}
	 {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
	  {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
	 "libvxworks1.so"}
	{"VxWorks executable test 1 (dynamic)" \
	 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic" ""
	 "-mips2" {vxworks1.s}
	 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
	 "vxworks1"}
	{"VxWorks executable test 2 (dynamic)" \
	 "-Tvxworks1.ld -q --force-dynamic" ""
	 "-mips2" {vxworks2.s}
	 {{readelf --segments vxworks2.sd}}
	 "vxworks2"}
	{"VxWorks executable test 2 (static)"
	 "-Tvxworks1.ld" ""
	 "-mips2" {vxworks2.s}
	 {{readelf --segments vxworks2-static.sd}}
	 "vxworks2"}
    }
    run_ld_link_tests $mipsvxtests
    run_dump_test "vxworks1-static"
    run_dump_test "vxworks-forced-local-1"
    return
}

if {![istarget mips*-*-*] || ![is_elf_format]} {
    return
}

set has_newabi [expr [istarget *-*-irix6*] \
		     || [istarget mips*-*-linux*] \
		     || [istarget mips*-sde-elf*] \
		     || [istarget mips*-mti-elf*] \
		     || [istarget mips*-img-elf*]]
set linux_gnu [expr [istarget mips*-*-linux*]]
set embedded_elf [expr [istarget mips*-*-elf]]

# Set defaults.
set abi_asflags(o32) "-32"
set abi_asflags(n32) "-march=from-abi -n32 -EB"
set abi_asflags(n64) "-march=from-abi -64 -EB"
set abi_ldflags(o32) ""
set abi_ldflags(n32) -melf32bmipn32
set abi_ldflags(n64) -melf64bmip

# Override as needed.
if { [istarget *-*-irix6*] } {
    set abi_asflags(o32) "-32 -EB"
    set abi_ldflags(o32) -melf32bsmip
} elseif { [istarget mips64*-linux*] } {
    set abi_asflags(o32) "-32 -EB"
    set abi_ldflags(o32) -melf32btsmip
} elseif { [istarget mips64*-*freebsd*] } {
    set abi_asflags(o32) "-32 -EB"
    set abi_ldflags(o32) -melf32btsmip_fbsd
}
if { [istarget mips*-*-linux*] || [istarget mips*-sde-elf*]
     || [istarget mips*-mti-elf*] || [istarget mips*-img-elf*]} {
    set abi_ldflags(n32) -melf32btsmipn32
    set abi_ldflags(n64) -melf64btsmip
} elseif { [istarget mips64*-*freebsd*] } {
    set abi_ldflags(n32) -melf32btsmipn32_fbsd
    set abi_ldflags(n64) -melf64btsmip_fbsd
}

if { $linux_gnu } {
    run_ld_link_tests [list \
	[list "Dummy shared library for MIPS16 PIC test 1" \
	      "-shared -melf32btsmip" "" \
	      "-EB -32 -mips1" \
	      { mips16-pic-1-dummy.s } \
	      {} \
	      "mips16-pic-1-dummy.so"] \
	[list "MIPS16 PIC test 1" \
	      "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \
	      "-EB -32 -mips1 -I $srcdir/$subdir" \
	      { mips16-pic-1a.s mips16-pic-1b.s } \
	      { { objdump { -dr -j.text } mips16-pic-1.dd }
		{ readelf -A mips16-pic-1.gd } } \
	      "mips16-pic-1"] \
	[list "MIPS16 PIC test 2" \
	      "-melf32btsmip -T mips16-pic-1.ld -shared" "" \
	      "-EB -32 -mips1 -I $srcdir/$subdir" \
	      { mips16-pic-2a.s mips16-pic-2b.s } \
	      { { objdump { -dr -j.text } mips16-pic-2.dd } \
		{ readelf -A mips16-pic-2.gd } \
	        { readelf --symbols mips16-pic-2.nd } \
		{ readelf --relocs mips16-pic-2.rd } \
		{ readelf -d mips16-pic-2.ad } } \
	     "mips16-pic-2"] \
	[list "MIPS16 PIC test 3" \
	      "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \
	      "-EB -32 -mips1 -I $srcdir/$subdir" \
	      { mips16-pic-3a.s mips16-pic-3b.s } \
	      { { objdump -dr mips16-pic-3.dd } \
		{ readelf --relocs mips16-pic-3.rd } \
		{ readelf -A mips16-pic-3.gd } } \
	      "mips16-pic-3"] \
	[list "MIPS16 PIC test 4 (shared library)" \
	      "-shared -melf32btsmip -T mips16-pic-1.ld --version-script mips16-pic-4.ver" "" \
	      "-EB -32 -mips1" \
	      { mips16-pic-4a.s mips16-pic-4b.s } \
	      { { objdump -dr mips16-pic-4a.dd } \
		{ readelf --symbols mips16-pic-4a.nd } \
		{ readelf -A mips16-pic-4a.gd } } \
	      "mips16-pic-4.so"] \
	[list "MIPS16 PIC test 4 (executable)" \
	      "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-4.so" "" \
	      "-EB -32 -mips1" \
	      { mips16-pic-4c.s } \
	      { { objdump -dr mips16-pic-4b.dd } } \
	      "mips16-pic-4"]]
}

# Check MIPS16 markings being passed through link.
run_dump_test "mips16-1"

# MIPS branch offset final link checking.
run_dump_test "branch-misc-1"

# Jalx test
run_dump_test "jalx-1"

if { $linux_gnu } {
    run_ld_link_tests [list \
	[list "Dummy shared library for JALX test 2" \
	      "-shared -nostdlib -melf32btsmip" "" \
	      "-G0 -EB -mmicromips -no-mdebug -mabi=32 -march=mips32r2 -KPIC" \
	      { jalx-2-printf.s } \
	      {} \
	      "libjalx-2.so"] \
	[list "Dummy external function for JALX test 2" \
	      "-r -melf32btsmip" "" \
	      "-G0 -EB -no-mdebug -mabi=32 -march=mips32r2 -mno-shared -call_nonpic" \
	      { jalx-2-ex.s } \
	      {} \
	      "jalx-2-ex.o.r"] \
	[list "MIPS JALX test 2" \
	      "-nostdlib -T jalx-2.ld tmpdir/libjalx-2.so tmpdir/jalx-2-ex.o.r -melf32btsmip" "" \
	      "-G0 -EB -mmicromips -no-mdebug -mabi=32 -march=mips32r2 -mno-shared -call_nonpic" \
	      { jalx-2-main.s } \
	      { { objdump -d jalx-2.dd } } \
	      "jalx-2"]]
}

# Test multi-got link.  We only do this on GNU/Linux because it requires
# the "traditional" emulations.
if { $linux_gnu } {
    run_dump_test "multi-got-1"
    run_dump_test "multi-got-no-shared"
    run_dump_test "multi-got-hidden-1"
    run_dump_test "multi-got-hidden-2"
}

# Test __gnu_local_gp accesses
if { $linux_gnu } {
    run_dump_test "no-shared-1-o32"
    if { $has_newabi } {
	run_dump_test "no-shared-1-n32"
	run_dump_test "no-shared-1-n64"
    }
}

if $has_newabi {
    if { $embedded_elf } {
	run_dump_test "elf-rel-got-n32-embed" \
					[list [list ld $abi_ldflags(n32)]]
	run_dump_test "elf-rel-xgot-n32-embed" \
					[list [list ld $abi_ldflags(n32)]]
    } else {
	run_dump_test "elf-rel-got-n32" [list [list ld $abi_ldflags(n32)]]
	run_dump_test "elf-rel-xgot-n32" [list [list ld $abi_ldflags(n32)]]
    }
    if { $linux_gnu } {
	run_dump_test "elf-rel-got-n64-linux" \
					[list [list ld $abi_ldflags(n64)]]
	run_dump_test "elf-rel-xgot-n64-linux" \
					[list [list ld $abi_ldflags(n64)]]
    } elseif { $embedded_elf } {
	run_dump_test "elf-rel-got-n64-embed" \
					[list [list ld $abi_ldflags(n64)]]
	run_dump_test "elf-rel-xgot-n64-embed" \
					[list [list ld $abi_ldflags(n64)]]
    } else {
	run_dump_test "elf-rel-got-n64" [list [list ld $abi_ldflags(n64)]]
	run_dump_test "elf-rel-xgot-n64" [list [list ld $abi_ldflags(n64)]]
    }

    run_dump_test "relax-jalr-n32"
    run_dump_test "relax-jalr-n32-shared"
    run_dump_test "relax-jalr-n64"
    run_dump_test "relax-jalr-n64-shared"
}

if { $linux_gnu } {
    run_dump_test "rel32-o32"
    if { $has_newabi } {
	run_dump_test "rel32-n32"
	run_dump_test "rel64"
    }
    # The first test checks that a mixed PIC/non-PIC relocatable link
    # will not introduce any stubs itself, but will flag PIC functions
    # for the final link.
    #
    # The second test checks that we insert stubs for calls from
    # non-PIC functions to PIC functions when linking the original
    # two objects together.
    #
    # The third test checks that we do the same when linking the
    # result of the first link (with no other source files).
    run_ld_link_tests {
	{"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip" ""
	 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
	 {{objdump -dr pic-and-nonpic-1-rel.dd}
	  {readelf --symbols pic-and-nonpic-1-rel.nd}}
	 "pic-and-nonpic-1-rel.o"}
	{"PIC and non-PIC test 1 (static 1)"
	 "-melf32btsmip -Tpic-and-nonpic-1.ld" ""
	 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
	 {{objdump -dr pic-and-nonpic-1.dd}
	  {readelf --symbols pic-and-nonpic-1.nd}}
	 "pic-and-nonpic-1-static1.o"}
	{"PIC and non-PIC test 1 (static 2)"
	 "-melf32btsmip -Tpic-and-nonpic-1.ld tmpdir/pic-and-nonpic-1-rel.o" ""
	 "" {}
	 {{objdump -dr pic-and-nonpic-1.dd}
	  {readelf --symbols pic-and-nonpic-1.nd}}
	 "pic-and-nonpic-1-static2.o"}
    }
    run_dump_test "pic-and-nonpic-2"
    run_ld_link_tests {
	{"PIC and non-PIC test 3 (shared library)"
	 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" ""
	 "-32 -EB -mips2" {pic-and-nonpic-3a.s}
	 {{readelf --segments pic-and-nonpic-3a.sd}
	  {readelf -A pic-and-nonpic-3a.gd}
	  {objdump -dr pic-and-nonpic-3a.dd}}
	 "pic-and-nonpic-3a.so"}
	{"PIC and non-PIC test 3 (executable)"
	 "-melf32btsmip -Tpic-and-nonpic-3b.ld tmpdir/pic-and-nonpic-3a.so" ""
	 "-32 -EB -mips2" {pic-and-nonpic-3b.s}
	 {{readelf --segments pic-and-nonpic-3b.sd}
	  {objdump -dr pic-and-nonpic-3b.dd}
	  {objdump {-s -j.got.plt} pic-and-nonpic-3b.pd}
	  {readelf -A pic-and-nonpic-3b.gd}
	  {readelf --relocs pic-and-nonpic-3b.rd}
	  {readelf --symbols pic-and-nonpic-3b.nd}
	  {readelf -d pic-and-nonpic-3b.ad}}
	 "pic-and-nonpic-3b"}
    }
    run_dump_test "pic-and-nonpic-3-error"
    run_ld_link_tests {
	{"PIC and non-PIC test 4 (shared library)"
	 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" ""
	 "-32 -EB -mips2" {pic-and-nonpic-4a.s}
	 {}
	 "pic-and-nonpic-4a.so"}
	{"PIC and non-PIC test 4 (executable)"
	 "-melf32btsmip -Tpic-and-nonpic-4b.ld tmpdir/pic-and-nonpic-4a.so" ""
	 "-32 -EB -mips2" {pic-and-nonpic-4b.s}
	 {{readelf --segments pic-and-nonpic-4b.sd}
	  {objdump -dr pic-and-nonpic-4b.dd}
	  {objdump {-s -j.got -j.data} pic-and-nonpic-4b.gd}
	  {readelf --relocs pic-and-nonpic-4b.rd}
	  {readelf --symbols pic-and-nonpic-4b.nd}
	  {readelf -d pic-and-nonpic-4b.ad}}
	 "pic-and-nonpic-4b"}
    }
    run_dump_test "pic-and-nonpic-4-error"
    run_ld_link_tests {
	{"PIC and non-PIC test 5 (executable)"
	 "-melf32btsmip -Tpic-and-nonpic-5b.ld tmpdir/pic-and-nonpic-3a.so tmpdir/pic-and-nonpic-4a.so" ""
	 "-32 -EB -mips2" {pic-and-nonpic-5a.s pic-and-nonpic-5b.s}
	 {{readelf --segments pic-and-nonpic-5b.sd}
	  {objdump -dr pic-and-nonpic-5b.dd}
	  {objdump {-s -j.got.plt -j.data} pic-and-nonpic-5b.pd}
	  {readelf -A pic-and-nonpic-5b.gd}
	  {readelf --relocs pic-and-nonpic-5b.rd}
	  {readelf --symbols pic-and-nonpic-5b.nd}
	  {readelf -d pic-and-nonpic-5b.ad}}
	 "pic-and-nonpic-5b"}
    }
    set abis { o32 -32 elf32btsmip }
    if $has_newabi {
	lappend abis n32 -n32 elf32btsmipn32
	lappend abis n64 -64 elf64btsmip
    }
    foreach { abi flag emul } $abis {
	run_ld_link_tests [list \
	    [list "PIC and non-PIC test 6 ($abi shared library)" \
		 "-m$emul -shared -Tpic-and-nonpic-3a.ld" "" \
		 "$flag -EB -mips3" \
		 [list "pic-and-nonpic-6-${abi}a.s"] {} \
		 "pic-and-nonpic-6-${abi}.so"] \
	    [list "PIC and non-PIC test 6 ($abi executable)" \
		 "-m$emul -Tpic-and-nonpic-6.ld tmpdir/pic-and-nonpic-6-${abi}.so" "" \
		 "$flag -EB -mips3" \
		 [list "pic-and-nonpic-6-${abi}b.s" \
		      "pic-and-nonpic-6-${abi}c.s"] \
		 [list "readelf {--wide --segments} pic-and-nonpic-6-${abi}.sd" \
		      "objdump -dr pic-and-nonpic-6-${abi}.dd" \
		      "objdump {-s -j.got.plt} pic-and-nonpic-6-${abi}.pd" \
		      "readelf -A pic-and-nonpic-6-${abi}.gd" \
		      "readelf --relocs pic-and-nonpic-6-${abi}.rd" \
		      "readelf --symbols pic-and-nonpic-6-${abi}.nd" \
		      "readelf -d pic-and-nonpic-6-${abi}.ad"] \
		 "pic-and-nonpic-6-${abi}"]]

	# This checks whether our linker scripts get the scope of _gp right,
	# and must therefore use default scripts.  If they don't, then -- in
	# addition to dumps failing to match -- the final link fails with:
	#
	#  ld: gp-hidden.o: undefined reference to symbol '_gp'
	#  ld: note: '_gp' is defined in DSO ./tmpdir/gp-hidden-lib-${abi}.so
	#  so try adding it to the linker command line
	#
	set suff64 [string map {o32 "" n32 "" n64 -64} $abi]
	run_ld_link_tests [list \
	    [list \
		"_gp scope test ($abi shared library)" \
		"$abi_ldflags($abi) -shared" "" \
		"$abi_asflags($abi) -KPIC" \
		{ gp-hidden-lib.s } \
		[list \
		    "readelf --relocs gp-hidden-lib${suff64}.rd" \
		    "readelf --syms gp-hidden.sd"] \
		"gp-hidden-lib-${abi}.so"] \
	    [list \
		"_gp scope test ($abi versioned library)" \
		"$abi_ldflags($abi) -shared -version-script gp-hidden-ver.ver tmpdir/gp-hidden-lib-${abi}.so" "" \
		"$abi_asflags($abi) -KPIC" \
		{ gp-hidden-ver.s } \
		[list \
		    "readelf --relocs gp-hidden-ver${suff64}.rd" \
		    "readelf --syms gp-hidden.sd"] \
		"gp-hidden-ver-${abi}.so"] \
	    [list \
		"_gp scope test ($abi executable)" \
		"$abi_ldflags($abi) -e 0 -rpath-link . tmpdir/gp-hidden-ver-${abi}.so" "" \
		"$abi_asflags($abi) -call_nonpic" \
		{ gp-hidden.s } \
		[list \
		    "readelf --relocs gp-hidden${suff64}.rd" \
		    "readelf --syms gp-hidden.sd"] \
		"gp-hidden-${abi}"]]
    }
}

if { $embedded_elf } {
    run_dump_test "region1"
}

if $embedded_elf {
    # This could work on other targets too, but would need the appropriate
    # ld -m switch.
    run_dump_test "reloc-1-rel"
}
if $has_newabi {
    run_dump_test "reloc-1-n32" [list [list ld $abi_ldflags(n32)]]
    run_dump_test "reloc-1-n64" [list [list ld $abi_ldflags(n64)]]
}
run_dump_test "reloc-2"
run_dump_test "reloc-merge-lo16"
run_dump_test "reloc-3"
if {$has_newabi} {
    run_dump_test "reloc-3-n32"
}
run_dump_test "reloc-4"
run_dump_test "reloc-5"
if { $has_newabi } {
    run_ld_link_tests [list \
	[list \
	    "reloc test 6a" \
	    "-shared $abi_ldflags(n32)" "" \
	    "$abi_asflags(n32)" \
	    "reloc-6a.s" \
	    {} \
	    "reloc-6a.so"] \
	[list \
	    "reloc test 6b" \
	    "$abi_ldflags(n32) tmpdir/reloc-6a.so" "" \
	    "$abi_asflags(n32)" \
	    "reloc-6b.s" \
	    {} \
	    "reloc-6b"]]
}

if {$has_newabi && $linux_gnu} {
    run_dump_test "eh-frame1-n32"
    run_dump_test "eh-frame1-n64"
    run_dump_test "eh-frame2-n32"
    run_dump_test "eh-frame2-n64"
}
if {$embedded_elf} {
    run_dump_test "eh-frame3"
    run_dump_test "eh-frame4"
}
if {$linux_gnu} {
    set eh_frame5_test {
	{"MIPS eh-frame 5"
	 "-melf32btsmip -shared -Teh-frame5.ld" ""
	 "-32 -EB"
	 {eh-frame5.s}
	 {{readelf {--relocs -wf} eh-frame5.d}}
	 "eh-frame5.so"}
    }
    run_ld_link_tests $eh_frame5_test
}

run_dump_test "jaloverflow"
run_dump_test "jaloverflow-2"
if {$has_newabi} {
    run_dump_test "jalbal" [list [list ld $abi_ldflags(n32)]]
}

run_dump_test "mode-change-error-1"

run_dump_test "mips16-hilo"
if {$has_newabi} {
    run_dump_test "mips16-hilo-n32"
}

if { $linux_gnu } {
    if { $has_newabi } {
	run_dump_test "textrel-1"
    }
    run_dump_test "got-page-1"
    if $has_newabi {
	run_dump_test "got-page-2"
	run_dump_test "dyn-sec64"
    }
    run_dump_test "got-page-3"
    run_ld_link_tests [subst {
	{"GOT page 4 (one file)" "-shared $abi_ldflags(o32) -T got-page-1.ld"
	 "" "$abi_asflags(o32) -mips2" {got-page-4b.s}
	 {{objdump -dr got-page-4a.d}
	  {readelf -A got-page-4a.got}}
	 "got-page-4a.so"}
	{"GOT page 4 (two files)" "-shared $abi_ldflags(o32) -T got-page-1.ld"
	 "" "$abi_asflags(o32) -mips2" {got-page-4a.s got-page-4b.s}
	 {{objdump -dr got-page-4b.d}
	  {readelf -A got-page-4b.got}}
	 "got-page-4b.so"}
    }]
    if $has_newabi {
        run_ld_link_tests [subst {
	    {"GOT page 5" "-shared $abi_ldflags(n32) -T got-page-1.ld"
	     "" "$abi_asflags(n32)" {got-page-5.s}
	     {{objdump -dr got-page-5.d}
	      {readelf -A got-page-5.got}}
	     "got-page-5.so"}
	    {"GOT page 6" "-shared $abi_ldflags(n32) -T got-page-1.ld"
	     "" "$abi_asflags(n32)" {got-page-6.s}
	     {{objdump -dr got-page-6.d}
	      {readelf -A got-page-6.got}}
	     "got-page-6.so"}
	    {"GOT page 7 (order 1)" "-shared $abi_ldflags(n32) -T got-page-1.ld"
	     "" "$abi_asflags(n32)"
	     {got-page-7a.s got-page-7b.s got-page-7c.s got-page-7d.s
	      got-page-7e.s}
	     {{objdump -dr got-page-7.d}
	      {readelf -A got-page-7.got}}
	     "got-page-7a.so"}
	    {"GOT page 7 (order 2)" "-shared $abi_ldflags(n32) -T got-page-1.ld"
	     "" "$abi_asflags(n32)"
	     {got-page-7e.s got-page-7a.s got-page-7b.s got-page-7c.s
	      got-page-7d.s}
	     {{objdump -dr got-page-7.d}
	      {readelf -A got-page-7.got}}
	     "got-page-7b.so"}
	}]
    }
    run_dump_test "got-dump-1"
    if $has_newabi {
	run_dump_test "got-dump-2"
    }
    run_dump_test "reloc-estimate-1"
}

if $has_newabi {
    run_dump_test "emit-relocs-1"
}

run_dump_test "hash1a"
run_dump_test "hash1b"
run_dump_test "hash1c"

if {[istarget mips*-*-linux*]} {
     # The number of symbols that are always included in the symbol table
     # for these tests.  The 4 are:
     #
     #     the null symbol entry
     #     the .MIPS.stubs section symbol
     set base_syms 2
     foreach dynsym { 7fff 8000 fff0 10000 2fe80 } {
	 run_ld_link_tests \
	     [list [list \
			"Stub for dynsym 0x$dynsym" \
			"-shared -melf32btsmip -T stub-dynsym-1.ld" "" \
			[concat \
			     "-EB -march=mips1 -32 -KPIC" \
			     "--defsym base_syms=$base_syms" \
			     "--defsym dynsym=0x$dynsym"] \
			[list "stub-dynsym-1.s"] \
			[list [list \
				   "objdump" "-dz" \
				   "stub-dynsym-1-$dynsym.d"]] \
			"stub-dynsym-1-$dynsym"]]
     }
 }

# For tests which may involve multiple files, use run_ld_link_tests.

# List contains test-items with 3 items followed by 2 lists:
# 0:name 1:ld early options 2:ld late options 3:assembler options
# 4:filenames of assembler files 5: action and options. 6: name of output file

# Actions:
# objdump: Apply objdump options on result.  Compare with regex (last arg).
# nm: Apply nm options on result.  Compare with regex (last arg).
# readelf: Apply readelf options on result.  Compare with regex (last arg).

set mips_tls_tests {
    {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld" ""
     "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s}
     {{objdump {-dr -m mips:isa32r2} tlsbin-o32.d} {objdump -srj.got tlsbin-o32.got}}
     "tls-static-o32"}
    {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld" ""
     "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
     {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32.got}}
     "tlslib-o32.so"}
    {"Dynamic executable with TLS"
     "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so" ""
     "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s}
     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32.d} {objdump -Rsj.got tlsdyn-o32.got}}
     "tls-dynamic-o32"}
    {"Shared library with multiple GOTs and TLS"
     "-shared -melf32btsmip -T mips-lib.ld" ""
     "-EB -march=mips1 -32 -KPIC" {tls-multi-got-1-1.s tls-multi-got-1-2.s}
     {{readelf {-d -r} tls-multi-got-1.r}
      {objdump {-dr -m mips:isa32r2} tls-multi-got-1.d}
      {objdump -Rsj.got tls-multi-got-1.got}}
     "tlslib-multi.so"}
    {"Shared library with TLS and versioning"
     "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver" ""
     "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
     {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-ver.got}}
     "tlslib-o32-ver.so"}
    {"Dynamic executable with TLS and versioning"
     "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so" ""
     "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s tlsdyn-o32-2.s}
     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-1.d} {objdump -Rsj.got tlsdyn-o32-1.got}}
     "tls-dynamic-o32-ver"}
    {"Dynamic executable with TLS and versioning (order 2)"
     "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o" ""
     "-EB -march=mips1 -32 -KPIC" {}
     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-2.d} {objdump -Rsj.got tlsdyn-o32-2.got}}
     "tls-dynamic-o32-ver-2"}
    {"Dynamic executable with TLS and versioning (order 3)"
     "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o" ""
     "-EB -march=mips1 -32 -KPIC" {}
     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-3.d} {objdump -Rsj.got tlsdyn-o32-3.got}}
     "tls-dynamic-o32-ver-3"}
    {"Shared library with TLS and hidden symbols"
     "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver" ""
     "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
     {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-hidden.got}}
     "tlslib-o32-hidden.so"}
    {"Shared library with TLS and hidden symbols (2)"
     "-shared -melf32btsmip -T mips-lib.ld" ""
     "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s}
     {{objdump -drj.text tls-hidden2.d} {objdump -sj.got tls-hidden2-got.d}}
     "tls-hidden2.so"}
    {"Shared library with TLS and hidden symbols (3)"
     "-shared -melf32btsmip -T tls-hidden3.ld" ""
     "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s}
     {{objdump -dj.text tls-hidden3.d} {objdump -sj.got tls-hidden3.got}
      {readelf --relocs tls-hidden3.r}}
     "tls-hidden3.so"}
    {"Shared library with TLS and hidden symbols (4)"
     "-shared -melf32btsmip -T tls-hidden3.ld" ""
     "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s}
     {{objdump -sj.got tls-hidden4.got} {readelf --relocs tls-hidden4.r}}
     "tls-hidden4.so"}
}

if {[istarget mips*-*-linux*]} {
    run_ld_link_tests $mips_tls_tests
}

set mips16_call_global_test [list \
    [list "Global calls from mips16" \
	 "$abi_ldflags(o32) -T no-shared-1.ld" "" \
	 "$abi_asflags(o32) -mips32r2" \
	 {mips16-call-global-1.s mips16-call-global-2.s mips16-call-global-3.s} \
	 {{objdump -dr mips16-call-global.d}} \
	 "mips16-call-global"]]

run_ld_link_tests $mips16_call_global_test

set mips16_intermix_test [list \
    [list "Intermixing mips32 and mips16 functions" \
	 "$abi_ldflags(o32)" "" \
	 "$abi_asflags(o32) -mips32r2" \
	 {mips16-intermix-1.s mips16-intermix-2.s} \
	 {{objdump -t mips16-intermix.d}} \
	 "mips16-intermix"]]

run_ld_link_tests $mips16_intermix_test

run_dump_test "mips16-local-stubs-1"

set o32flagslist [list [list as $abi_asflags(o32)] [list ld $abi_ldflags(o32)]]

foreach firstfpabi [list 0 1 2 3 4 5 6 7 ] {
  foreach secondfpabi [list 4 5 6 7 ] {
    run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" $o32flagslist
  }
}
foreach firstfpabi [list 4 5 6 7 ] {
  foreach secondfpabi [list 0 1 2 3 8] {
    run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" $o32flagslist
  }
}
foreach firstfpabi [list 0 1 2 3 ] {
  foreach secondfpabi [list 0 1 2 3 8] {
    run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}"
  }
}

run_dump_test "attr-gnu-4-81"

run_dump_test "attr-gnu-8-00"
run_dump_test "attr-gnu-8-01"
run_dump_test "attr-gnu-8-02"
run_dump_test "attr-gnu-8-10"
run_dump_test "attr-gnu-8-11"
run_dump_test "attr-gnu-8-12"
run_dump_test "attr-gnu-8-20"
run_dump_test "attr-gnu-8-21"
run_dump_test "attr-gnu-8-22"

run_dump_test "attr-gnu-4-0-ph" $o32flagslist
run_dump_test "attr-gnu-4-1-ph" $o32flagslist
run_dump_test "attr-gnu-4-2-ph" $o32flagslist
run_dump_test "attr-gnu-4-3-ph" $o32flagslist
run_dump_test "attr-gnu-4-4-ph" $o32flagslist
run_dump_test "attr-gnu-4-5-ph" $o32flagslist
run_dump_test "attr-gnu-4-6-ph" $o32flagslist
run_dump_test "attr-gnu-4-7-ph" $o32flagslist

if $has_newabi {
  run_dump_test "attr-gnu-4-0-n32-ph"
  run_dump_test "attr-gnu-4-1-n32-ph"
  run_dump_test "attr-gnu-4-2-n32-ph"
  run_dump_test "attr-gnu-4-3-n32-ph"
  run_dump_test "attr-gnu-4-0-n64-ph"
  run_dump_test "attr-gnu-4-1-n64-ph"
  run_dump_test "attr-gnu-4-2-n64-ph"
  run_dump_test "attr-gnu-4-3-n64-ph"
}

run_dump_test "abiflags-strip1-ph" $o32flagslist
run_dump_test "abiflags-strip2-ph" $o32flagslist
run_dump_test "abiflags-strip3-ph" $o32flagslist
run_dump_test "abiflags-strip4-ph" $o32flagslist
run_dump_test "abiflags-strip5-ph" $o32flagslist
run_dump_test "abiflags-strip6-ph" $o32flagslist
run_dump_test "abiflags-strip7-ph" $o32flagslist
run_dump_test "abiflags-strip8-ph" $o32flagslist
run_dump_test "abiflags-strip9-ph" $o32flagslist
run_dump_test "abiflags-strip10-ph" $o32flagslist

run_dump_test "nan-legacy"
run_dump_test "nan-2008"
run_dump_test "nan-mixed-1"
run_dump_test "nan-mixed-2"

if { $linux_gnu } {
    run_ld_link_tests {
	{"GOT and versioning 1"
	 "-shared -melf32btsmip --version-script got-vers-1.ver" ""
	 "-EB -mips2 -32" {got-vers-1a.s got-vers-1b.s}
	 {{readelf -d got-vers-1.dd}
	  {readelf --symbols got-vers-1.sd}
	  {readelf --relocs got-vers-1.rd}}
	 "got-vers-1.so"}
    }
}

run_dump_test "undefined"

# Test the conversion from jr to b
if { $linux_gnu } {
    run_dump_test "jr-to-b-1"
    run_dump_test "jr-to-b-2"
}

# MIPS16 and microMIPS interlinking test.
run_dump_test "mips16-and-micromips"

# Export class call relocation tests.
set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]]
foreach { abi } $abis {
    set loadaddr [string map \
	{o32 0x12340000 n32 0x12340000 n64 0x123456789abc0000} $abi]
    set suff [subst \
	[expr { [istarget *-*-irix*] \
		? [string map {o32 o32-irix n32 n32 n64 n64} $abi] \
		: $abi }]]
    run_ld_link_tests [list \
	[list \
	    "MIPS export class call relocation test ($abi)" \
	    "$abi_ldflags($abi) -shared -Ttext $loadaddr -T export-class-call16.ld" "" \
	    "$abi_asflags($abi) -mips3 -KPIC" \
	    [list export-class-call16-${abi}.s export-class-call16-def.s] \
	    [list \
		"objdump -d export-class-call16-${suff}.dd" \
		"readelf -A export-class-call16-${abi}.gd"] \
	    "export-class-call16-${abi}.so"]]
}

# Magic __ehdr_start symbol tests.
set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]]
foreach { abi } $abis {
    set suff [string map {o32 o32 n32 new n64 new} $abi]
    run_ld_link_tests [list \
        [list \
            "MIPS magic __ehdr_start symbol test 1 ($abi)" \
            "$abi_ldflags($abi) -T ehdr_start-1.ld" "" \
            "$abi_asflags($abi)" \
            [list ehdr_start-${suff}.s] \
            [list "readelf -s ehdr_start-1.nd"] \
            "ehdr_start-1-${abi}"]]
    if [regexp "(?:n32|n64)" "$abi"] {
	setup_kfail "mips*-*-*" "ld/15428"
    }
    run_ld_link_tests [list \
        [list \
            "MIPS magic __ehdr_start symbol test 2 ($abi)" \
            "$abi_ldflags($abi) -T ehdr_start-2.ld" "" \
            "$abi_asflags($abi)" \
            [list ehdr_start-${suff}.s] \
            [list "readelf -s ehdr_start-2.nd"] \
            "ehdr_start-2-${abi}"]]
}

# R_MIPS_JALR reloc tests.
set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]]
foreach { abi } $abis {
    run_ld_link_tests [list \
	[list \
	    "MIPS JALR reloc test ($abi)" \
	    "$abi_ldflags($abi) -T jalr3.ld" "" \
	    "$abi_asflags($abi)" \
	    [list ../../../gas/testsuite/gas/mips/jalr3.s] \
	    [list "objdump -d jalr3.dd"] \
	    "jalr3-${abi}"]]
}

proc build_mips_plt_lib { abi } {
    global abi_asflags
    global abi_ldflags

    run_ld_link_tests [list \
	[list "Shared $abi library for compressed PLT tests" \
	      "-shared $abi_ldflags($abi)" "" \
	      "$abi_asflags($abi)" \
	      { compressed-plt-1-dyn.s } \
	      {} \
	      "compressed-plt-1-${abi}-dyn.so"]]
}

proc run_mips_plt_test { name abi filter micromips suffix {extra {}} } {
    global abi_asflags
    global abi_ldflags

    set as_flags "$abi_asflags($abi) --defsym filter=$filter"
    append as_flags " --defsym micromips=$micromips --defsym $abi=1"
    if {[string equal $abi o32]} {
	append as_flags " -march=mips2"
    }
    set ld_flags "$abi_ldflags($abi) -T compressed-plt-1.ld"
    set dynobj "tmpdir/compressed-plt-1-${abi}-dyn.so"
    set files [list]
    if { $filter & 3 } {
	lappend files compressed-plt-1a.s
    }
    if { $filter & 12 } {
	lappend files compressed-plt-1b.s
    }
    if { $filter & 16 } {
	lappend files compressed-plt-1c.s
    }
    eval [list lappend files] $extra
    set readelf_flags "-A --syms --relocs -d"
    if { [string match "*word*" $suffix] } {
	append readelf_flags " -x.data"
    }
    set objdump_flags "-d -Mgpr-names=numeric"
    set basename "compressed-plt-1-${abi}-${suffix}"
    run_ld_link_tests [list \
	[list "$name" $ld_flags $dynobj \
	      "$as_flags" $files \
	      [list [list readelf $readelf_flags ${basename}.rd] \
		    [list objdump $objdump_flags ${basename}.od]] \
	      $basename]]
}

if { $linux_gnu } {
    build_mips_plt_lib o32
    run_mips_plt_test "o32 PLTs for standard encoding" o32 28 0 se
    run_mips_plt_test "o32 PLTs for MIPS16 encoding" o32 19 0 mips16-only
    run_mips_plt_test "o32 PLTs for microMIPS encoding" o32 19 1 umips-only
    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16" \
	o32 -1 0 mips16
    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with %got" \
	o32 -1 0 mips16-got compressed-plt-1d.s
    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with .word" \
	o32 -1 0 mips16-word compressed-plt-1e.s
    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS" \
	o32 -1 1 umips
    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with %got" \
	o32 -1 1 umips-got compressed-plt-1d.s
    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with .word" \
	o32 -1 1 umips-word compressed-plt-1e.s

    if $has_newabi {
	build_mips_plt_lib n32
	run_mips_plt_test "n32 PLTs for mixed MIPS and MIPS16" \
	    n32 -1 0 mips16
	run_mips_plt_test "n32 PLTs for mixed MIPS and microMIPS" \
	    n32 -1 1 umips
    }
}
