# Expect script for run_dump_test based ld-m68k tests.
#   Copyright (C) 2006-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.
#
# Test m68k object merging

if { ![is_elf_format] || ![istarget m68k-*-*] } {
    return
}

# List contains test-items with 3 items followed by 2 lists:
# 0:name 1:ld early options 2:ld late options 3:assembler options
# 4:filenames of assembler files 5: action and options. 6: name of output file

# Actions:
# objdump: Apply objdump options on result.  Compare with regex (last arg).
# nm: Apply nm options on result.  Compare with regex (last arg).
# readelf: Apply readelf options on result.  Compare with regex (last arg).

set m68k_mergeok_tests {
    {"merge isa-a isa-a:nodiv" "-T merge.ld" "" ""
	{isaa.s isaa-nodiv.s} {{objdump -p isaa.d}} "isaa-nodiv"}
    {"merge isa-a isa-b" "-T merge.ld" "" ""
	{isaa.s isab.s} {{objdump -p isab.d}} "isab"}
    {"merge isa-a isa-aplus" "-T merge.ld" "" ""
	{isaa.s isaaplus.s} {{objdump -p isaaplus.d}} "isaplus"}
    {"merge isa-b isa-b:nousp" "-T merge.ld" "" ""
	{isab.s isab-nousp.s} {{objdump -p isab.d}} "isab"}
    {"merge isa-a isa-a:mac" "-T merge.ld" "" ""
	{isaa.s isaa-mac.s} {{objdump -p isaa-mac.d}} "isaa-mac"}
    {"merge isa-b isa-b:float" "-T merge.ld" "" ""
	{isab.s isab-float.s} {{objdump -p isab-float.d}} "isab-float"}}

run_ld_link_tests $m68k_mergeok_tests

run_dump_test "merge-error-1a"
run_dump_test "merge-error-1b"
run_dump_test "merge-error-1c"
run_dump_test "merge-error-1d"
run_dump_test "merge-error-1e"
run_dump_test "merge-ok-1a"
run_dump_test "merge-ok-1b"
run_dump_test "merge-ok-1c"

foreach { id sources } { a { plt1.s } b { plt1-empty.s plt1.s } } {
    foreach arch { 68020 cpu32 isab isac } {
	run_ld_link_tests [list \
	    [list "PLT 1$id ($arch)" "-shared -T plt1.ld" "" "-m$arch" \
		 $sources [list [list objdump -dr plt1-$arch.d]] \
		 plt1-${id}-${arch}.so]]
    }
}

if { [istarget m68k-*-linux*] } then {
    run_dump_test "tls-gd-1"
    run_dump_test "tls-gd-2"
    run_dump_test "tls-gd-ie-1"
    run_dump_test "tls-ie-1"
    run_dump_test "tls-ld-1"
    run_dump_test "tls-ld-2"

    set m68k_tls_tests {
	{"TLS definition"
	    "-shared" "" "" {tls-def-1.s}
	    {{nm -ngD tls-def-1.d}}
	    "tls-def-1.so"}
	{"TLS direct symbol use"
	    "-shared tmpdir/tls-def-1.so" "" "" {tls-gd-1.s}
	    {{nm -ngD tls-gd-1.d2} {readelf -d tls-gd-1.d3}}
	    "tls-gd-1.so"}
	{"TLS indirect symbol use"
	    "--copy-dt-needed-entries tmpdir/tls-gd-1.so -rpath-link ./" "" "" {tls-main-1.s}
	    {{readelf -d tls-main-1.d}}
	    "tls-main-1"}}

    run_ld_link_tests $m68k_tls_tests
}
