# Expect script for run_dump_test based ld-sh tests.
#   Copyright 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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]
    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"
