# Expect script for symbol export classes.
#
# Copyright 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 "Symbol export class test"

# Build an auxiliary shared object with conflicting versioned symbol
# definitions.
run_ld_link_tests [list \
    [list \
	"$testname (auxiliary shared object)" \
	"-shared -version-script export-class-lib.ver" "" \
	"" \
	{ export-class-lib.s } \
	{} \
	"export-class-lib.so" \
    ] \
]

# Build a static object that pulls symbol definitions.  It has to come
# first before the auxiliary shared object and other static objects on
# the linker's command line and hence we need to build it separately.
run_ld_link_tests [list \
    [list \
	"$testname (initial static object)" \
	"-r" "" \
	"" \
	{ export-class-ref.s } \
	{} \
	"export-class-ref-r.o" \
    ] \
]

# Build static objects that satisfy symbol dependencies and preempt
# shared-object symbol definitions, and link all the objects built into
# the final shared object.  The command-line order of objects linked is
# important to make sure the linker correctly preempts versioned symbols
# from the auxiliary shared object and is as follows: ref, lib, dep, def.
# Get a dump to make sure symbol dependencies are resolved internally.
run_ld_link_tests [list \
    [list \
	"$testname (final shared object)" \
	"-shared -Tdata=0x12340000 tmpdir/export-class-ref-r.o tmpdir/export-class-lib.so" "" \
	"" \
	{ export-class-dep.s export-class-def.s } \
	{ \
	    { readelf -s export-class.sd } \
	    { readelf -V export-class.vd } \
	} \
	"export-class.so" \
    ] \
]
