# Expect script for ELF MPX tests.
#   Copyright 2013
#   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
}

set build_tests {
  {"Build libmpx1a.a"
   "" "-Wa,-madd-bnd-prefix -fPIC"
   {mpx1a.c}  {{readelf {-r --wide} mpx1a.rd}} "libmpx1a.a"}
  {"Build libmpx1b.a"
   "" ""
   {mpx1b.c} {} "libmpx1b.a"}
  {"Build libmpx1c.a"
   "" "-Wa,-madd-bnd-prefix"
   {mpx1c.c} {{readelf {-r --wide} mpx1c.rd}} "libmpx1c.a"}
  {"Build libmpx2a.a"
   "" "-Wa,-madd-bnd-prefix -fPIE"
   {mpx2a.c}  {{readelf {-r --wide} mpx2a.rd}} "libmpx2a.a"}
  {"Build libmpx2b.a"
   "" "-fPIE"
   {mpx2b.c} {} "libmpx2b.a"}
  {"Build libmpx2c.a"
   "" "-Wa,-madd-bnd-prefix -fPIE"
   {mpx2c.c} {{readelf {-r --wide} mpx2c.rd}} "libmpx2c.a"}
}

run_cc_link_tests $build_tests

set run_tests {
    {"Run mpx1"
     "tmpdir/mpx1a.o tmpdir/mpx1b.o tmpdir/mpx1c.o" ""
     {dummy.s} "mpx1" "mpx1.out"}
    {"Run mpx1 with -static"
     "tmpdir/mpx1a.o tmpdir/mpx1b.o tmpdir/mpx1c.o -static" ""
     {dummy.s} "mpx1static" "mpx1.out"}
    {"Run mpx2"
     "tmpdir/mpx2a.o tmpdir/mpx2b.o tmpdir/mpx2c.o -pie" ""
     {dummy.s} "mpx2" "mpx2.out"}
    {"Run mpx2 with -static"
     "tmpdir/mpx2a.o tmpdir/mpx2b.o tmpdir/mpx2c.o -static" ""
     {dummy.s} "mpx2static" "mpx2.out"}
}

run_ld_link_exec_tests [] $run_tests

run_dump_test "bnd-branch-1"
