# Expect script for MIPS ELF linker tests
#   Copyright 2002, 2003, 2004, 2005, 2007 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 mips64*-*-linux*]]
set linux_gnu [expr [istarget mips*-*-linux*]]
set embedded_elf [expr [istarget mips*-*-elf]]

if { [istarget mips64*-linux-gnu] } {
    set o32_as_flags "-32 -EB"
    set o32_ld_flags "-melf32btsmip"
} else {
    set o32_as_flags ""
    set o32_ld_flags ""
}

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

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

# 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"
}

if $has_newabi {
    run_dump_test "elf-rel-got-n32"
    run_dump_test "elf-rel-xgot-n32"
    if { $linux_gnu } {
	run_dump_test "elf-rel-got-n64-linux"
	run_dump_test "elf-rel-xgot-n64-linux"
    } else {
	run_dump_test "elf-rel-got-n64"
	run_dump_test "elf-rel-xgot-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"
    run_dump_test "rel32-n32"
    run_dump_test "rel64"
}

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"
    if $linux_gnu {
	# Uses a linux-specific ld -m switch
	run_dump_test "reloc-1-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 && $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"
}

run_dump_test "jaloverflow"
run_dump_test "jaloverflow-2"
if {$has_newabi} {
    run_dump_test "jalbal"
}

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

if { $linux_gnu } {
    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_dump_test "got-dump-1"
    if $has_newabi {
	run_dump_test "got-dump-2"
    }
}

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
     #     _gp
     #     _GLOBAL_OFFSET_TABLE_
     set base_syms 4
     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 options 2:assembler options
# 3:filenames of assembler files 4: action and options. 5: 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" \
	 "$o32_ld_flags" \
	 "$o32_as_flags -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" \
	 "$o32_ld_flags" \
	 "$o32_as_flags -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"

run_dump_test "attr-gnu-4-00"
run_dump_test "attr-gnu-4-01"
run_dump_test "attr-gnu-4-02"
run_dump_test "attr-gnu-4-03"
run_dump_test "attr-gnu-4-04"
run_dump_test "attr-gnu-4-05"
run_dump_test "attr-gnu-4-10"
run_dump_test "attr-gnu-4-11"
run_dump_test "attr-gnu-4-12"
run_dump_test "attr-gnu-4-13"
run_dump_test "attr-gnu-4-14"
run_dump_test "attr-gnu-4-15"
run_dump_test "attr-gnu-4-20"
run_dump_test "attr-gnu-4-21"
run_dump_test "attr-gnu-4-22"
run_dump_test "attr-gnu-4-23"
run_dump_test "attr-gnu-4-24"
run_dump_test "attr-gnu-4-25"
run_dump_test "attr-gnu-4-30"
run_dump_test "attr-gnu-4-31"
run_dump_test "attr-gnu-4-32"
run_dump_test "attr-gnu-4-33"
run_dump_test "attr-gnu-4-34"
run_dump_test "attr-gnu-4-35"
run_dump_test "attr-gnu-4-40"
run_dump_test "attr-gnu-4-41"
run_dump_test "attr-gnu-4-42"
run_dump_test "attr-gnu-4-43"
run_dump_test "attr-gnu-4-44"
run_dump_test "attr-gnu-4-45"
run_dump_test "attr-gnu-4-51"
