# Expect script for common symbol override, MIPS variation.
#
#   Copyright 2011  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.
#

#
# Written by Maciej W. Rozycki <macro@codesourcery.com>
#

# Exclude non-Linux targets; feel free to include your favorite one
# if you like.
if ![istarget mips*-*-linux*] {
    return
}

proc mips_comm_data_test { abi flag emul reloc } {

    set testname "MIPS $abi/$reloc common symbol override test"

    # There's no "-z copyreloc" option, deal with it.
    set ZFLAG [string map [list copyreloc "" nocopyreloc "-z $reloc"] $reloc]
    set AFLAGS "$flag -EB"
    set LDFLAGS "-m$emul"

    # Define a global symbol.
    run_ld_link_tests [list \
	[list \
	    "$testname (auxiliary shared object build)" \
	    "$LDFLAGS -shared" "" \
	    "$AFLAGS -call_shared" \
	    { ../ld-elf/comm-data1.s } \
	    { \
		{ readelf -s ../ld-elf/comm-data1.sd } \
	    } \
	  "libmips-$abi-$reloc-comm-data.so" \
	] \
    ]

    # Set the pointer size according to the ABI.
    if { $abi == "n64" } {
	append AFLAGS " --defsym ELF64=1"
    }

    # Verify that a common symbol has been converted to an undefined
    # reference to the global symbol of the same name defined above
    # and that the debug reference has been dropped.
    run_ld_link_tests [list \
	[list \
	    "$testname" \
	    "$LDFLAGS $ZFLAG -Ltmpdir -lmips-$abi-$reloc-comm-data" "" \
	    "$AFLAGS -call_nonpic" \
	    { ../ld-elf/comm-data2.s } \
	    { \
		{ readelf -s ../ld-elf/comm-data2.sd } \
		{ readelf -r ../ld-elf/comm-data2.rd } \
		{ readelf "-x .debug_foo" ../ld-elf/comm-data2.xd } \
	    } \
	    "mips-$abi-$reloc-comm-data" \
	] \
    ]
}

# For targets that default to a specific ISA (instead of "from-abi"),
# the 64-bit -march option is required to override it, like for
# "mipsisa32r2el-*-*".
set abis { o32 -32 elf32btsmip n32 "-n32 -march=mips3" elf32btsmipn32 n64 "-64 -march=mips3" elf64btsmip }
set relocs { copyreloc nocopyreloc }
foreach { abi flag emul } $abis {
    foreach reloc $relocs {
	mips_comm_data_test $abi $flag $emul $reloc
    }
}
