# Expect script for ld-s390 tests
#   Copyright (C) 2003-2021 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.
#

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

if { !([istarget "s390-*-*"] || [istarget "s390x-*-*"]) } {
    return
}

# 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 s390tests {
    {"TLS -fpic -shared transitions" "-shared -melf_s390 --hash-style=sysv" ""
     "-m31" {tlspic1.s tlspic2.s}
     {{readelf -Ssrl tlspic.rd} {objdump -dzrj.text tlspic.dd}
      {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
     "libtlspic.so"}
    {"Helper shared library" "-shared -melf_s390" ""
     "-m31" {tlslib.s} {} "libtlslib.so"}
    {"TLS -fpic and -fno-pic exec transitions"
     "-melf_s390 tmpdir/libtlslib.so --hash-style=sysv" ""
     "-m31" {tlsbinpic.s tlsbin.s}
     {{readelf -Ssrl tlsbin.rd} {objdump -dzrj.text tlsbin.dd}
      {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
     "tlsbin"}
    {"GOT: symbol address load from got to larl"
     "-shared -melf_s390 --hash-style=sysv --version-script=gotreloc-1.ver" ""
     "-m31" {gotreloc-1.s}
     {{objdump -dzrj.text gotreloc_31-1.dd}}
     "gotreloc_31-1"}
}

set s390xtests {
    {"TLS -fpic -shared transitions" "-shared -melf64_s390 --hash-style=sysv" ""
     "-m64 -Aesame" {tlspic1_64.s tlspic2_64.s}
     {{readelf -WSsrl tlspic_64.rd} {objdump -dzrj.text tlspic_64.dd}
      {objdump -sj.got tlspic_64.sd} {objdump -sj.tdata tlspic_64.td}}
     "libtlspic_64.so"}
    {"Helper shared library" "-shared -melf64_s390" ""
     "-m64 -Aesame" {tlslib_64.s} {} "libtlslib_64.so"}
    {"TLS -fpic and -fno-pic exec transitions"
     "-melf64_s390 tmpdir/libtlslib_64.so --hash-style=sysv" ""
     "-m64 -Aesame" {tlsbinpic_64.s tlsbin_64.s}
     {{readelf -WSsrl tlsbin_64.rd} {objdump -dzrj.text tlsbin_64.dd}
      {objdump -sj.got tlsbin_64.sd} {objdump -sj.tdata tlsbin_64.td}}
     "tlsbin_64"}
    {"GOT: norelro symbol address load from got to larl"
     "-shared -melf64_s390 -z norelro --hash-style=sysv --version-script=gotreloc-1.ver" ""
     "-m64" {gotreloc-1.s}
     {{objdump -dzrj.text gotreloc_64-norelro-1.dd}}
     "gotreloc_64-1"}
    {"GOT: relro symbol address load from got to larl"
     "-shared -melf64_s390 -z relro --hash-style=sysv --version-script=gotreloc-1.ver" ""
     "-m64" {gotreloc-1.s}
     {{objdump -dzrj.text gotreloc_64-relro-1.dd}}
     "gotreloc_64-1"}
    {"PLT: offset test"
     "-shared -m elf64_s390 -dT pltoffset-1.ld" ""
     "-m64" {pltoffset-1.s}
     {{objdump "-dzrj.text --stop-address=16" pltoffset-1.dd}}
     "pltoffset-1"}
}

if [istarget "s390-*-*"] {
    run_ld_link_tests $s390tests
}

if [istarget "s390x-*-*"] {
    run_ld_link_tests $s390tests
    run_ld_link_tests $s390xtests
}

set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach t $test_list {
    # We need to strip the ".d", but can leave the dirname.
    verbose [file rootname $t]
    run_dump_test [file rootname $t]
}
