# Test that the linker reports undefined symbol line number correctly.
#
#   Copyright (C) 2007-2016 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.

if { !([istarget "x86_64-*-elf*"]
       || [istarget "x86_64-*-nacl*"]
       || [istarget "x86_64-*-linux*"]) } {
    return
}

if [istarget "*-*-nacl*"] {
    set emul "elf_x86_64_nacl"
} else {
    set emul "elf_x86_64"
}

set testline "undefined line"

if ![ld_assemble $as "--64 $srcdir/$subdir/undefined.s" tmpdir/undefined.o] {
    verbose "Unable to assemble test file!" 1
    unresolved $testline
    return
}

remote_file host delete "tmpdir/undefined"

# Using -e start prevents the SunOS linker from trying to build a
# shared library.
send_log "$ld -e start -m$emul -o tmpdir/undefined tmpdir/undefined.o\n"
set exec_output [run_host_cmd "$ld" "-e start -m$emul -o tmpdir/undefined tmpdir/undefined.o"]

send_log "$exec_output\n"
verbose "$exec_output"

proc checkund { string testname } {
    global exec_output

    if [string match "*$string*" $exec_output] {
	pass $testname
    } else {
	fail $testname
    }
}

set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"

checkund $ml $testline
