# Expect script for simple PE tests that require the just-built binutils only.
#   Copyright 2004, 2006, 2007
#   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.
#

# These tests can only be run on PE/COFF platforms.
if {![is_pecoff_format]} {
    return
}

# This test can only be run on PE/COFF platforms that support .secrel32.
if {[istarget i*86-*-cygwin*]
    || [istarget i*86-*-pe]
    || [istarget i*86-*-mingw*]
    || [istarget x86_64-*-mingw*]
    || [istarget arm-wince-pe] } {

    if {[istarget x86_64-*-mingw*] } {
      set pe_tests {
	{".secrel32" "" "" {secrel1.s secrel2.s}
	 {{objdump -s secrel_64.d}} "secrel.x"}
	{"Empty export table" "" "" "exports.s"
	 {{objdump -p exports64.d}} "exports.dll"}
      }
    } elseif {[istarget i*86-*-cygwin*] } {
      set pe_tests {
	{".secrel32" "--disable-auto-import" "" {secrel1.s secrel2.s}
	 {{objdump -s secrel.d}} "secrel.x"}
	{"Empty export table" "" "" "exports.s"
	 {{objdump -p exports.d}} "exports.dll"}
      }
    } else {
      set pe_tests {
	{".secrel32" "" "" {secrel1.s secrel2.s}
	 {{objdump -s secrel.d}} "secrel.x"}
	{"Empty export table" "" "" "exports.s"
	 {{objdump -p exports.d}} "exports.dll"}
      }
    }

    run_ld_link_tests $pe_tests
}

run_dump_test "image_size"
run_dump_test "export_dynamic_warning"

run_dump_test "longsecn"
run_dump_test "longsecn-1"
run_dump_test "longsecn-2"
run_dump_test "longsecn-3"
run_dump_test "longsecn-4"
run_dump_test "longsecn-5"

run_dump_test "orphan"

set foreign_sym_test {
  {"non-C aligned common" "" "" {non-c-lang-syms.s}
   {{nm -C non-c-lang-syms.d}} "non-c-lang-syms.x"}
}

run_ld_link_tests $foreign_sym_test
