# Expect script for common symbol override.
#
# Copyright 2011, 2012 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-ELF targets.
if ![is_elf_format] {
    return
}

# Exclude some more targets; feel free to include your favorite one
# if you like.
if { ![istarget *-*-linux*]
     && ![istarget *-*-nacl*]
     && ![istarget *-*-gnu*] } {
    return
}

set testname "Common symbol override test"

# Define a global symbol.
run_ld_link_tests [list \
    [list \
	"$testname (auxiliary shared object build)" \
	"-shared" \
	"" \
	{ comm-data1.s } \
	{ \
	    { readelf -s comm-data1.sd } \
	} \
	"libcomm-data.so" \
    ] \
]

# Set the pointer size according to the ELF flavor.
set AFLAGS ""
if [is_elf64 "tmpdir/libcomm-data.so"] {
    append AFLAGS " --defsym ELF64=1"
}

setup_xfail "arm*-*-*" "ld/13802"

# 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" \
	"-Ltmpdir -lcomm-data" \
	"$AFLAGS" \
	{ comm-data2.s } \
	{ \
	    { readelf -s comm-data2.sd } \
	    { readelf -r comm-data2.rd } \
	    { readelf "-x .debug_foo" comm-data2.xd } \
	} \
	"comm-data" \
    ] \
    [list \
	"$testname 3a" \
	"-static" \
	"" \
	{ comm-data3a.s comm-data3b.s } \
	{ \
	    { readelf -s comm-data3.sd } \
	} \
	"comm-data3a" \
    ] \
    [list \
	"$testname 3b" \
	"-static" \
	"" \
	{ comm-data3b.s comm-data3a.s } \
	{ \
	    { readelf -s comm-data3.sd } \
	} \
	"comm-data3b" \
    ] \
]
