# Expect script for VxWorks targeted SH linker tests
#   Copyright 2006, 2007  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.

if { ![istarget "sh-*-vxworks"] } {
    return
}

set endians { "--big" "-EB" "" "--little" "-EL" "-le" }

foreach { gas_option ld_option suffix } $endians {
    set vxworkstests {
	{"VxWorks shared library test 1" "-shared -Tvxworks1.ld $ld_option" ""
	 "$gas_option" {vxworks1-lib.s}
	 {{readelf --relocs vxworks1-lib.rd}
	  {objdump -dr vxworks1-lib$suffix.dd}
	  {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
	 "libvxworks1.so"}
	{"VxWorks executable test 1 (dynamic)" \
	 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic $ld_option" ""
	 "$gas_option" {vxworks1.s}
	 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1$suffix.dd}}
	 "vxworks1"}
	{"VxWorks executable test 2 (dynamic)" \
	 "-Tvxworks1.ld -q --force-dynamic $ld_option" ""
	 "$gas_option" {vxworks2.s}
	 {{readelf --segments vxworks2.sd}}
	 "vxworks2"}
	{"VxWorks executable test 2 (static)"
	 "-Tvxworks1.ld $ld_option" ""
	 "$gas_option" {vxworks2.s}
	 {{readelf --segments vxworks2-static.sd}}
	 "vxworks2"}
	{"VxWorks shared library test 3" "-shared -Tvxworks1.ld $ld_option" ""
	 "$gas_option" {vxworks3-lib.s}
	    {{objdump -dr vxworks3-lib$suffix.dd}}
	 "libvxworks3.so"}
	{"VxWorks executable test 3 (dynamic)" \
	 "tmpdir/libvxworks3.so -Tvxworks1.ld -q --force-dynamic $ld_option" ""
	 "$gas_option" {vxworks3.s}
	 {{objdump -d vxworks3$suffix.dd}}
	 "vxworks3"}
    }
    run_ld_link_tests [subst $vxworkstests]
}
run_dump_test "vxworks1-static"
