# Expect script for ld-s390 tests
#   Copyright (C) 2003, 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 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 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 s390tests {
    {"TLS -fpic -shared transitions" "-shared -melf_s390"
     "-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" "-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"}
}

set s390xtests {
    {"TLS -fpic -shared transitions" "-shared -melf64_s390"
     "-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" "-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"}
}

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

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