# Test DEFINED in a linker script.
# By Ian Lance Taylor, Cygnus Support.
#   Copyright (C) 2001-2019 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] {
    unresolved $testname
    return
}

global LDFLAGS
set saved_LDFLAGS "$LDFLAGS"
if [istarget "x86_64-*-mingw*"] then {
  set LDFLAGS "$LDFLAGS --image-base 0"
}

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

global ASFLAGS
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"
