# Expect script for various ELF tests.
#   Copyright 2002, 2003, 2005, 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.
#

# Exclude non-ELF targets.

if ![is_elf_format] {
    return
}

if { [istarget spu*-*-*] } {
    set LDFLAGS "$LDFLAGS --local-store 0:0"
}

if { [is_remote host] } then {
    remote_download host merge.ld
}

set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach t $test_list {
    # We need to strip the ".d", but can leave the dirname.
    verbose [file rootname $t]
    run_dump_test [file rootname $t]
}

if { [istarget *-*-linux*] } {
    run_ld_link_tests {
	{"Weak symbols in dynamic objects 1 (support)"
	    "-shared" "" {weak-dyn-1a.s}
	    {}
	    "libweakdyn1a.so"}
	{"Weak symbols in dynamic objects 1 (main test)"
	    "-shared tmpdir/libweakdyn1a.so -Tweak-dyn-1.ld" "" {weak-dyn-1b.s}
	    {{readelf {--relocs --wide} weak-dyn-1.rd}}
	    "libweakdyn1b.so"}
    }
}

if { [check_gc_sections_available] } {
    run_ld_link_tests {
	{"--gc-sections on tls variable"
	    "--gc-section" "" {tls_gc.s} {} "tls_gc"}
    }
}

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

set array_tests {
    {"preinit array" "" "" {preinit.c} "preinit" "preinit.out"}
    {"static preinit array" "-static" "" {preinit.c} "preinit" "preinit.out"}
    {"init array" "" "" {init.c} "init" "init.out"}
    {"static init array" "-static" "" {init.c} "init" "init.out"}
    {"fini array" "" "" {fini.c} "fini" "fini.out"}
    {"static fini array" "-static" "" {fini.c} "fini" "fini.out"}
}

# NetBSD ELF systems do not currently support the .*_array sections.
run_ld_link_exec_tests [list "*-*-netbsdelf*"] $array_tests

catch "exec rm -f tmpdir/preinit tmpdir/init tmpdir/fini" status
