# Expect script for x86-64 TLS tests.
#   Copyright (C) 2016 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.
#

# The following tests require running the executable generated by ld,
# or enough of a build environment to create a fully linked executable.
# This is not commonly available when testing a cross-built linker.
if ![isnative] {
    return
}

# Only on Linux for now.
if ![istarget "x86_64-*-linux*"] {
    return
}

# Check to see if the C compiler works
if { [which $CC] == 0 } {
    return
}

run_cc_link_tests [list \
    [list \
	"Build tls-def1.o tls-main1.o" \
	"" \
	"-fPIE" \
	{tls-def1.c tls-main1.c} \
    ] \
    [list \
	"Build tls-gd1.o tls-ld1.o" \
	"" \
	"-fPIC -Wa,-mrelax-relocations=yes" \
	{tls-gd1.S tls-ld1.S} \
    ] \
    [list \
	"Build libtls-1a.so" \
	"-shared tmpdir/tls-def1.o" \
	"" \
	{dummy.s} \
	{} \
	"libtls-1a.so" \
    ] \
    [list \
	"Build libtls-1b.so" \
	"-shared tmpdir/tls-gd1.o tmpdir/tls-ld1.o" \
	"" \
	{dummy.s} \
	{} \
	"libtls-1b.so" \
    ] \
]

run_ld_link_exec_tests [] [list \
    [list \
	"TLS GD/LD -> LE transition without PLT (dynamic)" \
	"tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \
	 tmpdir/tls-ld1.o" \
	"" \
	{ dummy.s } \
	"tls-1a" \
	"pass.out" \
    ] \
    [list \
	"TLS GD/LD -> LE transition without PLT (PIE)" \
	"-pie tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \
	 tmpdir/tls-ld1.o" \
	"" \
	{ dummy.s } \
	"tls-1b" \
	"pass.out" \
    ] \
    [list \
	"TLS GD/LD -> LE transition without PLT (static)" \
	"-static tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \
	 tmpdir/tls-ld1.o" \
	"" \
	{ dummy.s } \
	"tls-1c" \
	"pass.out" \
    ] \
    [list \
	"TLS GD/LD -> IE transition without PLT" \
	"tmpdir/tls-main1.o tmpdir/tls-gd1.o tmpdir/tls-ld1.o \
	 tmpdir/libtls-1a.so -R tmpdir" \
	"" \
	{ dummy.s } \
	"tls-1d" \
	"pass.out" \
    ] \
    [list \
	"TLS without PLT (1)" \
	"tmpdir/tls-main1.o \
	 tmpdir/libtls-1a.so tmpdir/libtls-1b.so -R tmpdir" \
	"" \
	{ dummy.s } \
	"tls-1e" \
	"pass.out" \
    ] \
    [list \
	"TLS without PLT (2)" \
	"tmpdir/tls-main1.o tmpdir/tls-def1.o \
	 tmpdir/libtls-1b.so -R tmpdir" \
	"" \
	{ dummy.s } \
	"tls-1f" \
	"pass.out" \
    ] \
]
