# Test DEFINED in a linker script.
# By Ian Lance Taylor, Cygnus Support.
#   Copyright (C) 2001-2021 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.

set testname "DEFINED"
set prms_id 5699

if ![ld_assemble $as $srcdir/$subdir/defined.s tmpdir/def.o] {
    unsupported $testname
    return
}

set saved_LDFLAGS "$LDFLAGS"
if { [is_pecoff_format] } then {
    set LDFLAGS "$LDFLAGS --image-base 0"
} elseif { [is_xcoff_format] } then {
    set LDFLAGS "$LDFLAGS -bnogc"
}

if { ![ld_link $ld tmpdir/def "$LDFLAGS -T $srcdir/$subdir/defined.t tmpdir/def.o"] } {
    fail $testname
} elseif { ![ld_nm $nm "" tmpdir/def] } {
    fail $testname
} elseif { ![info exists nm_output(value1)]
	   || ![info exists nm_output(value2)]} {
    send_log "bad output from nm\n"
    verbose "bad output from nm"
    fail $testname
} elseif {$nm_output(value1) != 1} {
    send_log "value1 == $nm_output(value1)\n"
    verbose "value1 == $nm_output(value1)"
    fail $testname
} elseif {$nm_output(value2) != 2} {
    send_log "value2 == $nm_output(value2)\n"
    verbose "value2 == $nm_output(value2)"
    fail $testname
} else {
    pass $testname
}

set saved_ASFLAGS "$ASFLAGS"
if { [is_elf_format] \
     && ([istarget "i?86-*-*"] || [istarget "x86_64-*-*"]) } {
    set ASFLAGS "$ASFLAGS -mx86-used-note=no"
}

set prms_id 0
run_dump_test "defined2"
run_dump_test "defined3"
run_dump_test "defined4"
if ![is_aout_format] {
    run_dump_test "defined5"
}
if [is_elf_format] {
    run_dump_test "defined6"
}
run_dump_test "pr24008"
set LDFLAGS "$saved_LDFLAGS"
set ASFLAGS "$saved_ASFLAGS"
