This illustrates quite well why dot-symbols had to go. PowerPC64 gcc for Linux stopped producing them 12 years ago, but the Linux kernel still persists in using them so it's necessary to keep and regression test ld support. * testsuite/ld-elf/indirect1b.c: Give dot-symbol a version too. * testsuite/ld-elf/indirect2.c: Likewise. * testsuite/ld-elf/indirect3b.c: Likewise. * testsuite/ld-elf/indirect4b.c: Likewise. * testsuite/ld-elf/pr18718.c: Likewise. * testsuite/ld-elf/pr18720b.c: Likewise. * testsuite/ld-elf/pr19553c.c: Likewise. * testsuite/ld-elfvers/vers.h (FUNC_SYMVER): Define. * testsuite/ld-elfvers/vers1.c: Use FUNC_SYMVER for functions. * testsuite/ld-elfvers/vers4.c: Likewise. * testsuite/ld-elfvers/vers5.c: Likewise. * testsuite/ld-elfvers/vers6.c: Likewise. * testsuite/ld-elfvers/vers7a.c: Likewise. * testsuite/ld-elfvers/vers9.c: Likewise. * testsuite/ld-elfvers/vers15.c: Likewise. * testsuite/ld-elfvers/vers18.c: Likewise. * testsuite/ld-elfvers/vers22a.c: Likewise. * testsuite/ld-elfvers/vers23a.c: Likewise. * testsuite/ld-elfvers/vers27d1.c: Likewise. * testsuite/ld-elfvers/vers21.c: Likewise. (_old_bar): Use attribute weak rather than asm weak. * testsuite/ld-ifunc/pr16467b.c: Give dot-symbol a version. * testsuite/ld-plugin/pr12760b.c: Define warning on .bar rather than bar for ppc64 -mcall-aixdesc. * testsuite/ld-plugin/pr16746a.c: Similarly for foobar. * testsuite/ld-plugin/pr16746b.c: Likewise. * testsuite/ld-elf/shared.exp: Allow dot-symbol in warnings and errors. * testsuite/ld-plugin/lto.exp: Likewise. * testsuite/ld-plugin/plugin-6.d: Likewise. * testsuite/ld-plugin/plugin-7.d: Likewise. * testsuite/ld-plugin/plugin-8.d: Likewise. * testsuite/ld-plugin/plugin-13.d: Likewise. * testsuite/ld-plugin/plugin-14.d: Likewise. * testsuite/ld-plugin/plugin-15.d: Likewise. * testsuite/ld-plugin/plugin-16.d: Likewise. * testsuite/ld-plugin/plugin-20.d: Likewise. * testsuite/ld-plugin/plugin-21.d: Likewise. * testsuite/ld-plugin/plugin-22.d: Likewise. * testsuite/ld-plugin/plugin-23.d: Likewise. * testsuite/ld-plugin/plugin.exp: Define .main and .puts for ppc64 -mcall-aixdesc. * testsuite/ld-elfvers/vers.exp (test_ar): Trim dot-symbols. (objdump_dynsymstuff): Likewise. (objdump_symstuff): Likewise. Pack flags to keep column count consistent. * testsuite/ld-elfweak/elfweak.exp (objdump_dynsymstuff, objdump_symstuff): As for vers.exp. * testsuite/ld-elfvers/vers6.sym: Allow dot-symbols. * testsuite/ld-elfvers/vers1.sym: Allow missing F flag for -mcall-aixdesc .opd syms and adjust for flag packing. * testsuite/ld-elfvers/vers4.sym: Likewise. * testsuite/ld-elfvers/vers4a.sym: Likewise. * testsuite/ld-elfvers/vers7a.sym: Likewise. * testsuite/ld-elfvers/vers9.sym: Likewise. * testsuite/ld-elfvers/vers15.sym: Likewise. * testsuite/ld-elfvers/vers18.sym: Likewise. * testsuite/ld-elfvers/vers21.sym: Likewise. * testsuite/ld-elfvers/vers22a.sym: Likewise. * testsuite/ld-elfvers/vers23a.sym: Likewise. * testsuite/ld-elfvers/vers27d.sym: Likewise. * testsuite/ld-elfweak/strong.sym: Likewise. * testsuite/ld-elfweak/strongcomm.sym: Likewise. * testsuite/ld-elfweak/strongdata.sym: Likewise.
670 lines
22 KiB
Plaintext
670 lines
22 KiB
Plaintext
# Expect script for various ELF tests.
|
|
# Copyright (C) 2006-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.
|
|
#
|
|
|
|
# Exclude non-ELF targets.
|
|
|
|
# The following tests require running the executable generated by ld,
|
|
# or enough of a build environment to create a fully linked executable.
|
|
# This is not commonly available when testing a cross-built linker.
|
|
if ![isnative] {
|
|
return
|
|
}
|
|
|
|
if ![is_elf_format] {
|
|
return
|
|
}
|
|
|
|
# Check to see if the C compiler works
|
|
if { [which $CC] == 0 } {
|
|
return
|
|
}
|
|
|
|
# Add -ldl to extralibs if needed
|
|
if { ![istarget *-*-freebsd*]} {
|
|
set extralibs "-ldl"
|
|
}
|
|
|
|
set build_tests {
|
|
{"Build libfoo.so"
|
|
"-shared" "-fPIC"
|
|
{foo.c} {} "libfoo.so"}
|
|
{"Build versioned libfoo.so"
|
|
"-shared -Wl,--version-script=foo.map" "-fPIC"
|
|
{foo.c} {} "libfoov.so"}
|
|
{"Build libbar.so"
|
|
"-shared" "-fPIC"
|
|
{begin.c end.c} {} "libbar.so"}
|
|
{"Build warn libbar.so"
|
|
"-shared" "-fPIC"
|
|
{beginwarn.c end.c} {{readelf {-S --wide} libbarw.rd}} "libbarw.so"
|
|
"C" "^.*\\\): warning: function foo is deprecated$"}
|
|
{"Build hidden libbar.so"
|
|
"-shared" "-fPIC"
|
|
{begin.c endhidden.c} {} "libbarh.so"}
|
|
{"Build protected libbar.so"
|
|
"-shared" "-fPIC"
|
|
{begin.c endprotected.c} {} "libbarp.so"}
|
|
{"Build libbar.so with libfoo.so"
|
|
"-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
|
|
{end.c} {} "libbarfoo.so"}
|
|
{"Build libar.so with versioned libfoo.so"
|
|
"-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
|
|
{end.c} {} "libbarfoov.so"}
|
|
{"Build hidden libbar.so with libfoo.so"
|
|
"-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
|
|
{endhidden.c} {} "libbarhfoo.so"}
|
|
{"Build hidden libar.so with versioned libfoo.so"
|
|
"-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
|
|
{endhidden.c} {} "libbarhfoov.so"}
|
|
{"Build protected libbar.so with libfoo.so"
|
|
"-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC"
|
|
{endprotected.c} {} "libbarpfoo.so"}
|
|
{"Build protected libbar.so with versioned libfoo.so"
|
|
"-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC"
|
|
{endprotected.c} {} "libbarpfoov.so"}
|
|
{"Build libdl1.so"
|
|
"-shared" "-fPIC"
|
|
{dl1.c} {} "libdl1.so"}
|
|
{"Build libdl2a.so with --dynamic-list=dl2.list"
|
|
"-shared -Wl,--dynamic-list=dl2.list" "-fPIC"
|
|
{dl2.c dl2xxx.c} {} "libdl2a.so"}
|
|
{"Build libdl2a.so with --dynamic-list=dl2a.list"
|
|
"-shared -Wl,--dynamic-list=dl2a.list" "-fPIC"
|
|
{dl2.c dl2xxx.c} {} "libdl2a.so"}
|
|
{"Build libdl2a.so with --dynamic-list-data"
|
|
"-shared -Wl,--dynamic-list-data" "-fPIC"
|
|
{dl2.c dl2xxx.c} {} "libdl2a.so"}
|
|
{"Build libdl2b.so with --dynamic-list=dl2.list and dl2xxx.list"
|
|
"-shared -Wl,--dynamic-list=dl2.list,--dynamic-list=dl2xxx.list" "-fPIC"
|
|
{dl2.c dl2xxx.c} {} "libdl2b.so"}
|
|
{"Build libdl2c.so with --dynamic-list-data and dl2xxx.list"
|
|
"-shared -Wl,--dynamic-list-data,--dynamic-list=dl2xxx.list" "-fPIC"
|
|
{dl2.c dl2xxx.c} {} "libdl2c.so"}
|
|
{"Build libdl4a.so with --dynamic-list=dl4.list"
|
|
"-shared -Wl,--dynamic-list=dl4.list" "-fPIC"
|
|
{dl4.c dl4xxx.c} {} "libdl4a.so"}
|
|
{"Build libdl4b.so with --dynamic-list-data"
|
|
"-shared -Wl,--dynamic-list-data" "-fPIC"
|
|
{dl4.c dl4xxx.c} {} "libdl4b.so"}
|
|
{"Build libdl4c.so with --dynamic-list=dl4.list and dl4xxx.list"
|
|
"-shared -Wl,--dynamic-list=dl4.list,--dynamic-list=dl4xxx.list" "-fPIC"
|
|
{dl4.c dl4xxx.c} {} "libdl4c.so"}
|
|
{"Build libdl4d.so with --dynamic-list-data and dl4xxx.list"
|
|
"-shared -Wl,--dynamic-list-data,--dynamic-list=dl4xxx.list" "-fPIC"
|
|
{dl4.c dl4xxx.c} {} "libdl4d.so"}
|
|
{"Build libdl4e.so with -Bsymbolic-functions --dynamic-list-cpp-new"
|
|
"-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC"
|
|
{dl4.c dl4xxx.c} {} "libdl4e.so"}
|
|
{"Build libdl4f.so with --dynamic-list-cpp-new -Bsymbolic-functions"
|
|
"-shared -Wl,--dynamic-list-cpp-new,-Bsymbolic-functions" "-fPIC"
|
|
{dl4.c dl4xxx.c} {} "libdl4f.so"}
|
|
{"Build libdl6a.so"
|
|
"-shared" "-fPIC"
|
|
{dl6.c} {} "libdl6a.so"}
|
|
{"Build libdl6b.so with -Bsymbolic --dynamic-list-data"
|
|
"-shared -Wl,-Bsymbolic,--dynamic-list-data" "-fPIC"
|
|
{dl6.c} {} "libdl6b.so"}
|
|
{"Build libdl6c.so with -Bsymbolic"
|
|
"-shared -Wl,-Bsymbolic" "-fPIC"
|
|
{dl6.c} {} "libdl6c.so"}
|
|
{"Build libdl6d.so with --dynamic-list-data -Bsymbolic"
|
|
"-shared -Wl,--dynamic-list-data,-Bsymbolic" "-fPIC"
|
|
{dl6.c} {} "libdl6d.so"}
|
|
{"Build libdata1.so"
|
|
"-shared" "-fPIC"
|
|
{data1.c} {} "libdata1.so"}
|
|
{"Build libdata2.so"
|
|
"-shared" "-fPIC"
|
|
{data2.c} {} "libdata2.so"}
|
|
{"Build libcomm1.o"
|
|
"-r -nostdlib" ""
|
|
{comm1.c} {} "libcomm1.o"}
|
|
{"Build libfunc1.so"
|
|
"-shared" "-fPIC"
|
|
{func1.c} {} "libfunc1.so"}
|
|
{"Build libpr9676-1.a"
|
|
"" "-fPIC"
|
|
{pr9676-1.c} {} "libpr9676-1.a"}
|
|
{"Build libpr9676-2.a"
|
|
"" "-fPIC"
|
|
{pr9676-2.c} {} "libpr9676-2.a"}
|
|
{"Build libpr9676-3.so"
|
|
"-shared" "-fPIC"
|
|
{pr9676-3.c} {} "libpr9676-3.so"}
|
|
{"Build libpr9676-4.so"
|
|
"-shared" "-fPIC"
|
|
{pr9676-4.c} {} "libpr9676-4.so"}
|
|
{"Build libpr9676-4a.so"
|
|
"-shared tmpdir/pr9676-4.o -Ltmpdir -lpr9676-3 -Wl,--start-group -lpr9676-1 -lpr9676-2 -Wl,--end-group"
|
|
"-fPIC"
|
|
{dummy.c} {{readelf {-s} pr9676.rd}} "libpr9676-4a.so"}
|
|
{"Build libpr9679.so"
|
|
"-shared" "-fPIC -O0"
|
|
{pr9679-1.c pr9679-2.c} {{readelf {-s} pr9679.rd}} "libpr9679.so"}
|
|
{"Build libpr11138-1.so"
|
|
"-shared -Wl,--version-script=pr11138-1.map" "-fPIC"
|
|
{pr11138-1.c} {} "libpr11138-1.so"}
|
|
{"Build libpr11138-2.o"
|
|
"-r -nostdlib" ""
|
|
{pr11138-2.c} {} "libpr11138-2.o"}
|
|
{"Build pr13250-1.so"
|
|
"-shared" "-fPIC"
|
|
{pr13250-1.c} {} "libpr13250-1.so"}
|
|
{"Build pr13250-2.so with libpr13250-1.so"
|
|
"-shared -Wl,--no-as-needed tmpdir/libpr13250-1.so" "-fPIC"
|
|
{pr13250-2.c} {} "libpr13250-2.so"}
|
|
{"Build libpr13250-3.o"
|
|
"-r -nostdlib" ""
|
|
{pr13250-3.c} {} "libpr13250-3.o"}
|
|
{"Build libpr14323-2.so"
|
|
"-shared" "-fPIC"
|
|
{pr14323-2.c} {} "libpr14323-2.so"}
|
|
{"Build pr14862-1.o"
|
|
"-r -nostdlib" ""
|
|
{pr14862-1.c} {} "libpr14862-1.o"}
|
|
{"Build libpr14862.so"
|
|
"-shared -Wl,--version-script=pr11138-1.map" "-fPIC"
|
|
{pr14862-2.c} {} "libpr14862.so"}
|
|
{"Build libneeded1b.so"
|
|
"-shared" "-fPIC"
|
|
{needed1b.c} {} "libneeded1b.so"}
|
|
{"Build libneeded1a.so"
|
|
"-shared -Wl,--add-needed,--no-as-needed -Ltmpdir -lneeded1b" "-fPIC"
|
|
{needed1a.c} {} "libneeded1a.so"}
|
|
{"Build libneeded1c.o"
|
|
"-r -nostdlib" ""
|
|
{needed1c.c} {} "libneeded1c.o"}
|
|
{"Build libneeded1pic.o"
|
|
"-r -nostdlib" "-fPIC"
|
|
{needed1c.c} {} "libneeded1pic.o"}
|
|
{"Build needed1a.so with --add-needed"
|
|
"-shared tmpdir/libneeded1pic.o -Wl,--add-needed,-rpath=tmpdir,-z,defs -Ltmpdir -lneeded1a" ""
|
|
{dummy.c} {} "needed1a.so"}
|
|
{"Build needed1b.so with --copy-dt-needed-entries"
|
|
"-shared tmpdir/libneeded1pic.o -Wl,--copy-dt-needed-entries,-rpath=tmpdir,-z,defs -Ltmpdir -lneeded1a" ""
|
|
{dummy.c} {} "needed1b.so"}
|
|
{"Build needed1a.so with --no-add-needed"
|
|
"-shared tmpdir/libneeded1pic.o -Wl,--no-add-needed -Ltmpdir -lneeded1a" ""
|
|
{dummy.c} {} "needed1c.so"}
|
|
{"Build needed1b.so with --no-copy-dt-needed-entries"
|
|
"-shared tmpdir/libneeded1pic.o -Wl,--no-copy-dt-needed-entries -Ltmpdir -lneeded1a" ""
|
|
{dummy.c} {} "needed1d.so"}
|
|
{"Build librel.so"
|
|
"-shared" "-fPIC"
|
|
{rel.c} {} "librel.so"}
|
|
{"Build libneeded2a.so"
|
|
"-shared" "-fPIC"
|
|
{needed2a.c} {} "libneeded2a.so"}
|
|
{"Build libneeded2b.so"
|
|
"-shared -Wl,--version-script,needed2.ver" "-fPIC"
|
|
{needed2b.c} {} "libneeded2b.so"}
|
|
{"Build libneeded2c.o"
|
|
"-r -nostdlib" ""
|
|
{needed2c.c} {} "libneeded2c.o"}
|
|
{"Build needed2"
|
|
"tmpdir/libneeded2c.o -Wl,--as-needed tmpdir/libneeded2a.so tmpdir/libneeded2b.so" ""
|
|
{dummy.c} {} "needed2"}
|
|
{"Build libneeded3a.so"
|
|
"-shared -Wl,--no-add-needed" "-fPIC"
|
|
{needed1a.c} {} "libneeded3a.so"}
|
|
{"Build libneeded3b.so"
|
|
"-shared -Wl,--no-as-needed,--add-needed -Ltmpdir -lneeded1b" "-fPIC"
|
|
{dummy.c} {} "libneeded3b.so"}
|
|
{"Build needed3.o"
|
|
"-r -nostdlib" ""
|
|
{needed3.c} {} "libneeded3.so"}
|
|
{"Build needed3"
|
|
"tmpdir/needed3.o -Wl,--as-needed -Ltmpdir -lneeded3a -lneeded3b -lneeded1b" ""
|
|
{dummy.c} {} "needed3"}
|
|
{"Build libpr2404a.so"
|
|
"-shared" "-fPIC"
|
|
{pr2404a.c} {} "libpr2404a.so"}
|
|
{"Build libpr2404b.a"
|
|
"" ""
|
|
{pr2404b.c} {} "libpr2404b.a"}
|
|
{"Build rdynamic-1"
|
|
"-rdynamic -Wl,--gc-sections" "-ffunction-sections"
|
|
{rdynamic-1.c} {{readelf {-s} rdynamic-1.rd}} "rdynamic-1"}
|
|
{"Build dynamic-1"
|
|
"-Wl,--dynamic-list,dynamic-1.syms -Wl,--gc-sections" "-ffunction-sections"
|
|
{dynamic-1.c} {{readelf {-s} dynamic-1.rd}} "dynamic-1"}
|
|
{"Build libpr16496a.so"
|
|
"-shared -Wl,--version-script=pr16496a.map" "-fPIC"
|
|
{pr16496a.c} {} "libpr16496a.so"}
|
|
{"Build libpr16496b.a"
|
|
"" "-fPIC"
|
|
{pr16496b.c} {} "libpr16496b.a"}
|
|
{"Build libpr16496b.so"
|
|
"-shared tmpdir/pr16496b.o tmpdir/libpr16496a.so" ""
|
|
{dummy.c} {{objdump {-R} pr16496b.od}} "libpr16496b.so"}
|
|
{"Build libpr16452a.so"
|
|
"-shared -Wl,-soname,libpr16452a.so,--version-script=pr16452.map" "-fPIC"
|
|
{pr16452a.c} {} "libpr16452a.so"}
|
|
{"Build libpr16452b.so"
|
|
"-shared -Wl,-soname,libpr16452b.so,--no-as-needed tmpdir/libpr16452a.so" "-fPIC"
|
|
{dummy.c} {} "libpr16452b.so"}
|
|
{"Build pr16452"
|
|
"tmpdir/libpr16452b.so -Wl,-rpath=tmpdir" ""
|
|
{pr16452b.c} {{objdump {-p} pr16452.od}} "pr16452"}
|
|
{"Build pr16457"
|
|
"tmpdir/libpr16452b.so -Wl,-rpath=tmpdir" ""
|
|
{pr16452b.c} {{objdump {-p} pr16457.od}} "pr16457"}
|
|
{"Build libpr18458a.so"
|
|
"-shared -Wl,-z,now" "-fPIC"
|
|
{pr18458a.c} {} "libpr18458a.so"}
|
|
{"Build libpr18458b.so"
|
|
"-shared -Wl,-z,now tmpdir/libpr18458a.so" "-fPIC"
|
|
{pr18458b.c} {} "libpr18458b.so"}
|
|
{"Build pr19073a.o"
|
|
"-r -nostdlib" ""
|
|
{pr19073.s} {} "pr19073a.o"}
|
|
{"Build libpr19073.so"
|
|
"-shared -Wl,--version-script=pr19073.map tmpdir/pr19073a.o" "-fPIC"
|
|
{dummy.c} {{readelf {--dyn-syms --wide} pr19073.rd}} "libpr19073.so"}
|
|
}
|
|
|
|
run_cc_link_tests $build_tests
|
|
|
|
set run_tests {
|
|
{"Run normal with libfoo.so"
|
|
"tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
|
|
{main.c} "normal" "normal.out"}
|
|
{"Run protected with libfoo.so"
|
|
"tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" ""
|
|
{main.c} "protected" "normal.out"}
|
|
{"Run hidden with libfoo.so"
|
|
"tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" ""
|
|
{main.c} "hidden" "hidden.out"}
|
|
{"Run normal with versioned libfoo.so"
|
|
"tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" ""
|
|
{main.c} "normalv" "normal.out"}
|
|
{"Run warn with versioned libfoo.so"
|
|
"tmpdir/beginwarn.o tmpdir/libfoov.so" ""
|
|
{main.c} "warn" "warn.out"
|
|
"" "" "^.*\\\): warning: function foo is deprecated$"}
|
|
{"Run protected with versioned libfoo.so"
|
|
"tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" ""
|
|
{main.c} "protected" "normal.out"}
|
|
{"Run hidden with versioned libfoo.so"
|
|
"tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" ""
|
|
{main.c} "hiddenv" "hidden.out"}
|
|
{"Run normal libbar.so with libfoo.so"
|
|
"tmpdir/libbarfoo.so tmpdir/libfoo.so" ""
|
|
{main.c} "normal" "normal.out"}
|
|
{"Run protected libbar.so with libfoo.so"
|
|
"tmpdir/libbarpfoo.so tmpdir/libfoo.so" ""
|
|
{main.c} "protected" "normal.out"}
|
|
{"Run hidden libbar.so with libfoo.so"
|
|
"tmpdir/libbarhfoo.so tmpdir/libfoo.so" ""
|
|
{main.c} "hidden" "hidden.out"}
|
|
{"Run normal libbar.so with versioned libfoo.so"
|
|
"tmpdir/libbarfoov.so tmpdir/libfoov.so" ""
|
|
{main.c} "normal" "normal.out"}
|
|
{"Run protected libbar.so with versioned libfoo.so"
|
|
"tmpdir/libbarpfoov.so tmpdir/libfoov.so" ""
|
|
{main.c} "protected" "normal.out"}
|
|
{"Run hidden libbar.so with versioned libfoo.so"
|
|
"tmpdir/libbarhfoov.so tmpdir/libfoov.so" ""
|
|
{main.c} "hidden" "hidden.out"}
|
|
{"Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so"
|
|
"--dynamic-list=dl1.list $extralibs" ""
|
|
{dl1main.c} "dl1a" "dl1.out"}
|
|
{"Run dl1b with --dynamic-list-data and dlopen on libdl1.so"
|
|
"--dynamic-list-data $extralibs" ""
|
|
{dl1main.c} "dl1b" "dl1.out"}
|
|
{"Run with libdl2a.so"
|
|
"tmpdir/libdl2a.so" ""
|
|
{dl2main.c} "dl2a" "dl2a.out"}
|
|
{"Run with libdl2b.so"
|
|
"tmpdir/libdl2b.so" ""
|
|
{dl2main.c} "dl2b" "dl2b.out"}
|
|
{"Run with libdl2c.so"
|
|
"tmpdir/libdl2c.so" ""
|
|
{dl2main.c} "dl2c" "dl2b.out"}
|
|
{"Run with libdl4a.so"
|
|
"tmpdir/libdl4a.so" ""
|
|
{dl4main.c} "dl4a" "dl4a.out"}
|
|
{"Run with libdl4b.so"
|
|
"tmpdir/libdl4b.so" ""
|
|
{dl4main.c} "dl4b" "dl4a.out"}
|
|
{"Run with libdl4c.so"
|
|
"tmpdir/libdl4c.so" ""
|
|
{dl4main.c} "dl4c" "dl4b.out"}
|
|
{"Run with libdl4d.so"
|
|
"tmpdir/libdl4d.so" ""
|
|
{dl4main.c} "dl4d" "dl4b.out"}
|
|
{"Run with libdl4e.so"
|
|
"tmpdir/libdl4e.so" ""
|
|
{dl4main.c} "dl4e" "dl4a.out"}
|
|
{"Run with libdl4f.so"
|
|
"tmpdir/libdl4f.so" ""
|
|
{dl4main.c} "dl4f" "dl4a.out"}
|
|
{"Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so"
|
|
"--dynamic-list-data $extralibs" ""
|
|
{dl6amain.c} "dl6a1" "dl6a.out"}
|
|
{"Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so"
|
|
"-Bsymbolic-functions $extralibs" ""
|
|
{dl6amain.c} "dl6a2" "dl6b.out"}
|
|
{"Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so"
|
|
"-Bsymbolic $extralibs" ""
|
|
{dl6amain.c} "dl6a3" "dl6b.out"}
|
|
{"Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so"
|
|
"-Bsymbolic --dynamic-list-data $extralibs" ""
|
|
{dl6amain.c} "dl6a4" "dl6a.out"}
|
|
{"Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so"
|
|
"-Bsymbolic-functions --dynamic-list-cpp-new $extralibs" ""
|
|
{dl6amain.c} "dl6a5" "dl6b.out"}
|
|
{"Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so"
|
|
"--dynamic-list-cpp-new -Bsymbolic-functions $extralibs" ""
|
|
{dl6amain.c} "dl6a6" "dl6b.out"}
|
|
{"Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so"
|
|
"--dynamic-list-data -Bsymbolic $extralibs" ""
|
|
{dl6amain.c} "dl6a7" "dl6a.out"}
|
|
{"Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so"
|
|
"--dynamic-list-data $extralibs" ""
|
|
{dl6bmain.c} "dl6b1" "dl6a.out"}
|
|
{"Run dl6b2 with dlopen on libdl6b.so"
|
|
"$extralibs" ""
|
|
{dl6bmain.c} "dl6b2" "dl6b.out"}
|
|
{"Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so"
|
|
"--dynamic-list-data $extralibs" ""
|
|
{dl6cmain.c} "dl6c1" "dl6b.out"}
|
|
{"Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so"
|
|
"--dynamic-list-data $extralibs" ""
|
|
{dl6dmain.c} "dl6d1" "dl6b.out"}
|
|
{"Run with libdata1.so"
|
|
"tmpdir/libdata1.so" ""
|
|
{dynbss1.c} "dynbss1" "pass.out"}
|
|
{"Run with libdata2.so"
|
|
"tmpdir/libdata2.so" ""
|
|
{weakdef1.c} "weakdef1" "pass.out"}
|
|
{"Run with libfunc1.so comm1.o"
|
|
"tmpdir/libfunc1.so tmpdir/comm1.o" ""
|
|
{dummy.c} "comm1" "pass.out"}
|
|
{"Run with comm1.o libfunc1.so"
|
|
"tmpdir/comm1.o tmpdir/libfunc1.so" ""
|
|
{dummy.c} "comm1" "pass.out"}
|
|
{"Run with pr11138-2.c libpr11138-1.so"
|
|
"--version-script=pr11138-2.map tmpdir/pr11138-2.o tmpdir/libpr11138-1.so" ""
|
|
{dummy.c} "pr11138a" "pr11138.out"}
|
|
{"Run with libpr11138-1.so pr11138-2.c"
|
|
"--version-script=pr11138-2.map tmpdir/libpr11138-1.so tmpdir/pr11138-2.o" ""
|
|
{dummy.c} "pr11138b" "pr11138.out"}
|
|
{"Run with pr13250-3.c, libpr13250-1.so and libpr13250-2.so"
|
|
"--as-needed tmpdir/pr13250-3.o tmpdir/libpr13250-1.so tmpdir/libpr13250-2.so" ""
|
|
{dummy.c} "pr13250" "pass.out"}
|
|
{"Run with pr14323-1.c pr14323-2.so"
|
|
"tmpdir/libpr14323-2.so" ""
|
|
{pr14323-1.c} "pr14323" "pass.out"}
|
|
{"Run with pr14862-1.c libpr14862.so"
|
|
"--as-needed tmpdir/libpr14862-1.o tmpdir/libpr14862.so" ""
|
|
{dummy.c} "pr14862" "pr14862.out"}
|
|
{"Link with --add-needed"
|
|
"tmpdir/libneeded1c.o --add-needed -rpath=tmpdir -Ltmpdir -lneeded1a" ""
|
|
{dummy.c} "needed1a" "needed1.out"}
|
|
{"Link with --copy-dt-needed-entries"
|
|
"tmpdir/libneeded1c.o --copy-dt-needed-entries -rpath=tmpdir -Ltmpdir -lneeded1a" ""
|
|
{dummy.c} "needed1b" "needed1.out"}
|
|
{"Run relmain"
|
|
"--no-as-needed -rpath=tmpdir -Ltmpdir -lrel" ""
|
|
{relmain.c} "relmain" "relmain.out"}
|
|
{"Run pr2404"
|
|
"tmpdir/pr2404b.o tmpdir/libpr2404a.so" ""
|
|
{dummy.c} "pr2404" "pr2404.out"}
|
|
{"Run pr18458"
|
|
"tmpdir/libpr18458a.so tmpdir/libpr18458b.so -z now" ""
|
|
{pr18458c.c} "pr18458" "pass.out"}
|
|
}
|
|
|
|
# NetBSD ELF systems do not currently support the .*_array sections.
|
|
run_ld_link_exec_tests $run_tests "*-*-netbsdelf*"
|
|
|
|
# Check --no-add-needed and --no-copy-dt-needed-entries
|
|
set testname "--no-add-needed"
|
|
set exec_output [run_host_cmd "$CC" "tmpdir/libneeded1c.o -Wl,--no-add-needed,-rpath-link=tmpdir -Ltmpdir -lneeded1a"]
|
|
if { [ regexp "tmpdir/libneeded1b.so: .*: DSO missing" $exec_output ] } {
|
|
pass $testname
|
|
} {
|
|
fail $testname
|
|
}
|
|
set testname "--no-copy-dt-needed-entries"
|
|
set exec_output [run_host_cmd "$CC" "tmpdir/libneeded1c.o -Wl,--no-copy-dt-needed-entries,-rpath-link=tmpdir -Ltmpdir -lneeded1a"]
|
|
if { [ regexp "tmpdir/libneeded1b.so: .*: DSO missing" $exec_output ] } {
|
|
pass $testname
|
|
} {
|
|
fail $testname
|
|
}
|
|
set testname "--no-add-needed -shared"
|
|
set exec_output [run_host_cmd "$CC" "-shared tmpdir/libneeded1pic.o -Wl,--no-add-needed,-z,defs -Ltmpdir -lneeded1a"]
|
|
if { [ regexp "undefined reference to `\.?bar'" $exec_output ] } {
|
|
pass $testname
|
|
} {
|
|
fail $testname
|
|
}
|
|
set testname "--no-copy-dt-needed-entries -shared"
|
|
set exec_output [run_host_cmd "$CC" "-shared tmpdir/libneeded1pic.o -Wl,--no-copy-dt-needed-entries,-z,defs -Ltmpdir -lneeded1a"]
|
|
if { [ regexp "undefined reference to `\.?bar'" $exec_output ] } {
|
|
pass $testname
|
|
} {
|
|
fail $testname
|
|
}
|
|
|
|
# Check to see if the C++ compiler works
|
|
if { [which $CXX] == 0 } {
|
|
return
|
|
}
|
|
|
|
set build_cxx_tests {
|
|
{"Build libdl3a.so with --dynamic-list=dl3.list"
|
|
"-shared -Wl,--dynamic-list=dl3.list" "-fPIC"
|
|
{dl3.cc} {} "libdl3a.so" "c++"}
|
|
{"Build libdl3b.so with -Bsymbolic"
|
|
"-shared -Wl,-Bsymbolic" "-fPIC"
|
|
{dl3.cc} {} "libdl3b.so" "c++"}
|
|
{"Build libdl3a.so with --dynamic-list-cpp-typeinfo"
|
|
"-shared -Wl,--dynamic-list-cpp-typeinfo" "-fPIC"
|
|
{dl3.cc} {} "libdl3c.so" "c++"}
|
|
{"Build libdnew1a.so with --Bsymbolic-functions --dynamic-list-cpp-new"
|
|
"-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC"
|
|
{del.cc new.cc} {} "libnew1a.so" "c++"}
|
|
{"Build libdnew1b.so with --dynamic-list-data --dynamic-list-cpp-new"
|
|
"-shared -Wl,--dynamic-list-data,--dynamic-list-cpp-new" "-fPIC"
|
|
{del.cc new.cc} {} "libnew1b.so" "c++"}
|
|
}
|
|
|
|
# "-shared -Bsymbolic" only works with gcc 4.5.0 and newer.
|
|
# {"Run with libdl3b.so"
|
|
# "tmpdir/libdl3b.so" ""
|
|
# {dl3main.cc} "dl3b" "dl3b.out" "" "c++"}
|
|
set run_cxx_tests {
|
|
{"Run with libdl3a.so"
|
|
"-Wl,--no-as-needed tmpdir/libdl3a.so" ""
|
|
{dl3main.cc} "dl3a" "dl3a.out" "" "c++"}
|
|
{"Run with libdl3c.so"
|
|
"-Wl,--no-as-needed tmpdir/libdl3c.so" ""
|
|
{dl3main.cc} "dl3c" "dl3a.out" "" "c++"}
|
|
{"Run with libnew1a.so"
|
|
"tmpdir/libnew1a.so" ""
|
|
{dl5.cc} "dl5a" "dl5.out" "" "c++"}
|
|
{"Run with libnew1b.so"
|
|
"tmpdir/libnew1b.so" ""
|
|
{dl5.cc} "dl5b" "dl5.out" "" "c++"}
|
|
}
|
|
|
|
run_cc_link_tests $build_cxx_tests
|
|
run_ld_link_exec_tests $run_cxx_tests
|
|
|
|
if { [istarget *-*-linux*]
|
|
|| [istarget *-*-nacl*]
|
|
|| [istarget *-*-gnu*] } {
|
|
run_cc_link_tests [list \
|
|
[list \
|
|
"Build libpr2404b.a with PIE" \
|
|
"" \
|
|
"-fPIE" \
|
|
{ pr2404b.c } \
|
|
{} \
|
|
"libpr2404b.a" \
|
|
] \
|
|
[list \
|
|
"Build pr19579a.o" \
|
|
"" "-fPIE" \
|
|
{pr19579a.c} \
|
|
{} \
|
|
"libpr19579a.a" \
|
|
] \
|
|
[list \
|
|
"Build libpr19579.so" \
|
|
"-shared" \
|
|
"-fPIC" \
|
|
{pr19579b.c} \
|
|
{} \
|
|
"libpr19579.so" \
|
|
] \
|
|
]
|
|
run_ld_link_exec_tests [list \
|
|
[list \
|
|
"Run pr2404 with PIE" \
|
|
"-pie tmpdir/pr2404b.o tmpdir/libpr2404a.so" \
|
|
"" \
|
|
{ dummy.c } \
|
|
"pr2404pie" \
|
|
"pr2404.out" \
|
|
"-fPIE" \
|
|
] \
|
|
[list \
|
|
"Run pr18718" \
|
|
"" \
|
|
"" \
|
|
{ pr18718.c check-ptr-eq.c } \
|
|
"pr18718" \
|
|
"pass.out" \
|
|
"-O2 -I../bfd" \
|
|
] \
|
|
[list \
|
|
"Run pr18718 with PIE (1)" \
|
|
"-pie" \
|
|
"" \
|
|
{ pr18718.c check-ptr-eq.c } \
|
|
"pr18718pie1" \
|
|
"pass.out" \
|
|
"-O2 -fPIE -I../bfd" \
|
|
] \
|
|
[list \
|
|
"Run pr18718 with PIE (2)" \
|
|
"" \
|
|
"" \
|
|
{ pr18718.c check-ptr-eq.c } \
|
|
"pr18718pie2" \
|
|
"pass.out" \
|
|
"-O2 -fPIE -I../bfd" \
|
|
] \
|
|
[list \
|
|
"Run pr18718 with PIC (1)" \
|
|
"" \
|
|
"" \
|
|
{ pr18718.c check-ptr-eq.c } \
|
|
"pr18718pic1" \
|
|
"pass.out" \
|
|
"-O2 -fPIC -I../bfd" \
|
|
] \
|
|
[list \
|
|
"Run pr18718 with PIC (2)" \
|
|
"-pie" \
|
|
"" \
|
|
{ pr18718.c check-ptr-eq.c } \
|
|
"pr18718pic2" \
|
|
"pass.out" \
|
|
"-O2 -fPIC -I../bfd" \
|
|
] \
|
|
[list \
|
|
"Run pr19579" \
|
|
"-pie -z text tmpdir/pr19579a.o tmpdir/libpr19579.so" \
|
|
"" \
|
|
{dummy.c} \
|
|
"pr19579" \
|
|
"pass.out" \
|
|
"-fPIE" \
|
|
] \
|
|
]
|
|
}
|
|
|
|
proc mix_pic_and_non_pic {xfails cflags ldflags exe} {
|
|
run_cc_link_tests [list \
|
|
[list \
|
|
"Build libpr19719a.so" \
|
|
"-shared -Wl,-soname,libpr19719.so" \
|
|
"-fPIC" \
|
|
{ pr19719d.c } \
|
|
{} \
|
|
"libpr19719a.so" \
|
|
] \
|
|
[list \
|
|
"Build libpr19719b.so" \
|
|
"-shared -Wl,-soname,libpr19719.so" \
|
|
"-fPIC" \
|
|
{ dummy.c } \
|
|
{} \
|
|
"libpr19719b.so" \
|
|
] \
|
|
[list \
|
|
"Build libpr19719b.o" \
|
|
"-r -nostdlib" \
|
|
"-fPIC" \
|
|
{ pr19719b.c } \
|
|
{} \
|
|
"libpr19719b.o" \
|
|
] \
|
|
]
|
|
|
|
send_log "cp tmpdir/libpr19719b.so tmpdir/libpr19719.so\n"
|
|
exec cp tmpdir/libpr19719b.so tmpdir/libpr19719.so
|
|
|
|
run_ld_link_exec_tests [list \
|
|
[list \
|
|
"Run $exe fun defined" \
|
|
"$ldflags tmpdir/libpr19719b.o tmpdir/libpr19719.so -rpath tmpdir" \
|
|
"" \
|
|
{ pr19719a.c pr19719c.c } \
|
|
$exe \
|
|
"pass.out" \
|
|
"$cflags" \
|
|
] \
|
|
]
|
|
|
|
send_log "cp tmpdir/libpr19719a.so tmpdir/libpr19719.so\n"
|
|
exec cp tmpdir/libpr19719a.so tmpdir/libpr19719.so
|
|
|
|
foreach targ $xfails {
|
|
setup_xfail $targ
|
|
}
|
|
|
|
set exec_output [run_host_cmd "tmpdir/$exe" ""]
|
|
if {![string match "PASS" $exec_output]} {
|
|
fail "Run $exe fun undefined"
|
|
} else {
|
|
pass "Run $exe fun undefined"
|
|
}
|
|
}
|
|
|
|
mix_pic_and_non_pic [list "arm*-*-*" "aarch64*-*-*"] "" "" "pr19719"
|
|
mix_pic_and_non_pic [] "-fPIE" "-pie" "pr19719pie"
|