# Expect script for run_dump_test based ld-m68k tests.
#   Copyright (C) 2006-2021 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 --hash-style=sysv" "" "-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 --hash-style=sysv 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 --hash-style=sysv 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
}

run_dump_test "attr-gnu-4-00"
run_dump_test "attr-gnu-4-01"
run_dump_test "attr-gnu-4-02"
run_dump_test "attr-gnu-4-10"
run_dump_test "attr-gnu-4-11"
run_dump_test "attr-gnu-4-12"
run_dump_test "attr-gnu-4-20"
run_dump_test "attr-gnu-4-21"
run_dump_test "attr-gnu-4-22"
