# Expect script for ld-powerpc tests
#   Copyright (C) 2002-2018 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 --hash-style=sysv -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 --hash-style=sysv" ""
	 "-mregnames" {vxworks1.s}
	 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
	 "vxworks1"}
	{"VxWorks executable test 2 (dynamic)" \
	 "-Tvxworks1.ld -q --force-dynamic --hash-style=sysv" ""
	 "-mregnames" {vxworks2.s}
	 {{readelf --segments vxworks2.sd}}
	 "vxworks2"}
	{"VxWorks executable test 2 (static)"
	 "-Tvxworks1.ld --hash-style=sysv" ""
	 "-mregnames" {vxworks2.s}
	 {{readelf --segments vxworks2-static.sd}}
	 "vxworks2"}
	{"VxWorks relax test"
	 "-Tvxworks1.ld --relax -q --hash-style=sysv" ""
	 "-mregnames" {vxworks-relax.s}
	 {{readelf --relocs vxworks-relax.rd}}
	 "vxworks-relax"}
	{"VxWorks relocatable relax test"
	 "-Tvxworks1.ld -r --relax -q --hash-style=sysv" ""
	 "-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 "*-*-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 (markers)" "-melf32ppc" ""
     "-a32 --defsym TLSMARK=1"  {tls32.s tlslib32.s}
     {{objdump -dr tls32.d} {objdump -sj.got tls32.g}
      {objdump -sj.tdata tls32.t}}
     "tls32m"}
    {"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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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 -shared --gc-sections --secure-plt --no-plt-align 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}}
     "rrelax"}
    {"relocatable relaxing large" "-melf32ppc -r --relax" "" "-a32" "relax.s big.s"
     {{objdump -dr relaxrl.d}}
     "rrelax"}
}

set ppc64elftests {
    {"TLS static exec (markers)" "-melf64ppc --no-plt-align" ""
     "-a64 --defsym TLSMARK=1"  {tls.s tlslib.s}
     {{objdump -dr tls.d} {objdump -sj.got tls.g} {objdump -sj.tdata tls.t}}
     "tlsm"}
    {"TLS static exec" "-melf64ppc --no-plt-align" "" "-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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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-plt-align --no-ld-generated-unwind-info --hash-style=sysv 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 -shared --hash-style=both --gc-sections --no-plt-localentry tmpdir/tlsdll.so" "" "-a64"  {tlsopt5.s}
     {{objdump -dr tlsopt5.d} {readelf -wf tlsopt5.wf}}
     "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"}
    {"tocsave lib" "-shared -melf64ppc" "" "-a64" {tocsavelib.s}
	{} "tocsavelib.so"}
    {"tocsave1 shared" "-melf64ppc" "tmpdir/tocsavelib.so" "-a64" {tocsave1.s}
	{{objdump -dr tocsave1s.d}} "tocsave1s"}
    {"tocsave1 static" "-melf64ppc" "tmpdir/tocsavelib.o" "-a64" {tocsave1.s}
	{{objdump -dr tocsave1a.d}} "tocsave1a"}
    {"tocsave2 shared" "-melf64ppc" "tmpdir/tocsavelib.so" "-a64" {tocsave2.s}
	{{objdump -dr tocsave2s.d}} "tocsave2s"}
    {"tocsave2 static" "-melf64ppc" "tmpdir/tocsavelib.o" "-a64" {tocsave2.s}
	{{objdump -dr tocsave2a.d}} "tocsave2a"}
    {"ambig shared v1" "-shared -melf64ppc" "" "-a64" {funv1.s} {} "funv1.so"}
    {"ambig shared v2" "-shared -melf64ppc" "" "-a64" {funv2.s} {} "funv2.so"}
    {"notoc ext" "" "" "-a64" {ext.s} {} ""}
    {"notoc" "-melf64ppc --no-plt-localentry -T ext.lnk" "" "-a64" {notoc.s}
	{{objdump -d notoc.d} {readelf {-wf -W} notoc.wf}} "notoc"}
}

set ppceabitests {
    {"VLE multiple segments 1" "-melf32ppc -T vle-multiseg-1.ld" ""
     "-a32 -mbig -mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-1.d}} "vle-multiseg-1"}
    {"VLE multiple segments 2" "-melf32ppc -T vle-multiseg-2.ld" ""
     "-a32 -mbig -mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-2.d}} "vle-multiseg-2"}
    {"VLE multiple segments 3" "-melf32ppc -T vle-multiseg-3.ld" ""
     "-a32 -mbig -mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-3.d}} "vle-multiseg-3"}
    {"VLE multiple segments 4" "-melf32ppc -T vle-multiseg-4.ld" ""
     "-a32 -mbig -mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-4.d}} "vle-multiseg-4"}
    {"VLE multiple segments 5" "-melf32ppc -T vle-multiseg-5.ld" ""
     "-a32 -mbig -mregnames -mvle" {vle-multiseg.s}
    {{readelf "-l" vle-multiseg-5.d}} "vle-multiseg-5"}
    {"VLE relocations 1" "-melf32ppc -T vle.ld" ""
     "-a32 -mbig -mvle" {vle-reloc-1.s vle-reloc-def-1.s}
    {{objdump "-Mvle -d" vle-reloc-1.d}} "vle-reloc-1"}
    {"VLE relocations 2" "-melf32ppc -T vle.ld" ""
     "-a32 -mbig -mvle" {vle-reloc-2.s vle-reloc-def-2.s}
    {{objdump "-Mvle -d" vle-reloc-2.d}} "vle-reloc-2"}
    {"VLE relocations 3" "-melf32ppc -T vle.ld" ""
     "-a32 -mbig -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 "dotsym1"
    run_dump_test "dotsym2"
    run_dump_test "dotsym3"
    run_dump_test "dotsym4"
    run_dump_test "pr23937"
}

run_dump_test "tlsld32"

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"
