# Expect script for ld-i386 tests
#   Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009, 2010
#   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.
#

# Test i386 linking; all types of relocs.  This tests the assembler and
# tools like objdump as well as the linker.

if {[istarget "i?86-*-vxworks"]} {
    set i386tests {
	{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
	 "" {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"
	 "" {vxworks1.s}
	 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
	 "vxworks1"}
	{"VxWorks executable test 2 (dynamic)" \
	 "-Tvxworks1.ld -q --force-dynamic"
	 "" {vxworks2.s}
	 {{readelf --segments vxworks2.sd}}
	 "vxworks2"}
	{"VxWorks executable test 2 (static)"
	 "-Tvxworks1.ld"
	 "" {vxworks2.s}
	 {{readelf --segments vxworks2-static.sd}}
	 "vxworks2"}
    }
    run_ld_link_tests $i386tests
    run_dump_test "vxworks1-static"
}

if [istarget "*-*-go32*"] {
    run_ld_link_tests {{"go32 stub" "" "" {zero.s} {} "go32stub"}}

    set src "tmpdir/go32stub"
    set dest "tmpdir/go32stub-copy"

    set test "go32 stub patch the source"
    set fi [open $src r+]
    fconfigure $fi -translation binary
    if {[read $fi 2] != "MZ"} {
	fail $test
    } else {
	pass $test
	seek $fi 0x40
	puts -nonewline $fi "objcopy-test-go32stub"
    }
    close $fi

    set test "go32 stub objcopy"
    set status [remote_exec build $OBJCOPY "$OBJCOPYFLAGS $src $dest"]
    set exec_output [lindex $status 1]
    set exec_output [prune_warnings $exec_output]
    if [string match "" $exec_output] then {
	pass $test
    } else {
	send_log "$exec_output\n"
	verbose "$exec_output" 1
	fail $test
    }

    # cmp would compare the whole files and some data after the initial exe
    # stub could differ.
    set test "go32 stub comparison after objcopy"
    set fi [open $src]
    fconfigure $fi -translation binary
    set src_stub [read $fi 2048]
    close $fi
    set fi [open $dest]
    fconfigure $fi -translation binary
    set dest_stub [read $fi 2048]
    close $fi
    if {$src_stub == $dest_stub} {
	pass $test
    } else {
	fail $test
    }
}

if { !([istarget "i?86-*-elf*"]		
       || (([istarget "i?86-*-linux*"]
	    || [istarget "i?86-*-gnu*"])
	   && ![istarget "*-*-*aout*"]
	   && ![istarget "*-*-*oldld*"])
       || [istarget "x86_64-*-linux*"]
       || [istarget "amd64-*-linux*"]) } {
    return
}

# List contains test-items with 3 items followed by 2 lists:
# 0:name 1:ld options 2:assembler options
# 3:filenames of assembler files 4: action and options. 5: 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 i386tests {
    {"TLS -fpic -shared transitions"
     "-shared -melf_i386 --no-ld-generated-unwind-info"
     "--32" {tlspic1.s tlspic2.s}
     {{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd}
      {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
      "libtlspic.so"}
    {"TLS descriptor -fpic -shared transitions"
     "-shared -melf_i386 --no-ld-generated-unwind-info"
     "--32" {tlsdesc.s tlspic2.s}
     {{readelf -Ssrl tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
      {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}}
      "libtlsdesc.so"}
    {"Helper shared library" "-shared -melf_i386"
     "--32" {tlslib.s} {} "libtlslib.so"}
    {"TLS -fpic and -fno-pic exec transitions"
     "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info"
     "--32" {tlsbinpic.s tlsbin.s}
     {{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
      {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
      "tlsbin"}
    {"TLS descriptor -fpic and -fno-pic exec transitions"
     "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info"
     "--32" {tlsbindesc.s tlsbin.s}
     {{readelf -Ssrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
      {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
      "tlsbindesc"}
    {"TLS -fno-pic -shared" "-shared -melf_i386 --no-ld-generated-unwind-info"
     "--32" {tlsnopic1.s tlsnopic2.s}
     {{readelf -Ssrl tlsnopic.rd} {objdump -drj.text tlsnopic.dd}
      {objdump -sj.got tlsnopic.sd}} "libtlsnopic.so"}
    {"TLS with global dynamic and descriptors"
     "-shared -melf_i386 --no-ld-generated-unwind-info"
     "--32" {tlsgdesc.s}
     {{readelf -Ssrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
      "libtlsgdesc.so"}
    {"TLS in debug sections" "-melf_i386"
     "--32" {tlsg.s}
     {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
    {"TLS @indntpoff with %eax" "-melf_i386" "--32" {tlsindntpoff.s}
     {{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"}
    {"Reloc section order" "-shared -melf_i386 -z nocombreloc" "--32"
     {reloc.s} {{objdump -hw reloc.d}} "reloc.so"}
    {"Basic --emit-relocs support" "-shared -melf_i386 --emit-relocs" "--32"
     {emit-relocs.s} {{readelf --relocs emit-relocs.d}} "emit-relocs.so"}
    {"-z combreloc relocation sections" "-shared -melf_i386 -z combreloc"
     "--32" {combreloc.s} {{readelf -r combreloc.d}} "combreloc.so"}
    {"TLS GD->LE transition" "-melf_i386"
     "--32" {tlsgd1.s}
     {{objdump -dwr tlsgd1.dd}} "tlsgd1"}
    {"TLS LD->LE transition" "-melf_i386"
     "--32" {tlsld1.s}
     {{objdump -dwr tlsld1.dd}} "tlsld1"}
    {"TLS IE->LE transition" "-melf_i386"
     "--32" {tlsie1.s}
     {{objdump -dwr tlsie1.dd}} "tlsie1"}
}

run_ld_link_tests $i386tests

run_dump_test "abs"
run_dump_test "pcrel8"
run_dump_test "pcrel16"
run_dump_test "pcrel16abs"
run_dump_test "alloc"
run_dump_test "warn1"
run_dump_test "tlsgd2"
run_dump_test "tlsie2"
run_dump_test "tlsie3"
run_dump_test "tlsie4"
run_dump_test "tlsie5"
run_dump_test "hidden1"
run_dump_test "hidden2"
run_dump_test "hidden3"
run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
run_dump_test "tlspie1"
run_dump_test "tlspie2"
run_dump_test "nogot1"
run_dump_test "nogot2"
run_dump_test "discarded1"
run_dump_test "pr12718"
run_dump_test "pr12921"

if { !([istarget "i?86-*-linux*"]
       || [istarget "i?86-*-gnu*"]
       || [istarget "x86_64-*-linux*"]) } {
    return
}

run_dump_test "compressed1"
run_dump_test "pr12627"
