# 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"
     "--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"
     "--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" "--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" "--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"
     "--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" "--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"

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

run_dump_test "compressed1"
run_dump_test "pr12627"
