| # Expect script for --exclude-libs tests | |
| # Copyright (C) 2004-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. | |
| # Make sure that ld can hide symbols from libraries when building a shared | |
| # library. | |
| # This test can only be run on ELF platforms. | |
| if ![is_elf_format] { | |
| return | |
| } | |
| # No shared lib support on this target. | |
| if { [istarget "mcore-*-*"] } { | |
| return | |
| } | |
| set as_opt "" | |
| # This target requires extra as options when building code for shared | |
| # libraries. | |
| if { [istarget "tic6x-*-*"] } { | |
| set as_opt "-mpic -mpid=near" | |
| } | |
| global ar | |
| global as | |
| global ld | |
| global nm | |
| global nm_output | |
| set test1 "ld link shared library" | |
| set test2 "ld export symbols from archive" | |
| set test3 "ld link shared library with --exclude-libs" | |
| set test4 "ld exclude symbols from archive - --exclude-libs libexclude" | |
| set test5 "ld exclude symbols from archive - --exclude-libs libexclude.a" | |
| set test6 "ld exclude symbols from archive - --exclude-libs ALL" | |
| set test7 "ld exclude symbols from archive - --exclude-libs foo:libexclude.a" | |
| set test8 "ld exclude symbols from archive - --exclude-libs foo,libexclude.a" | |
| set test9 "ld don't exclude symbols from archive - --exclude-libs foo:bar" | |
| if { ![ld_assemble_flags $as $as_opt $srcdir/$subdir/exclude1.s tmpdir/exclude1.o ] | |
| || ![ld_assemble_flags $as $as_opt $srcdir/$subdir/exclude2.s tmpdir/exclude2.o] } { | |
| unresolved $test1 | |
| return | |
| } | |
| remote_file host delete "tmpdir/libexclude.a" | |
| set catch_output [run_host_cmd "$ar" "cq tmpdir/libexclude.a tmpdir/exclude2.o"] | |
| if {![string match "" $catch_output]} { | |
| unresolved $test1 | |
| return | |
| } | |
| # Test that the symbol is normally exported. | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } { | |
| pass $test1 | |
| } else { | |
| if [string match "*shared not supported*" $link_output] { | |
| unsupported "$test1 - -shared is not supported by this target" | |
| } else { | |
| fail $test1 | |
| } | |
| return | |
| } | |
| if ![ld_nm $nm "-D" tmpdir/exclude.so] { | |
| unresolved $test2 | |
| } elseif { [info exists nm_output(exclude_common)] | |
| && [info exists nm_output(exclude_sym)] } { | |
| pass $test2 | |
| } else { | |
| fail $test2 | |
| } | |
| # Test --exclude-libs libexclude | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } { | |
| pass $test3 | |
| } else { | |
| fail $test3 | |
| } | |
| if ![ld_nm $nm "-D" tmpdir/exclude.so] { | |
| unresolved $test4 | |
| } elseif { ! [info exists nm_output(exclude_common)] | |
| && ! [info exists nm_output(exclude_sym)] } { | |
| pass $test4 | |
| } else { | |
| fail $test4 | |
| } | |
| # Test alternate spellings of --exclude-libs | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] | |
| && [ld_nm $nm "-D" tmpdir/exclude.so] | |
| && ! [info exists nm_output(exclude_common)] | |
| && ! [info exists nm_output(exclude_sym)] } { | |
| pass $test5 | |
| } else { | |
| fail $test5 | |
| } | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs ALL --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] | |
| && [ld_nm $nm "-D" tmpdir/exclude.so] | |
| && ! [info exists nm_output(exclude_common)] | |
| && ! [info exists nm_output(exclude_sym)] } { | |
| pass $test6 | |
| } else { | |
| fail $test6 | |
| } | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] | |
| && [ld_nm $nm "-D" tmpdir/exclude.so] | |
| && ! [info exists nm_output(exclude_common)] | |
| && ! [info exists nm_output(exclude_sym)] } { | |
| pass $test7 | |
| } else { | |
| fail $test7 | |
| } | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo,libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] | |
| && [ld_nm $nm "-D" tmpdir/exclude.so] | |
| && ! [info exists nm_output(exclude_common)] | |
| && ! [info exists nm_output(exclude_sym)] } { | |
| pass $test8 | |
| } else { | |
| fail $test8 | |
| } | |
| if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:bar --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] | |
| && [ld_nm $nm "-D" tmpdir/exclude.so] | |
| && [info exists nm_output(exclude_common)] | |
| && [info exists nm_output(exclude_sym)] } { | |
| pass $test9 | |
| } else { | |
| fail $test9 | |
| } |