# Expect script for ld linkonce tests
#   Copyright 2001, 2002 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@axis.com)
#

# Test for ELF here (or really, .gnu.linkonce functionality), so we don't
# have to qualify on ELF specifically in every .d-file.

if { ![istarget *-*-linux*] \
     && ![istarget *-*-gnu] \
     && ![istarget hppa*64*-*-hpux*] \
     && ![istarget *-*-elf] } {
    return
}

if { [istarget *-*-linux*aout*] \
     || [istarget *-*-linux*oldld*] } {
    return
}

load_lib ld-lib.exp

set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
for { set i 0 } { $i < [llength $rd_test_list] } { incr i } {
    # We need to strip the ".d", but can leave the dirname.
    verbose [file rootname [lindex $rd_test_list $i]]
    run_dump_test [file rootname [lindex $rd_test_list $i]]
}
