# Expect script for ld-powerpc tests
#   Copyright 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
#   Free Software Foundation
#
# 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 [ string match "*elf64ppc*" $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 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"}
    {"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"}
    {"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"}
}

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) {-melf32ppc -melf32lppc}

    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 $ppcelftests $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"
}

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

run_dump_test "plt1"

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-14"
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-24"
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-4-34"
run_dump_test "attr-gnu-4-41"

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"
