# Expect script for symbol export classes, ARM variation.
#
# Copyright (C) 2012-2022 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 arm*-*-linux*] && ![istarget arm*-*-uclinuxfdpiceabi] } {
    return
}

set testname "ARM symbol export class test"

if { [istarget arm*-*-linux-*eabi*] || [ istarget arm*-*-uclinuxfdpiceabi] } {
    set emul armelf_linux_eabi
} else {
    set emul armelf_linux
}

# Build an auxiliary shared object with conflicting versioned symbol
# definitions.
run_ld_link_tests [list \
    [list \
	"$testname (auxiliary shared object)" \
	"-m$emul -shared -version-script ../ld-elf/export-class-lib.ver" "" \
	"-EL" \
	{ ../ld-elf/export-class-lib.s } \
	{} \
	"arm-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)" \
	"-m$emul -r" "" \
	"-EL" \
	{ ../ld-elf/export-class-ref.s } \
	{} \
	"arm-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)" \
	"-m$emul -shared -Tdata=0x12340000 tmpdir/arm-export-class-ref-r.o tmpdir/arm-export-class-lib.so" "" \
	"-EL" \
	{ ../ld-elf/export-class-dep.s ../ld-elf/export-class-def.s } \
	{ \
	    { readelf -r arm-export-class.rd } \
	    { readelf "-x .data" arm-export-class.xd } \
	} \
	"arm-export-class.so" \
    ] \
]
