# Expect script for ld-powerpc tests
#   Copyright (C) 2002-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.
#

if { ![istarget "powerpc*-*-*"]	} {
    return
}

if {[istarget "*-*-vxworks"]} {
    set ppcvxtests {
	{"VxWorks shared library test 1 (default script)" "-shared" ""
	 "-mregnames" {vxworks1-lib.s}
	 {{readelf --segments vxworks1-lib.sd}}
	 "libvxworks1.so"}
	{"VxWorks shared library test 1" "-shared -Tvxworks1.ld" ""
	 "-mregnames" {vxworks1-lib.s}
	 {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
	  {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
	 "libvxworks1.so"}
	{"VxWorks executable test 1 (dynamic)" \
	 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic" ""
	 "-mregnames" {vxworks1.s}
	 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
	 "vxworks1"}
	{"VxWorks executable test 2 (dynamic)" \
	 "-Tvxworks1.ld -q --force-dynamic" ""
	 "-mregnames" {vxworks2.s}
	 {{readelf --segments vxworks2.sd}}
	 "vxworks2"}
	{"VxWorks executable test 2 (static)"
	 "-Tvxworks1.ld" ""
	 "-mregnames" {vxworks2.s}
	 {{readelf --segments vxworks2-static.sd}}
	 "vxworks2"}
	{"VxWorks relax test"
	 "-Tvxworks1.ld --relax -q" ""
	 "-mregnames" {vxworks-relax.s}
	 {{readelf --relocs vxworks-relax.rd}}
	 "vxworks-relax"}
	{"VxWorks relocatable relax test"
	 "-Tvxworks1.ld -r --relax -q" ""
	 "-mregnames" {vxworks-relax-2.s}
	 {{readelf --relocs vxworks-relax-2.rd}}
	 "vxworks-relax-2"}
    }
    run_ld_link_tests $ppcvxtests
    run_dump_test "vxworks1-static"
    return
}

# powerpc ELF only at the moment.  Disable for nto too, even though it
# is ELF, because we pass -melf32ppc to ld and powerpc-nto-ld wants
# -melf32ppcnto.

if { [istarget "*-*-macos*"] || [istarget "*-*-netware*"]
     || [istarget "*-*-pe"] || [istarget "*-*-winnt*"]
     || [istarget "*-*-cygwin*"] || [istarget "*-*-aix*"]
     || [istarget "*-*-beos*"] || [istarget "*-*-lynxos*"]
     || [istarget "*-*-nto*"] } {
    return
}

proc supports_ppc64 { } {
    global ld

    catch "exec $ld --help | grep emulations" tmp
    if [ regexp "elf64l?ppc" $tmp ] then {
	return 1
    } else {
	return 0
    }
}

# 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 ppcelftests {
    {"Reloc section order" "-melf32ppc -shared -z nocombreloc" "" "-a32" {reloc.s}
     {{objdump -hw reloc.d}} "reloc.so"}
    {"APUinfo section processing" "-melf32ppc" ""
     "-a32 -me500" {apuinfo1.s apuinfo-nul.s apuinfo2.s}
     {{readelf -x2 apuinfo.rd}} "apuinfo"}
    {"APUinfo VLE section processing" "-melf32ppc" ""
     "-a32 -me500 -mvle" {apuinfo1.s apuinfo-vle.s apuinfo-vle2.s}
     {{readelf -x2 apuinfo-vle.rd}} "apuinfo-vle"}
    {"APUinfo NULL section processing" "-melf32ppc" ""
     "-a32 -me500" {apuinfo-nul1.s apuinfo-nul.s}
     {{readelf -x2 apuinfo-nul.rd}} "apuinfo"}
    {"TLS32 static exec" "-melf32ppc" "" "-a32"  {tls32.s tlslib32.s}
     {{objdump -dr tls32.d} {objdump -sj.got tls32.g}
      {objdump -sj.tdata tls32.t}}
     "tls32"}
    {"TLS32 helper shared library" "-shared -melf32ppc tmpdir/tlslib32.o" "" "" {}
     {} "libtlslib32.so"}
    {"TLS32 dynamic exec" "-melf32ppc --no-ld-generated-unwind-info tmpdir/tls32.o tmpdir/libtlslib32.so" "" "" {}
     {{readelf -WSsrl tlsexe32.r} {objdump -dr tlsexe32.d}
      {objdump -sj.got tlsexe32.g} {objdump -sj.tdata tlsexe32.t}}
      "tlsexe32"}
    {"TLS32 shared" "-shared -melf32ppc --no-ld-generated-unwind-info tmpdir/tls32.o" "" "" {}
     {{readelf -WSsrl tlsso32.r} {objdump -dr tlsso32.d}
      {objdump -sj.got tlsso32.g} {objdump -sj.tdata tlsso32.t}}
      "tls32.so"}
    {"TLS32 markers" "-melf32ppc" "" "-a32"  {tlsmark32.s tlslib32.s}
     {{objdump -dr tlsmark32.d}}
      "tlsmark32"}
    {"TLS32 opt 1" "-melf32ppc" "" "-a32"  {tlsopt1_32.s tlslib32.s}
     {{objdump -dr tlsopt1_32.d}}
      "tlsopt1_32"}
    {"TLS32 opt 2" "-melf32ppc" "" "-a32"  {tlsopt2_32.s tlslib32.s}
     {{objdump -dr tlsopt2_32.d}}
      "tlsopt2_32"}
    {"TLS32 opt 3" "-melf32ppc" "" "-a32"  {tlsopt3_32.s tlslib32.s}
     {{objdump -dr tlsopt3_32.d}}
      "tlsopt3_32"}
    {"TLS32 opt 4" "-melf32ppc" "" "-a32"  {tlsopt4_32.s tlslib32.s}
     {{objdump -dr tlsopt4_32.d}}
      "tlsopt4_32"}
    {"TLS32 DLL" "-shared -melf32ppc --version-script tlsdll.ver" "" "-a32" {tlsdll_32.s}
     {} "tlsdll32.so"}
    {"TLS32 opt 5" "-melf32ppc --gc-sections --secure-plt tmpdir/tlsdll32.so" "" "-a32"  {tlsopt5_32.s}
     {{objdump -dr tlsopt5_32.d}}
      "tlsopt5_32"}
    {"Shared library with global symbol" "-shared -melf32ppc" "" "-a32" {sdalib.s}
     {} "sdalib.so"}
    {"Dynamic application with SDA" "-melf32ppc tmpdir/sdalib.so" "" "-a32" {sdadyn.s}
     {{objdump -R sdadyn.d}} "sdadyn"}
    {"relaxing" "-melf32ppc --relax -Ttext=0 --defsym far=0x80001234 --defsym near=0x00004320" "" "-a32" "relax.s"
     {{objdump -dr relax.d}}
      "relax"}
    {"relocatable relaxing" "-melf32ppc -r --relax" "" "-a32" "relax.s"
     {{objdump -dr relaxr.d}}
      "relax"}
}

set ppc64elftests {
    {"TLS static exec" "-melf64ppc" "" "-a64"  {tls.s tlslib.s}
     {{objdump -dr tls.d} {objdump -sj.got tls.g} {objdump -sj.tdata tls.t}}
      "tls"}
    {"TLS helper shared library" "-shared -melf64ppc tmpdir/tlslib.o" "" "" {}
     {} "libtlslib.so"}
    {"TLS helper old shared lib" "-shared -melf64ppc" "" "-a64" {oldtlslib.s}
     {} "liboldlib.so"}
    {"TLS dynamic exec" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tls.o tmpdir/libtlslib.so" "" "" {}
     {{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d}
      {objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}}
      "tlsexe"}
    {"TLS dynamic old" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tls.o tmpdir/liboldlib.so" "" "" {}
     {{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d}
      {objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}}
      "tlsexeold"}
    {"TLS shared" "-shared -melf64ppc --no-ld-generated-unwind-info tmpdir/tls.o" "" "" {}
     {{readelf -WSsrl tlsso.r} {objdump -dr tlsso.d}
      {objdump -sj.got tlsso.g} {objdump -sj.tdata tlsso.t}}
      "tls.so"}
    {"TLSTOC static exec" "-melf64ppc tmpdir/tlslib.o " "" "-a64"  {tlstoc.s}
     {{objdump -dr tlstoc.d} {objdump -sj.got tlstoc.g}
      {objdump -sj.tdata tlstoc.t}}
      "tlstoc"}
    {"TLSTOC dynamic exec" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tlstoc.o tmpdir/libtlslib.so" ""
     "" {}
     {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d}
      {objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}}
      "tlsexetoc"}
    {"TLSTOC dynamic old" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tlstoc.o tmpdir/liboldlib.so" ""
     "" {}
     {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d}
      {objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}}
      "tlsexetocold"}
    {"TLSTOC shared" "-shared -melf64ppc --no-ld-generated-unwind-info tmpdir/tlstoc.o" "" "" {}
     {{readelf -WSsrl tlstocso.r} {objdump -dr tlstocso.d}
      {objdump -sj.got tlstocso.g} {objdump -sj.tdata tlstocso.t}}
      "tlstoc.so"}
    {"TLS markers" "-melf64ppc" "" "-a64"  {tlsmark.s tlslib.s}
     {{objdump -dr tlsmark.d}}
      "tlsmark"}
    {"TLS opt 1" "-melf64ppc" "" "-a64"  {tlsopt1.s tlslib.s}
     {{objdump -dr tlsopt1.d}}
      "tlsopt1"}
    {"TLS opt 2" "-melf64ppc" "" "-a64"  {tlsopt2.s tlslib.s}
     {{objdump -dr tlsopt2.d}}
      "tlsopt2"}
    {"TLS opt 3" "-melf64ppc" "" "-a64"  {tlsopt3.s tlslib.s}
     {{objdump -dr tlsopt3.d}}
      "tlsopt3"}
    {"TLS opt 4" "-melf64ppc" "" "-a64"  {tlsopt4.s tlslib.s}
     {{objdump -dr tlsopt4.d}}
      "tlsopt4"}
    {"TLS DLL" "-shared -melf64ppc --version-script tlsdll.ver" "" "-a64" {tlsdll.s}
     {} "tlsdll.so"}
    {"TLS opt 5" "-melf64ppc --gc-sections tmpdir/tlsdll.so" "" "-a64"  {tlsopt5.s}
     {{objdump -dr tlsopt5.d}}
      "tlsopt5"}
    {"sym@tocbase" "-shared -melf64ppc" "" "-a64" {symtocbase-1.s symtocbase-2.s}
	{{objdump -dj.data symtocbase.d}} "symtocbase.so"}
    {"TOC opt" "-melf64ppc" "" "-a64"  {tocopt.s}
	{{ld tocopt.out} {objdump -s tocopt.d}} "tocopt"}
    {"TOC opt2" "-melf64ppc --defsym x=2" "" "-a64"  {tocopt2.s}
	{{ld tocopt2.out} {objdump -s tocopt2.d}} "tocopt2"}
    {"TOC opt3" "-melf64ppc -no-keep-memory --defsym x=2" "" "-a64"  {tocopt3.s}
	{{objdump -s tocopt3.d}} "tocopt3"}
    {"TOC opt4" "-melf64ppc -no-keep-memory --defsym x=2" "" "-a64"
        {tocopt4a.s tocopt4b.s} {{objdump -s tocopt4.d}} "tocopt4"}
    {"TOC opt5" "-melf64ppc" "" "-a64"  {tocopt5.s}
	{{objdump -s tocopt5.d}} "tocopt5"}
    {"TOC opt6" "-melf64ppc" "" "-a64"  {tocopt6a.s tocopt6b.s tocopt6c.s}
	{{objdump -d tocopt6.d}} "tocopt6"}
    {"TOC opt7" "-melf64ppc" "" "-a64 -mpower9"  {tocopt7.s}
	{{ld tocopt7.out} {objdump -s tocopt7.d}} "tocopt7"}
    {"TOC opt8" "-melf64ppc" "" "-a64 -mpower9"  {tocopt8.s}
	{{objdump -s tocopt8.d}} "tocopt8"}
    {"ambig shared v1" "-shared -melf64ppc" "" "-a64" {funv1.s} {} "funv1.so"}
    {"ambig shared v2" "-shared -melf64ppc" "" "-a64" {funv2.s} {} "funv2.so"}
}

