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

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