# Expect script for various indirect symbol tests.
#   Copyright 2012 Free Software Foundation, Inc.
#
# This file 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 2 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.
#

#
# Written by H.J. Lu (hongjiu.lu@intel.com)
#

# Exclude non-ELF targets.

if ![is_elf_format] {
    return
}

# Check if compiler works
if { [which $CC] == 0 } {
    return
}

proc check_link_message { cmd string testname } {
    send_log "$cmd\n"
    verbose "$cmd"
    catch "exec $cmd" exec_output
    send_log "$exec_output\n"
    verbose "$exec_output"

    foreach str $string {
	if [string match "*$str*" $exec_output] {
	    pass "$testname: $str"
	} else {
	    fail "$testname: $str"
	}
    }
}

if { ![ld_compile $CC $srcdir/$subdir/indirect1a.c tmpdir/indirect1a.o]
     || ![ld_compile $CC $srcdir/$subdir/indirect1b.c tmpdir/indirect1b.o]
     || ![ld_compile "$CC -fPIC" $srcdir/$subdir/indirect2.c tmpdir/indirect2.o]
     || ![ld_compile $CC $srcdir/$subdir/indirect3a.c tmpdir/indirect3a.o]
     || ![ld_compile $CC $srcdir/$subdir/indirect3b.c tmpdir/indirect3b.o]
     || ![ld_compile $CC $srcdir/$subdir/indirect4a.c tmpdir/indirect4a.o]
     || ![ld_compile $CC $srcdir/$subdir/indirect4b.c tmpdir/indirect4b.o] } {
    unresolved "Indirect symbol tests"
    return
}

set build_tests {
  {"Build libindirect1c.so"
   "-shared" "-fPIC"
   {indirect1c.c} {} "libindirect1c.so"}
  {"Build libindirect3c.so"
   "-shared" "-fPIC"
   {indirect3c.c} {} "libindirect3c.so"}
  {"Build libindirect4c.so"
   "-shared" "-fPIC"
   {indirect4c.c} {} "libindirect4c.so"}
}

run_cc_link_tests $build_tests

global ld

set string ": final link failed: Bad value"
set string1 ": local symbol \`foo\' in tmpdir/indirect1b.o is referenced by DSO"

set testname "Indirect symbol 1a"
set cmd "$ld -e start -o tmpdir/indirect1 tmpdir/indirect1a.o tmpdir/indirect1b.o tmpdir/libindirect1c.so"
check_link_message "$cmd" [list $string1 $string] "$testname"

set testname "Indirect symbol 1b"
set cmd "$ld -e start -o tmpdir/indirect1 tmpdir/indirect1a.o tmpdir/libindirect1c.so tmpdir/indirect1b.o"
check_link_message "$cmd" [list $string1 $string] "$testname"

set string ": final link failed: Nonrepresentable section on output"
set string2 ": No symbol version section for versioned symbol \`foo@FOO\'"
set testname "Indirect symbol 2"
set cmd "$ld -shared  -o tmpdir/indirect2.so tmpdir/indirect2.o"
check_link_message "$cmd" [list $string2 $string] "$testname"

# The following tests require running the executable generated by ld.
if ![isnative] {
    return
}

set run_tests {
    {"Run with libindirect3c.so 1"
     "tmpdir/indirect3a.o tmpdir/indirect3b.o tmpdir/libindirect3c.so" ""
     {dummy.c} "indirect3a" "indirect3.out"}
    {"Run with libindirect3c.so 2"
     "tmpdir/indirect3a.o tmpdir/libindirect3c.so tmpdir/indirect3b.o" ""
     {dummy.c} "indirect3b" "indirect3.out"}
    {"Run with libindirect3c.so 3"
     "tmpdir/indirect3b.o tmpdir/libindirect3c.so tmpdir/indirect3a.o" ""
     {dummy.c} "indirect3c" "indirect3.out"}
    {"Run with libindirect3c.so 4"
     "tmpdir/libindirect3c.so tmpdir/indirect3b.o tmpdir/indirect3a.o" ""
     {dummy.c} "indirect3d" "indirect3.out"}
    {"Run with libindirect4c.so 1"
     "tmpdir/indirect4a.o tmpdir/indirect4b.o tmpdir/libindirect4c.so" ""
     {dummy.c} "indirect4a" "indirect4.out"}
    {"Run with libindirect4c.so 2"
     "tmpdir/indirect4a.o tmpdir/libindirect4c.so tmpdir/indirect4b.o" ""
     {dummy.c} "indirect4b" "indirect4.out"}
    {"Run with libindirect4c.so 3"
     "tmpdir/indirect4b.o tmpdir/libindirect4c.so tmpdir/indirect4a.o" ""
     {dummy.c} "indirect4c" "indirect4.out"}
    {"Run with libindirect4c.so 4"
     "tmpdir/libindirect4c.so tmpdir/indirect4b.o tmpdir/indirect4a.o" ""
     {dummy.c} "indirect4d" "indirect4.out"}
}

run_ld_link_exec_tests [] $run_tests
