1# Expect script for symbol export classes. 2# 3# Copyright (C) 2012-2016 Free Software Foundation, Inc. 4# 5# This file is part of the GNU Binutils. 6# 7# This program is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 3 of the License, or 10# (at your option) any later version. 11# 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16# 17# You should have received a copy of the GNU General Public License 18# along with this program; if not, write to the Free Software 19# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 20# MA 02110-1301, USA. 21# 22 23# 24# Written by Maciej W. Rozycki <macro@codesourcery.com> 25# 26 27# Exclude non-ELF targets. 28if { ![is_elf_format] } { 29 return 30} 31 32# Exclude some more targets; feel free to include your favorite one 33# if you like. 34if { ![istarget *-*-linux*] 35 && ![istarget *-*-nacl*] 36 && ![istarget *-*-gnu*] } { 37 return 38} 39 40set testname "Symbol export class test" 41 42# Build an auxiliary shared object with conflicting versioned symbol 43# definitions. 44run_ld_link_tests [list \ 45 [list \ 46 "$testname (auxiliary shared object)" \ 47 "-shared -version-script export-class-lib.ver" "" \ 48 "" \ 49 { export-class-lib.s } \ 50 {} \ 51 "export-class-lib.so" \ 52 ] \ 53] 54 55# Build a static object that pulls symbol definitions. It has to come 56# first before the auxiliary shared object and other static objects on 57# the linker's command line and hence we need to build it separately. 58run_ld_link_tests [list \ 59 [list \ 60 "$testname (initial static object)" \ 61 "-r" "" \ 62 "" \ 63 { export-class-ref.s } \ 64 {} \ 65 "export-class-ref-r.o" \ 66 ] \ 67] 68 69# Build static objects that satisfy symbol dependencies and preempt 70# shared-object symbol definitions, and link all the objects built into 71# the final shared object. The command-line order of objects linked is 72# important to make sure the linker correctly preempts versioned symbols 73# from the auxiliary shared object and is as follows: ref, lib, dep, def. 74# Get a dump to make sure symbol dependencies are resolved internally. 75run_ld_link_tests [list \ 76 [list \ 77 "$testname (final shared object)" \ 78 "-shared -Tdata=0x12340000 tmpdir/export-class-ref-r.o tmpdir/export-class-lib.so" "" \ 79 "" \ 80 { export-class-dep.s export-class-def.s } \ 81 { \ 82 { readelf -s export-class.sd } \ 83 { readelf -V export-class.vd } \ 84 } \ 85 "export-class.so" \ 86 ] \ 87] 88