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

# Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
global NOPIE_CFLAGS NOPIE_LDFLAGS

run_cc_link_tests [list \
    [list \
	"Build no-plt-func1.o no-plt-main1.o" \
	"" \
	"-fPIE -Wa,-mx86-used-note=yes" \
	{no-plt-func1.c no-plt-main1.c} \
    ] \
    [list \
	"Build no-plt-check1.o no-plt-extern1.o" \
	"" \
	"-Wa,-mrelax-relocations=yes,-mx86-used-note=yes" \
	{no-plt-check1.S no-plt-extern1.S} \
    ] \
    [list \
	"Build libno-plt-1a.so" \
	"-shared tmpdir/no-plt-func1.o" \
	"-Wa,-mx86-used-note=yes" \
	{dummy.s} \
	{} \
	"libno-plt-1a.so" \
    ] \
    [list \
	"Build libno-plt-1b.so" \
	"-shared tmpdir/no-plt-extern1.o" \
	"-Wa,-mx86-used-note=yes" \
	{dummy.s} \
	{{readelf -Wr libno-plt-1b.rd} \
	 {objdump -dwrj.text libno-plt-1b.dd}} \
	"libno-plt-1b.so" \
    ] \
    [list \
	"No PLT (dynamic 1a)" \
	"$NOPIE_LDFLAGS tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \
	"-Wa,-mx86-used-note=yes" \
	{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" \
	"-Wa,-mx86-used-note=yes" \
	{dummy.s} \
	{{readelf -Wr no-plt-1b.rd} {objdump -dwrj.text no-plt-1b.dd}} \
	"no-plt-1b" \
    ] \
    [list \
	"No PLT (dynamic 1c)" \
	"$NOPIE_LDFLAGS tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \
	 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
	"-Wa,-mx86-used-note=yes" \
	{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" \
	"-Wa,-mx86-used-note=yes" \
	{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" \
	"-Wa,-mx86-used-note=yes" \
	{dummy.s} \
	{{readelf -Wr no-plt-1e.rd} {nm -gD no-plt-1e.nd} {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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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" \
	"-Wa,-mx86-used-note=yes" \
	{ 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 -Wa,-mx86-used-note=yes" \
	    { 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" \
	    "-Wa,-mx86-used-note=yes" \
	    { 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" \
	    "-Wa,-mx86-used-note=yes" \
	    { 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" \
	    "-Wa,-mx86-used-note=yes" \
	    { 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" \
	    "-Wa,-mx86-used-note=yes" \
	    { dummy.s } \
	    "pr20253-2c" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2d" \
	    "tmpdir/pr20253-2a.o tmpdir/libpr20253-2a.so" \
	    "-Wa,-mx86-used-note=yes" \
	    { dummy.s } \
	    "pr20253-2d" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2e" \
	    "-pie tmpdir/pr20253-2a.o tmpdir/libpr20253-2a.so" \
	    "-Wa,-mx86-used-note=yes" \
	    { dummy.s } \
	    "pr20253-2e" \
	    "pass.out" \
	] \
	[list \
	    "Run pr20253-2f" \
	    "$NOPIE_LDFLAGS tmpdir/pr20253-2a.o" \
	    "-Wa,-mx86-used-note=yes" \
	    { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
	    "pr20253-2f" \
	    "pass.out" \
	    "-DCHECK_PLT" \
	] \
	[list \
	    "Run pr20253-2g" \
	    "--static tmpdir/pr20253-2a.o" \
	    "-Wa,-mx86-used-note=yes" \
	    { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
	    "pr20253-2g" \
	    "pass.out" \
	    "-DCHECK_PLT" \
	] \
    ]
}
