# Expect script for run_dump_test based ld-sh tests.
#   Copyright 2001, 2002, 2003 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 Hans-Peter Nilsson (hp@bitrange.com)
#

# This file is kept separate from sh.exp, because having it separate
# simplifies selective testing, like in "make check-ld
# RUNTESTFLAGS=rd-sh.exp=shared-1".  It is assumed that sh.exp is a place
# for constructs where the name of the test is harder to extract and
# select than here.

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

global ASFLAGS
global LDFLAGS
set asflags_save "$ASFLAGS"
set ldflags_save "$LDFLAGS"

if {[istarget sh64*-*-*] || [istarget sh5*-*-*]} then {
    set ASFLAGS "$ASFLAGS -isa=SHcompact"
    if [istarget sh64*-*-linux*] {
        set LDFLAGS "$LDFLAGS -mshlelf32_linux"
    } elseif { [istarget sh64*-*-netbsd*] || [istarget sh5*-*-netbsd*] } {
        set LDFLAGS "$LDFLAGS -mshlelf32_nbsd -e_start"
    } else {
        set LDFLAGS "$LDFLAGS -mshlelf32"
    }
}

set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach shtest $rd_test_list {
    # We need to strip the ".d", but can leave the dirname.
    verbose [file rootname $shtest]
    # vxworks-static.d relies on files created by sh-vxworks.exp.
    # We run it there instead of here.
    if { [file tail $shtest] != "vxworks1-static.d" } {
	run_dump_test [file rootname $shtest]
    }
    if [string match $srcdir/$subdir/*-dso.d $shtest] {
	# Copy the output of the DSO-createing test to .so file.
	# Notice that a DSO-creating test must preceed the tests
	# which need that DSO in sort-order by name.
	set cmd "cp tmpdir/dump tmpdir/[file rootname [file tail $shtest]].so"
	send_log "$cmd\n"
	set cmdret [catch "exec $cmd" comp_output]
	send_log "$comp_output\n"
	# FIXME: What if it fails?  Need we do something?
    }
}
set ASFLAGS "$asflags_save"
set LDFLAGS "$ldflags_save"
