# Copyright 2012
# Free Software Foundation, Inc.

# 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.  

#
# symver tests
#
proc run_error_test { name opts } {
    global srcdir subdir
    set testname "symver $name"
    set file $srcdir/$subdir/$name
    gas_run ${name}.s $opts ">&dump.out"
    if { [regexp_diff "dump.out" "${file}.l"] } then {
	fail $testname
	verbose "output is [file_contents "dump.out"]" 2
	return
    }
    pass $testname
}

# symver is only supported by ELF targets.
if { [is_elf_format] } then {

    if {[istarget "ia64-*"]} then {
      return
    }
  
    if {[istarget "hppa*64*-*-*"]} then {
      return
    }
  
    # not supported by D30V
    if {[istarget "d30v-*-*"]} {
      return
    }

    # not yet supported by i960
    if {[istarget "i960-*-*"]} {
      return
    }

    run_dump_test "symver0" 
    run_dump_test "symver1" 
    run_error_test "symver2" ""
    run_error_test "symver3" ""
    # We have to comment out symver4 and symver5, which check the
    # missing version name, since some tests in ld/testsuite/ld-elfvers
    # have no version names. We cannot flag an error for the missing
    # version name.
#    run_error_test "symver4" ""
#    run_error_test "symver5" ""
    run_error_test "symver6" ""
}
