# Expect script for x86-64 no-PLT 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
}

if ![is_elf_format] {
    return
}

if ![istarget "x86_64-*-*"] {
    return
}

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

run_cc_link_tests [list \
    [list \
	"Build no-plt-func1.o no-plt-main1.o" \
	"" \
	"-fPIE" \
	{no-plt-func1.c no-plt-main1.c} \
    ] \
    [list \
	"Build no-plt-check1.o no-plt-extern1.o" \
	"" \
	"-Wa,-mrelax-relocations=yes" \
	{no-plt-check1.S no-plt-extern1.S} \
    ] \
    [list \
	"Build libno-plt-1a.so" \
	"-shared tmpdir/no-plt-func1.o" \
	"" \
	{dummy.s} \
	{} \
	"libno-plt-1a.so" \
    ] \
    [list \
	"Build libno-plt-1b.so" \
	"-shared tmpdir/no-plt-extern1.o" \
	"" \
	{dummy.s} \
	{{readelf -Wr libno-plt-1b.rd} \
	 {objdump -dwrj.text libno-plt-1b.dd}} \
	"libno-plt-1b.so" \
    ] \
    [list \
	"No PLT (dynamic 1a)" \
	"tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"" \
	{dummy.s} \
	{{readelf -Wr no-plt-1a.rd} {objdump -dwrj.text no-plt-1a.dd}} \
	"no-plt-1a" \
    ] \
    [list \
	"No PLT (dynamic 1b)" \
	"tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
	"" \
	{dummy.s} \
	{{readelf -Wr no-plt-1b.rd} {objdump -dwrj.text no-plt-1b.dd}} \
	"no-plt-1b" \
    ] \
    [list \
	"No PLT (dynamic 1c)" \
	"tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
	"" \
	{dummy.s} \
	{{readelf -Wr no-plt-1c.rd} {objdump -dwrj.text no-plt-1c.dd}} \
	"no-plt-1c" \
    ] \
    [list \
	"No PLT (static 1d)" \
	"-static tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"" \
	{dummy.s} \
	{{readelf -Wr no-plt-1d.rd} {objdump -dwrj.text no-plt-1d.dd}} \
	"no-plt-1d" \
    ] \
    [list \
	"No PLT (PIE 1e)" \
	"-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"" \
	{dummy.s} \
	{{readelf -Wr no-plt-1e.rd} {objdump -dwrj.text no-plt-1e.dd}} \
	"no-plt-1e" \
    ] \
    [list \
	"No PLT (PIE 1f)" \
	"-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
	"" \
	{ dummy.s } \
	{{readelf -Wr no-plt-1f.rd} {objdump -dwrj.text no-plt-1f.dd}} \
	"no-plt-1f" \
    ] \
    [list \
	"No PLT (PIE 1g)" \
	"-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
	"" \
	{ dummy.s } \
	{{readelf -Wr no-plt-1g.rd} {objdump -dwrj.text no-plt-1g.dd}} \
	"no-plt-1g" \
    ] \
]

run_ld_link_exec_tests [] [list \
    [list \
	"No PLT (dynamic 1a)" \
	"tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"" \
	{ dummy.s } \
	"no-plt-1a" \
	"pass.out" \
    ] \
    [list \
	"No PLT (dynamic 1b)" \
	"tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
	"" \
	{ dummy.s } \
	"no-plt-1b" \
	"pass.out" \
    ] \
    [list \
	"No PLT (dynamic 1c)" \
	"tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
	"" \
	{ dummy.s } \
	"no-plt-1c" \
	"pass.out" \
    ] \
    [list \
	"No PLT (static 1d)" \
	"-static tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"" \
	{ dummy.s } \
	"no-plt-1d" \
	"pass.out" \
    ] \
    [list \
	"No PLT (PIE 1e)" \
	"-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"" \
	{ dummy.s } \
	"no-plt-1e" \
	"pass.out" \
    ] \
    [list \
	"No PLT (PIE 1f)" \
	"-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
	"" \
	{ dummy.s } \
	"no-plt-1f" \
	"pass.out" \
    ] \
    [list \
	"No PLT (PIE 1g)" \
	"-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
	"" \
	{ dummy.s } \
	"no-plt-1g" \
	"pass.out" \
    ] \
]

# Run-time tests which require working IFUNC support.
if { [check_ifunc_available] } {
    run_cc_link_tests [list \
	[list \
	    "Build pr20253-2a.o pr20253-2b.o pr20253-2c.o pr20253-2d.o" \
	    "" \
	    "-fPIE -O2 -g" \
	    { pr20253-2a.c pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
	] \
	[list \
	    "Build libpr20253-2a.so" \
	    "-shared tmpdir/pr20253-2b.o \
	     tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
	    "" \
	    { dummy.s } \
	    {} \
	    "libpr20253-2a.so" \
	] \
    ]

    run_ld_link_exec_tests [] [list \
	[list \
	    "Run pr20253-2a" \
	    "tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
	     tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
	    "" \
	    { dummy.s } \
	    "pr20253-2a" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2b" \
	    "--static tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
	    tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
	    "" \
	    { dummy.s } \
	    "pr20253-2b" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2c" \
	    "-pie tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
	    tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
	    "" \
	    { dummy.s } \
	    "pr20253-2c" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2d" \
	    "tmpdir/pr20253-2a.o tmpdir/libpr20253-2a.so" \
	    "" \
	    { dummy.s } \
	    "pr20253-2d" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2e" \
	    "-pie tmpdir/pr20253-2a.o tmpdir/libpr20253-2a.so" \
	    "" \
	    { dummy.s } \
	    "pr20253-2e" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2f" \
	    "tmpdir/pr20253-2a.o" \
	    "" \
	    { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
	    "pr20253-2f" \
	    "pass.out" \
	    "-DCHECK_PLT" \
	] \
	[list \
	    "Run pr20253-2g" \
	    "--static tmpdir/pr20253-2a.o" \
	    "" \
	    { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
	    "pr20253-2g" \
	    "pass.out" \
	    "-DCHECK_PLT" \
	] \
    ]
}
