# Expect script for ld-sh tests
#   Copyright (C) 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation
#
# 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.
#

# Test SH linking; all types of relocs.  This tests the assembler and
# tools like objdump as well as the linker.

if ![istarget sh64-*-*] {
    return
}

if [istarget sh64*-*-linux*] {
    return
}

if { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } then {
	return
}

# 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).

# Note that the contents dump is the same for "inter-file datalabel
# references, 64-bit ABI" as for 32-bit ABI and ELF so we re-use it.

set sh64tests {
    {"SH64 linking, 64-bit ABI" "-mshelf64"
     "--abi=64" {sh64-1.s sh64-2.s}
     {{objdump -sr abi64.sd} {objdump -x abi64.xd}} "abi64.bin" }
    {"SH64 linking, 64-bit ABI, -no-expand" "-mshelf64"
     "--abi=64 -no-expand" {sh64-1.s sh64-2.s}
     {{objdump -sr abixx-noexp.sd}} "abi64-noexp.bin" }
    {"SH64 linking, 32-bit ABI" "-mshelf32"
     "--abi=32" {sh64-1.s sh64-2.s}
     {{objdump -sr abi32.sd} {objdump -x abi32.xd}} "abi32.bin" }
    {"SH64 linking, 32-bit ABI, -no-expand" "-mshelf32"
     "--abi=32 -no-expand" {sh64-1.s sh64-2.s}
     {{objdump -sr abixx-noexp.sd}} "abi32-noexp.bin" }
    {"SH64 linking, single multi-ISA object" "-mshelf32"
     "--abi=32" {shmix-1.s}
     {{objdump -sr mix1.sd} {objdump -x mix1.xd}} "mix1.bin" }
    {"SH64 linking, single multi-ISA object, -no-expand" "-mshelf32"
     "--abi=32 -no-expand" {shmix-1.s}
     {{objdump -sr mix1-noexp.sd}} "mix1-noexp.bin" }
    {"SH64 linking, two different-ISA objects" "-mshelf32"
     "--abi=32" {shmix-2.s shmix-3.s}
     {{objdump -sr mix2.sd} {objdump -x mix2.xd}} "mix2.bin" }
    {"SH64 linking, two different-ISA objects, -no-expand" "-mshelf32"
     "--abi=32 -no-expand" {shmix-2.s shmix-3.s}
     {{objdump -sr mix2-noexp.sd}} "mix2-noexp.bin" }
    {"SH64 linking, single SHcompact" "-mshelf32"
     "--isa=SHcompact" {shcmp-1.s}
     {{objdump -sr cmpct1.sd} {objdump -x cmpct1.xd}} "cmpct1.bin" }
    {"SH64 inter-file datalabel references, 64-bit ABI" "-mshelf64"
     "--abi=64" {shdl-1.s shdl-2.s}
     {{objdump -sr shdl64.sd} {objdump -x shdl64.xd}} "shdl64.bin" }
    {"SH64 inter-file datalabel references, 32-bit ABI" "-mshelf32"
     "--abi=32" {shdl-1.s shdl-2.s}
     {{objdump -sr shdl64.sd} {objdump -x shdl32.xd}} "shdl32.bin" }
    {"SH64 inter-file datalabel references and gc-sections, 32-bit ABI" "-mshelf32 --gc-sections"
     "--abi=32" {dlsection-1.s }
     {{objdump -sr dlsection.sd}} "dlsection32.bin" }
    {"SH64 inter-file datalabel references and gc-sections, 64-bit ABI" "-mshelf64 --gc-sections"
     "--abi=64" {dlsection-1.s }
     {{objdump -sr dlsection.sd}} "dlsection64.bin" }
    {"SH64 simple partial linking, 32-bit ABI" "-mshelf32 -r"
     "--abi=32" {rel-1.s rel-2.s}
     {{objdump -sx rel32.xd}} "rel32.bin" }
    {"SH64 simple partial linking, 64-bit ABI" "-mshelf64 -r"
     "--abi=64" {rel-1.s rel-2.s}
     {{objdump -sx rel64.xd}} "rel64.bin" }
    {"SH64 partial linking with datalabel references, 32-bit ABI" "-mshelf32 -r"
     "--abi=32" {reldl-1.s reldl-2.s}
     {{readelf {-s -r -x 1 -x 3} reldl32.rd}} "reldl32.bin" }
    {"SH64 partial linking with datalabel references, 64-bit ABI" "-mshelf64 -r"
     "--abi=64" {reldl-1.s reldl-2.s}
     {{readelf {-s -r -x 1 -x 3} reldl64.rd}} "reldl64.bin" }
    {"Handling SH64 assembler-generated .cranges" "-mshelf32"
     "--abi=32" {crange-2a.s crange-1.s}
     {{readelf {-S -s -r -x 1 -x 2 -x 4} crange1.rd}} "crange1.bin" }
    {"Handling SH64 assembler-generated .cranges, partial linking" "-mshelf32 -r"
     "--abi=32" {crange-2a.s}
     {{readelf {-S -s -r -x 2 -x 6} crangerel1.rd}} "crangerel1.bin" }
    {"Mixing SH64 assembler-generated with linker-generated .cranges" "-mshelf32"
     "--abi=32" {crange-2a.s crange-2b.s crange-1.s}
     {{readelf {-S -s -r -x 2 -x 4} crange2.rd}} "crange2.bin" }
    {"Mixing SH64 assembler-generated with linker-generated .cranges, partial linking"
     "-mshelf32 -r"
     "--abi=32" {crange-2a.s crange-2c.s crange-2d.s crange-2e.s}
     {{readelf {-S -s -r -x 2 -x 6} crangerel2.rd}} "crangerel2.bin" }
    {"Merge and use of SH64 .cranges, some not originally in order" "-mshelf32"
     "--abi=32"
     {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
      crange-2h.s crange-1.s}
      {{readelf {-S -s -x 2 -x 4} crange3.rd} {objdump -d crange3.dd}} "crange3.bin" }
    {"Sorted SH64 .cranges, entry at SHcompact code" "-mshelf32 --entry diversion"
     "--abi=32"
     {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
      crange-2h.s crange-1.s}
      {{readelf {-h -S -s -x 2 -x 4} crange3-cmpct.rd}} "crange3-cmpct.bin" }
    {"Sorted SH64 .cranges, entry at SHmedia code" "-mshelf32 --entry diversion2"
     "--abi=32"
     {crange-2e.s crange-2f.s crange-2g.s crange-2a.s crange-2d.s crange-2i.s
      crange-2h.s crange-1.s}
      {{readelf {-h -S -s -x 2 -x 4} crange3-media.rd}} "crange3-media.bin" }
    {"SH64 Big Endianness" "-mshelf64 -Tendian.ld"
     "--abi=64" {endian.s}
     {{objdump -s endian.sbd} {objdump -d endian.dbd}} "endianb.bin" }
    {"SH64 Little Endianness" "-mshlelf64 -Tendian.ld"
     "--abi=64 --little" {endian.s}
     {{objdump -s endian.sld} {objdump -d endian.dld}} "endinanl.bin" }
}

run_ld_link_tests $sh64tests
