# Expect script for ld-mn10300 tests
#   Copyright (C) 2007 Free Software Foundation
#
# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#

if {!([istarget "am3*-*-*"]) && !([istarget "mn10300*-*-*"]) } {
    return
}

# Set up a list as described in ld-lib.exp

set mn10300_tests {
    {
	"am33 string merging"
	"-relax -Ttext 0x8000074"
	""
	{ "i36434.s" "i36434-2.s" }
	{ {objdump -dz i36434.d} }
	"i36434.x"
    }
    {
	"difference of two same-section symbols"
	"-Ttext 0"
	""
	{ "i112045-1.s" }
	{ {objdump -d i112045-1.d} }
	"i112045-1.x"
    }
    {
	"difference of two same-section symbols where the difference is held in another section"
	"-relax -Ttext 100"
	""
	{ "i112045-3.s" }
	{ {objdump -D i112045-3.d} }
	"i112045-3.x"
    }
    {
	"relaxation and alignment directives"
	"-relax -Ttext 100 -Tbss 300"
	""
	{ "i127740.s" }
	{ {objdump -d i127740.d} }
	"i127740.x"
    }
    {
	"adjustment of symbols due to relaxation"
	"-Tdata 1f -Ttext 0 -relax"
	""
	{ "i135409-1.s" }
	{ {readelf --syms i135409-1.d} }
	"i135409-1.x"
    }
    {
	"adjustment of symbols due to relaxation (with alignment directives)"
	"-Tdata 1f -Ttext 0 -relax"
	""
	{ "i135409-2.s" }
	{ {readelf --syms i135409-2.d} }
	"i135409-2.x"
    }
    {
	"adjustment of symbols due to relaxation (with a symbol in the deleted region)"
	"-Tdata 1f -Ttext 0 -relax"
	""
	{ "i135409-3.s" }
	{ {objdump -d i135409-3.d} }
	"i135409-3.x"
    }
    {
	"adjusting a 16-bit forward branch"
	"-Ti135409-4.t -relax"
	""
	{ "i135409-4.s" }
	{ {objdump -d i135409-4.d} }
	"i135409-4.x"
    }
    {
	"adjusting a 16-bit backward branch"
	"-Ti135409-5.t -relax"
	""
	{ "i135409-5.s" }
	{ {objdump -d i135409-5.d} }
	"i135409-5.x"
    }
    {
	"relaxing offsets into a merged string section"
	"-Ti143317.t -shared -relax"
	""
	{ "i143317.s" }
	{ {objdump -d i143317.d} }
	"i143317.x"
    }
}

run_ld_link_tests $mn10300_tests

if {!([istarget "am3*-*-*"])} {
    return
}

set am33_tests {
    {
	"difference of two same-section symbols (in a shared library)"
	"-shared"
	""
	{ "i112045-2.s" }
	{ {objdump -R i112045-2.d} }
	"i112045-2.x"
    }
}

run_ld_link_tests $am33_tests

proc i126256-test { } {
    global CC
    global ld
    global srcdir
    global subdir

    set tmpdir tmpdir
    set testname "Seg fault whilst linking one shared library into another when relaxation is enabled."

    if {![is_remote host] && [which $CC] == 0} then {
	return
    }

    if { ![ld_compile "$CC -mrelax -fPIC" $srcdir/$subdir/i126256-1.c $tmpdir/i126256-1.o] } {
	unresolved $testname
    	return
    }

    if { ![ld_compile "$CC -mrelax -fPIC" $srcdir/$subdir/i126256-2.c $tmpdir/i126256-2.o] } {
	unresolved $testname
    	return
    }
    
    if { ![ld_simple_link $ld $tmpdir/i126256-1.so "-shared $tmpdir/i126256-1.o -e 0"]} {
        unresolved $testname
    	return
    }

    if { ![ld_simple_link $ld $tmpdir/i126256-2.so "--relax -shared $tmpdir/i126256-2.o $tmpdir/i126256-1.so -e 0"]} {
        fail $testname
    	return
    }

    pass $testname
}

i126256-test
