# Expect script for symbol export classes, VAX variation.
#
# Copyright (C) 2013-2016 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 vax*-*-linux*] } {
    return
}

set testname "VAX 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 ../ld-elf/export-class-lib.ver" "" \
	"-k" \
	{ ../ld-elf/export-class-lib.s } \
	{} \
	"vax-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" "" \
	"" \
	{ ../ld-elf/export-class-ref.s } \
	{} \
	"vax-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/vax-export-class-ref-r.o tmpdir/vax-export-class-lib.so" "" \
	"-k" \
	{ ../ld-elf/export-class-dep.s ../ld-elf/export-class-def.s } \
	[list \
	    [list readelf -r vax-export-class.rd] \
	    [list readelf "-x .data" vax-export-class.xd] \
	] \
	"vax-export-class.so" \
    ] \
]
