# Expect script for simple PE tests that require the just-built binutils only.
#   Copyright 2004, 2005, 2006, 2007, 2009
#   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"}
	{"TLS directory entry" "" "" "" "tlssec.s"
	 {{objdump -p tlssec64.d}} "tlssec.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"}
	{"TLS directory entry" "" "" "" "tlssec.s"
	 {{objdump -p tlssec32.d}} "tlssec.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"}
	{"TLS directory entry" "" "" "" "tlssec.s"
	 {{objdump -p tlssec32.d}} "tlssec.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"
run_dump_test "orphan_nu"

if {[istarget x86_64-*-mingw*] } {
	run_dump_test "cfi"
} elseif {[istarget i*86-*-cygwin*] || [istarget i*86-*-mingw*] } {
	run_dump_test "cfi32"
}

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
