# Test handling of weak undefined symbols
#   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.

set testname "weak undefined symbols"

# This test only works for ELF targets.  It ought to work for some
# a.out targets, but it doesn't.

if { ![istarget *-*-sysv4*] \
     && ![istarget *-*-unixware*] \
     && ![istarget *-*-elf*] \
     && ![istarget *-*-eabi*] \
     && ![istarget *-*-linux*] \
     && ![istarget *-*-irix5*] \
     && ![istarget *-*-irix6*] \
     && ![istarget *-*-solaris2*] } then {
    return
}

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

if {! [ld_assemble $as $srcdir/$subdir/weak-undef.s tmpdir/weak-undef.o]} then {
    # It's OK if .weak doesn't work on this target.
    unresolved $testname
    return
}

# The linker should accept references to undefined weaks without error,
# and resolve them to zero.

set output_regexp \
".*Contents of section .data:.*0000 00000000 11111111.*"

if {! [ld_simple_link $ld tmpdir/weak-undef "$flags tmpdir/weak-undef.o -T $srcdir/$subdir/weak-undef.t"] } then {
    fail $testname
} else {
    if {[which $objdump] == 0} then {
	unresolved $testname
	return
    }

    verbose -log "$objdump -s tmpdir/weak-undef"
    catch "exec $objdump -s tmpdir/weak-undef" exec_output
    set exec_output [prune_warnings $exec_output]
    verbose -log $exec_output

    if {[regexp $output_regexp $exec_output]} then {
	pass $testname
    } else {
	fail $testname
    }
}