set ppceabitests {
    {"VLE multiple segments 1" "-T vle-multiseg-1.ld" ""
     "-mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-1.d}} "vle-multiseg-1"}
    {"VLE multiple segments 2" "-T vle-multiseg-2.ld" ""
     "-mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-2.d}} "vle-multiseg-2"}
    {"VLE multiple segments 3" "-T vle-multiseg-3.ld" ""
     "-mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-3.d}} "vle-multiseg-3"}
    {"VLE multiple segments 4" "-T vle-multiseg-4.ld" ""
     "-mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-4.d}} "vle-multiseg-4"}
    {"VLE multiple segments 5" "-T vle-multiseg-5.ld" ""
     "-mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-5.d}} "vle-multiseg-5"}
    {"VLE relocations 1" "-T vle.ld" ""
     "-mvle" {vle-reloc-1.s vle-reloc-def-1.s}
    {{objdump "-Mvle -d" vle-reloc-1.d}} "vle-reloc-1"}
    {"VLE relocations 2" "-T vle.ld" ""
     "-mvle" {vle-reloc-2.s vle-reloc-def-2.s}
    {{objdump "-Mvle -d" vle-reloc-2.d}} "vle-reloc-2"}
    {"VLE relocations 3" "-T vle.ld" ""
     "-mvle" {vle-reloc-3.s vle-reloc-def-3.s}
    {{objdump "-Mvle -d" vle-reloc-3.d}} "vle-reloc-3"}
}

if [istarget "powerpc*le*-*-*"] then {
    set options_regsub(ld) {{-melf([3264]*)ppc} {-melf\1lppc}}

    for {set i 0} {$i < [llength $ppcelftests]} {incr i} {
	set line [lindex $ppcelftests $i]
	set ld_options [lindex $line 1]
	regsub -all elf32ppc $ld_options elf32lppc ld_options
	set line [lreplace $line 1 1 $ld_options]
	set ppcelftests [lreplace $ppcelftests $i $i $line]
    }

    if [ supports_ppc64 ] then {
	for {set i 0} {$i < [llength $ppc64elftests]} {incr i} {
	    set line [lindex $ppc64elftests $i]
	    set ld_options [lindex $line 1]
	    regsub -all elf64ppc $ld_options elf64lppc ld_options
	    set line [lreplace $line 1 1 $ld_options]
	    set ppc64elftests [lreplace $ppc64elftests $i $i $line]
	}
    }
}

run_ld_link_tests $ppcelftests

if [ supports_ppc64 ] then {
    run_ld_link_tests $ppc64elftests
    run_dump_test "relbrlt"
    run_dump_test "elfv2so"
    run_dump_test "elfv2exe"
    run_dump_test "elfv2-2so"
    run_dump_test "elfv2-2exe"
    run_dump_test "ambiguousv1"
    run_dump_test "ambiguousv1b"
    run_dump_test "ambiguousv2"
    run_dump_test "ambiguousv2b"
    run_dump_test "defsym"
    run_dump_test "tocvar"
    run_dump_test "tocnovar"
    run_dump_test "tlsld"
    run_dump_test "relocsort"
    run_dump_test "addpcis"
}

run_dump_test "tlsld32"

if { [istarget "powerpc*-eabi*"] } {
    run_ld_link_tests $ppceabitests
}

run_dump_test "plt1"
run_dump_test "sdabase"
run_dump_test "sdabase2"

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-03"
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-13"
run_dump_test "attr-gnu-4-20"
run_dump_test "attr-gnu-4-21"
run_dump_test "attr-gnu-4-22"
run_dump_test "attr-gnu-4-23"
run_dump_test "attr-gnu-4-31"
run_dump_test "attr-gnu-4-32"
run_dump_test "attr-gnu-4-33"

run_dump_test "attr-gnu-8-11"
run_dump_test "attr-gnu-8-23"
run_dump_test "attr-gnu-8-31"

run_dump_test "attr-gnu-12-11"
run_dump_test "attr-gnu-12-21"

run_dump_test "vle-multiseg-6"

run_dump_test "ppc476-shared"
run_dump_test "ppc476-shared2"
