# Expect script for linker support of size relocations.
#
#   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.
#


# Size relications have only been implemented for the ix86 and x86_64,
# so far.
if {!(([istarget "i?86-*-*"]
       || [istarget "x86_64-*-*"])
      && ([istarget "*-*-elf*"]
	  || [istarget "*-*-nacl*"]
	  || (([istarget "*-*-linux*"]
	       || [istarget "*-*-gnu*"])
	      && ![istarget "*-*-*aout*"]
	      && ![istarget "*-*-*oldld*"]))) } {
    verbose "Size relocations tests not run - no target support"
    return
}

set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach t $test_list {
    # We need to strip the ".d", but can leave the dirname.
    verbose [file rootname $t]
    run_dump_test [file rootname $t]
}

# We need a native system.
if ![isnative] {
    verbose "Natibe size relocation tests not run - not a native toolchain"
    return
}

# We need a working compiler.
if { [which $CC] == 0 } {
    verbose "Native size relocation tests not run - no compiler available"
    return
}

set build_tests {
  {"Build libsize-1.so"
   "-shared" "-fPIC"
   {size-1a.c size-1b.c} {} "libsize-1.so"}
  {"Build libsize-2.so"
   "-shared" "-fPIC"
   {size-2a.c size-2b.c} {} "libsize-2.so"}
  {"Build libsize-3a.so"
   "-shared" "-fPIC"
   {size-3a.c} {} "libsize-3a.so"}
  {"Build libsize-3b.so"
   "-shared" "-fPIC"
   {size-3b.c} {} "libsize-3b.so"}
  {"Build libsize-3c.so"
   "-shared" "-fPIC"
   {size-3c.c} {} "libsize-3c.so"}
  {"Build libsize-6b.so"
   "-shared" "-fPIC"
   {size-6b.c} {} "libsize-6b.so"}
  {"Build libsize-7.so"
   "-shared" "-fPIC"
   {size-7b.c} {} "libsize-7.so"}
  {"Build size-7"
   "-Wl,--no-as-needed tmpdir/libsize-7.so" ""
   {size-7a.c} {{readelf -rW size-7.rd}} "size-7.exe"}
  {"Build libsize-8.so"
   "-shared" "-fPIC"
   {size-8b.c} {} "libsize-8.so"}
  {"Build size-8"
   "-Wl,--no-as-needed tmpdir/libsize-8.so" ""
   {size-8a.c} {{readelf -rW size-8.rd}} "size-8.exe"}
  {"Build libsize-9.so"
   "-shared" "-fPIC"
   {size-9b.c} {{readelf -rW size-9.rd}} "libsize-9.so"}
  {"Build libsize-10.so"
   "-shared" "-fPIC"
   {size-10b.c} {{readelf -rW size-10.rd}} "libsize-10.so"}
}

run_cc_link_tests $build_tests

set run_tests {
    {"Run size-1"
     "tmpdir/libsize-1.so" ""
     {size-1.c} "size-1" "size-1.out"}
    {"Run size-2"
     "tmpdir/libsize-2.so" ""
     {size-2.c} "size-2" "size-2.out"}
    {"Run size-3a"
     "" ""
     {size-3.c size-3a.c} "size-3a" "size-3.out"}
    {"Run size-3b"
     "tmpdir/libsize-3a.so" ""
     {size-3.c} "size-3b" "size-3.out"}
    {"Run size-3c"
     "" ""
     {size-3.c size-3b.c} "size-3c" "size-3.out"}
    {"Run size-3d"
     "tmpdir/libsize-3b.so" ""
     {size-3.c} "size-3d" "size-3.out"}
    {"Run size-3d"
     "" ""
     {size-3.c size-3c.c} "size-3d" "size-3.out"}
    {"Run size-3e"
     "tmpdir/libsize-3c.so" ""
     {size-3.c} "size-3e" "size-3.out"}
    {"Run size-4a"
     "" ""
     {size-4a.c size-4b.c} "size-4a" "size-4.out"}
    {"Run size-4b"
     "" ""
     {size-4b.c size-4a.c} "size-4b" "size-4.out"}
    {"Run size-5a"
     "" ""
     {size-5a.c size-5b.c} "size-5a" "size-5.out"}
    {"Run size-5b"
     "" ""
     {size-5b.c size-5a.c} "size-5b" "size-5.out"}
    {"Run size-6"
     "tmpdir/libsize-6b.so" ""
     {size-6a.c} "size-6" "size-6.out"}
}

run_ld_link_exec_tests [] $run_tests

# Check if size relocation works at run-time.
catch "exec tmpdir/size-7.exe > tmpdir/dump.out" exec_output
if ![string match "" $exec_output] then {
    send_log "No run-time size relocation support: $exec_output\n"
    verbose "No run-time size relocation support: $exec_output" 1
    return
}

if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/size-7.out" ] } then {
    verbose "output is [file_contents "tmpdir/dump.out"]" 2
    fail "Run-time size relocation"
    return
}

# Run-time size relocation tests.
set run_time_tests {
    {"Run size-8"
     "tmpdir/libsize-8.so --hash-styl=gnu" ""
     {size-8a.c} "size-8" "size-8.out"}
    {"Run size-9"
     "tmpdir/libsize-9.so" ""
     {size-9a.c} "size-9" "size-9.out"}
    {"Run size-10"
     "tmpdir/libsize-10.so" ""
     {size-10a.c} "size-10" "size-10.out"}
}

run_ld_link_exec_tests [] $run_time_tests
