1999-05-03 09:29:11 +02:00
|
|
|
# Expect script for LD selective linking tests
|
2004-12-01 22:12:39 +01:00
|
|
|
# Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
|
|
|
# Free Software Foundation, Inc.
|
1999-05-03 09:29:11 +02:00
|
|
|
#
|
|
|
|
# This file 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 2 of the License, or
|
|
|
|
# (at your option) any later version.
|
2002-02-12 12:10:11 +01:00
|
|
|
#
|
1999-05-03 09:29:11 +02:00
|
|
|
# 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.
|
2002-02-12 12:10:11 +01:00
|
|
|
#
|
1999-05-03 09:29:11 +02:00
|
|
|
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
#
|
|
|
|
# Written by Catherine Moore (clm@cygnus.com)
|
|
|
|
# Make sure that constructors are handled correctly.
|
|
|
|
|
2004-01-02 09:27:08 +01:00
|
|
|
# Only ELF based ports support selective linking
|
|
|
|
if ![is_elf_format] {
|
2003-05-09 17:35:09 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2004-01-09 22:19:15 +01:00
|
|
|
# IA64 does not support selective linking
|
|
|
|
if {[istarget "ia64-*-*"]} {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
# List contains test-items with three items followed by four lists:
|
|
|
|
# 1:name 2:test-type (CC or C++; add as needed) 3:filename 4:ld-flags
|
|
|
|
# 5:must-have-symbols 6:must-not-have-symbols 7:xfail-targets.
|
|
|
|
#
|
|
|
|
# If a must(-not)-have symbol is a list, then that list must have two
|
|
|
|
# items; the symbol name and a value the symbol must (not) have.
|
|
|
|
#
|
|
|
|
# Note: ld_nm trims leading `_' from _start
|
|
|
|
#
|
|
|
|
# FIXME: Instead of table, read settings from each source-file.
|
|
|
|
set seltests {
|
2004-01-02 09:27:08 +01:00
|
|
|
{selective1 C 1.c {} {} {dropme1 dropme2} {}}
|
|
|
|
{selective2 C 2.c {} {} {foo} {mips*-*}}
|
2001-08-21 18:04:37 +02:00
|
|
|
{selective3 C 2.c {-u foo} {foo} {{foo 0}} {mips*-*}}
|
2004-01-02 09:27:08 +01:00
|
|
|
{selective4 C++ 3.cc {} {start a A::foo() B::foo()} {A::bar()} {mips*-*}}
|
|
|
|
{selective5 C++ 4.cc {} {start a A::bar()} {A::foo() B::foo()} {mips*-*}}
|
2001-08-21 18:04:37 +02:00
|
|
|
{selective6 C++ 5.cc {} {start a A::bar()}
|
2001-07-24 13:09:24 +02:00
|
|
|
{A::foo() B::foo() dropme1() dropme2()} {*-*-*}}
|
2000-10-09 03:35:13 +02:00
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2001-04-03 01:33:20 +02:00
|
|
|
set cflags "-w -O -ffunction-sections -fdata-sections"
|
1999-05-03 09:29:11 +02:00
|
|
|
set cxxflags "-fvtable-gc -fno-exceptions -fno-rtti"
|
|
|
|
set ldflags "--gc-sections -Bstatic"
|
|
|
|
|
Contribute sh64-elf.
2002-02-02 Alexandre Oliva <aoliva@redhat.com>
* ld-sh/sh64/crange3-cmpct.rd: Adjust offsets.
* ld-sh/sh64/crange3-media.rd: Likewise.
* ld-sh/sh64/crange3.rd: Likewise.
* ld-sh/sh64/crangerel1.rd: Likewise.
* ld-sh/sh64/crangerel2.rd: Likewise.
* ld-sh/sh64/reldl32.rd: Likewise.
* ld-sh/sh64/reldl64.rd: Likewise.
2002-01-28 Alexandre Oliva <aoliva@redhat.com>
* ld-sh/sh64/abi32.xd: Formatting changes to match the current
output of objdump.
* ld-sh/sh64/cmpct1.xd: Likewise.
* ld-sh/sh64/crange1.rd: Likewise.
* ld-sh/sh64/crange2.rd: Likewise.
* ld-sh/sh64/crange3-cmpct.rd: Likewise.
* ld-sh/sh64/crange3-media.rd: Likewise.
* ld-sh/sh64/crange3.rd: Likewise.
* ld-sh/sh64/crangerel1.rd: Likewise.
* ld-sh/sh64/crangerel2.rd: Likewise.
* ld-sh/sh64/mix1.xd: Likewise.
* ld-sh/sh64/mix2.xd: Likewise.
* ld-sh/sh64/rel32.xd: Likewise.
* ld-sh/sh64/reldl32.rd: Likewise.
* ld-sh/sh64/reldl64.rd: Likewise.
* ld-sh/sh64/sh64.exp: Likewise. Reordered cranges and stack
sessions, to match changes in the linker script.
2001-06-14 Alexandre Oliva <aoliva@redhat.com>
* ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd: Adjust relocation
info to reflect renumbering of relocation types.
2001-03-14 DJ Delorie <dj@redhat.com>
* ld-sh/sh64/endian.dbd: New file, endian tests.
* ld-sh/sh64/endian.dld: Ditto.
* ld-sh/sh64/endian.ld: Ditto.
* ld-sh/sh64/endian.s: Ditto.
* ld-sh/sh64/endian.sbd: Ditto.
* ld-sh/sh64/endian.sld: Ditto.
* ld-sh/sh64/sh64.exp: Add above tests. Add -L option to ld.
2001-03-12 DJ Delorie <dj@redhat.com>
* ld-sh/sh64/relax.exp: New file, test disabling relaxing.
* ld-sh/sh64/relax1.s: Ditto.
* ld-sh/sh64/relax2.s: Ditto.
* ld-sh/sh64/relax3.s: Ditto.
* ld-sh/sh64/relax4.s: Ditto.
* ld-sh/sh64/relfail.exp: New file, test for bogus relocs.
* ld-sh/sh64/relfail.s: Ditto.
2001-03-12 DJ Delorie <dj@redhat.com>
* ld-sh/sh.exp: This test isn't appropriate for SH64 since it
uses SH32 assembler files.
2001-03-07 DJ Delorie <dj@redhat.com>
* ld-selective/selective.exp: Pass "-e _start" for sh64 to
accomodate expected start symbol in test.
2001-03-06 DJ Delorie <dj@redhat.com>
* ld-scripts/crossref.exp: Pass -mshelf32 to the linker for sh64,
to match what gcc passes to the linker by default.
* ld-selective/selective.exp: Ditto.
* ld-srec/srec.exp: Ditto, plus XFAIL for sh64.
* ld-undefined/undefined.exp: Add XFAIL for sh64 (it's dwarf2).
2001-03-06 DJ Delorie <dj@redhat.com>
* ld-sh/sh64/abi32.xd (stack): Adjust for new default stack layout.
* ld-sh/sh64/abi64.xd (stack): Ditto.
* ld-sh/sh64/cmpct1.xd (stack): Ditto.
* ld-sh/sh64/crange1.rd (stack): Ditto.
* ld-sh/sh64/crange2.rd (stack): Ditto.
* ld-sh/sh64/crange3-cmpct.rd (stack): Ditto.
* ld-sh/sh64/crange3-media.rd (stack): Ditto.
* ld-sh/sh64/crange3.rd (stack): Ditto.
* ld-sh/sh64/mix1.xd (stack): Ditto.
* ld-sh/sh64/mix2.xd (stack): Ditto.
* ld-sh/sh64/shdl32.xd (stack): Ditto.
* ld-sh/sh64/shdl64.xd (stack): Ditto.
2001-01-14 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/mix1.xd: Add SORT_ENTRIES for .cranges section.
* ld-sh/sh64/mix2.xd: Ditto.
2001-01-08 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/abi32.xd: Adjust for bit 0 set on an entry address
being SHmedia.
* ld-sh/sh64/shdl64.xd: Ditto.
* ld-sh/sh64/shdl32.xd: Ditto.
* ld-sh/sh64/mix2.xd: Ditto.
* ld-sh/sh64/crange3-media.rd: Ditto.
* ld-sh/sh64/abi64.xd: Ditto.
2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/crange-2a.s (diversion2): New global symbol.
* ld-sh/sh64/crange1.rd: Adjust to presence of new symbol.
Adjust section type for .cranges; expect sorted contents.
* ld-sh/sh64/crange2.rd: Ditto.
* ld-sh/sh64/crange3.dd, ld-sh/sh64/crange3.rd: Ditto.
* ld-sh/sh64/crangerel1.rd: Adjust to presence of new symbol.
* ld-sh/sh64/crangerel2.rd: Ditto.
* ld-sh/sh64/mix1.xd: Adjust to DEBUGGING being set for .cranges.
* ld-sh/sh64/mix2.xd: Ditto.
* ld-sh/sh64/crange3-cmpct.rd, ld-sh/sh64/crange3-media.rd: New
tests.
* ld-sh/sh64/sh64.exp: Tweak test message. Run new tests.
2001-01-05 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/shmix-1.s (start2): Add a NOP to provide a valid
target for (unexpanded) PTB. Add an .align 2 to SHmedia code to
keep properly aligned.
* ld-sh/sh64/mix1.sd, ld-sh/sh64/mix1.xd: Adjust accordingly.
* ld-sh/sh64/mix1-noexp.sd, ld-sh/sh64/mix2-noexp.sd,
ld-sh/sh64/abixx-noexp.sd: New tests for GAS -no-expand and
R_SH_PT_16 relocation.
* ld-sh/sh64/sh64.exp: Run new tests.
2000-12-30 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/crange-2f.s, ld-sh/sh64/crange-2g.s,
ld-sh/sh64/crange-2h.s, ld-sh/sh64/crange-2i.s,
ld-sh/sh64/crange3.dd, ld-sh/sh64/crange3.rd: New tests.
* ld-sh/sh64/sh64.exp: Run new tests.
* ld-sh/sh64/crange1.rd: Correct section flags.
* ld-sh/sh64/crange2.rd: Ditto.
* ld-sh/sh64/crangerel1.rd: Ditto.
2000-12-18 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/crange-1.s, ld-sh/sh64/crange-2a.s,
ld-sh/sh64/crange-2b.s, ld-sh/sh64/crange-2c.s,
ld-sh/sh64/crange-2d.s, ld-sh/sh64/crange-2e.s,
ld-sh/sh64/crange1.rd, ld-sh/sh64/crange2.rd,
ld-sh/sh64/crangerel1.rd, ld-sh/sh64/crangerel2.rd: New tests for
handling .cranges section.
* ld-sh/sh64/sh64.exp: Run new tests.
* ld-sh/sh64/mix1.sd, ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.sd,
ld-sh/sh64/mix2.xd: Adjust for .cranges section.
2000-12-15 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/abi32.sd, ld-sh/sh64/abi32.xd, ld-sh/sh64/abi64.sd,
ld-sh/sh64/abi64.xd, ld-sh/sh64/cmpct1.xd, ld-sh/sh64/mix1.sd,
ld-sh/sh64/mix1.xd, ld-sh/sh64/mix2.sd, ld-sh/sh64/mix2.xd,
ld-sh/sh64/shdl32.xd, ld-sh/sh64/shdl64.xd: Adjust to .bss and
.data individually 8-byte aligned.
2000-12-09 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/rel-1.s, ld-sh/sh64/rel-2.s, ld-sh/sh64/rel32.xd,
ld-sh/sh64/rel64.xd, ld-sh/sh64/reldl-1.s, ld-sh/sh64/reldl-2.s,
ld-sh/sh64/reldl32.rd, ld-sh/sh64/reldl64.rd: New tests.
* ld-sh/sh64/sh64.exp: Make it possible to use readelf as
inspection tool. Run new tests.
2000-12-07 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/abi64.sd, ld-sh/sh64/abi32.sd, ld-sh/sh64/mix1.sd,
ld-sh/sh64/mix2.sd: Correct offsets in PT/PTA/PTB expansions.
* ld-sh/sh64/shdl-1.s, ld-sh/sh64/shdl-2.s, ld-sh/sh64/shdl64.sd,
ld-sh/sh64/shdl64.xd, ld-sh/sh64/shdl32.xd: New tests.
* ld-sh/sh64/sh64.exp: Run new tests.
2000-12-01 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/cmpct1.sd, ld-sh/sh64/cmpct1.xd,
ld-sh/sh64/shcmp-1.s: New test.
* ld-sh/sh64/sh64.exp: Add new test to sh64tests. Reformat.
2000-11-30 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/sh64.exp: Use linker option -mshelf64 for 64-bit ABI
test.
* ld-sh/sh64/abi64.xd: Tweak for 64-bit ELF.
2000-11-29 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/sh64.exp (sh64tests): Use linker option -mshelf32 for
tests.
2000-11-27 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64/abi32.sd, ld-sh/sh64/abi64.sd: Correct MOVI
registers.
* ld-sh/sh64/mix1.sd, ld-sh/sh64/mix1.xd, ld-sh/sh64/shmix-1.s:
New test.
* ld-sh/sh64/mix2.sd, ld-sh/sh64/mix2.xd, ld-sh/sh64/shmix-2.s,
ld-sh/sh64/shmix-3.s: New test.
* ld-sh/sh64/sh64.exp: Add new tests to sh64tests.
2000-11-26 Hans-Peter Nilsson <hpn@cygnus.com>
* ld-sh/sh64: New testsuite.
2002-02-08 07:50:02 +01:00
|
|
|
if [istarget sh64*-*-elf] {
|
|
|
|
# This is what gcc passes to ld by default, plus switch to the
|
|
|
|
# "usual" ELF _start (shelf32 normally uses just `start' for COFF
|
|
|
|
# compatibility)
|
|
|
|
set ldflags "-e _start -mshelf32 $ldflags"
|
|
|
|
}
|
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
# If we don't have g++ for the target, mark all tests as untested.
|
1999-05-03 09:29:11 +02:00
|
|
|
if { [which $CXX] == 0 } {
|
2000-10-09 03:35:13 +02:00
|
|
|
foreach testitem $seltests {
|
2000-10-29 18:21:03 +01:00
|
|
|
untested "[lindex $testitem 0]"
|
1999-05-03 09:29:11 +02:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
foreach testitem $seltests {
|
|
|
|
set testname [lindex $testitem 0]
|
|
|
|
set testtype [lindex $testitem 1]
|
|
|
|
set testfile [lindex $testitem 2]
|
|
|
|
set objfile "tmpdir/[file rootname $testfile].o"
|
|
|
|
set ldfile "tmpdir/[file rootname $testfile].x"
|
|
|
|
set failed 0
|
|
|
|
|
|
|
|
set ldargs [lindex $testitem 3]
|
|
|
|
set mustsyms [lindex $testitem 4]
|
|
|
|
set mustnotsyms [lindex $testitem 5]
|
|
|
|
set xfails [lindex $testitem 6]
|
|
|
|
|
|
|
|
foreach xfail_target $xfails {
|
|
|
|
setup_xfail $xfail_target
|
2000-04-12 05:44:15 +02:00
|
|
|
}
|
2004-01-02 09:27:08 +01:00
|
|
|
setup_xfail "alpha*-*" "arc*-*" "d30v*-*" "dlx*-*" "i370*-*" "i860*-*"
|
2005-04-14 David S. Miller <davem@davemloft.net>
bfd/
Add TLS support for 64-bit Sparc ELF.
* elf64-sparc.c (sparc64_elf_dyn_relocs,
sparc64_elf_link_hash_entry, sparc64_elf_obj_tdata): New structs.
(GOT_UNKNOWN, GOT_NORMAL, GOT_TLD_GD, GOT_TLD_IE,
sparc64_elf_hash_entry, sparc64_elf_tdata,
sparc64_elf_local_got_tls_type): New defines.
(sparc64_elf_mkobject): New function.
(sparc64_elf_link_hash_table): Add members for dynamic linker
sections PLT, RELPLT, DYNBSS, and RELBSS. Add tls_ldm_got
uion to track TLS GOT references. Add sym_sec to cache
mappings from local sym to section.
(link_hash_newfunc): New function.
(sparc64_elf_bfd_link_hash_table_create): Rename to
sparc64_elf_link_hash_table_create for consistency.
Pass link_hash_newfunc to _bfd_elf_link_hash_table_init.
(sparc64_elf_create_dynamic_sections): Initialize new section
members of sparc64_elf_link_hash_table. Only init srelbss
if not-shared.
(sparc64_elf_copy_indirect_symbol, sparc64_elf_tls_transition):
New functions.
(SPARC_NOP): Define.
(sparc64_elf_build_plt, sparc64_elf_plt_entry_offset,
sparc64_elf_plt_ptr_offset): Delete.
(sparc64_plt_entry_build): New function to build PLT entries
gradually instread of all at once at the end of linking.
(sparc64_elf_check_relocs): Delete dynobj, sgot, and srelgot
local vars. Get them from sparc64_elf_hash_table instead.
Check early on if r_symndx is in bounds. Handle TLS transitions.
Account for TLS GOT references and DF_STATIC_TLS, as needed.
For TLS relocs, record the tls_type in either
sparc64_elf_local_got_tls_type or sparc64_elf_hash_entry as
appropriate. For R_SPARC_TLS_{GD,LDM}_CALL, emit a reference
to the __tls_get_addr symbol. For PLT relocs, track references
via h->plt.refcount. When R_SPARC_{PC10,PC22,PC_HH22,PC_HM10,
PC_LM22} and h not-NULL, set h->non_got_ref. For global data
symbol references, count the number of relocations needed for
that symbol. For default switch case, don't error, this lets
the TLS relocs not explicitly handled by this function get
accepted.
(sparc64_elf_gc_mark_hook, sparc64_gc_sweep_hook): New functions.
(sparc64_elf_adjust_dynamic_symbol): Remove dynobj local var, get
it from sparc64_elf_hash_table. Store the real PLT offset
in h->plt.offset, and build PLT entries one at a time. Also
get .dynbss section pointer from htab.
(allocate_dynrelocs, readonly_dynrelocs,
sparc64_omit_section_dynsym): New functions.
(sparc64_elf_omit_section_dynsym): Use these new functions as
helpers.
(dtpoff_base, tpoff): New functions.
(sparc64_elf_relocate_section): Kill dynobj, sgot, and splt
locals, get them from sparc64_elf_hash_table. Handle TLS
relocations and refcounting in main relocation loop.
(sparc64_elf_finish_dynamic_symbol): Use
sparc64_elf_link_hash_table. Build PLT entries as we see
them. Handle TLS GOT relocations.
(sparc64_elf_finish_dynamic_sections): Get sgot and dynobj
from sparc64_elf_hash_table. Initialize only PLT header
not all entries since we not build PLT entries one by one.
(elf_backend_copy_indirect_symbol, bfd_elf64_mkobject,
elf_backend_gc_mark_hook, elf_backend_gc_sweep_hook,
elf_backend_can_gc_sections, elf_backend_can_refcount): Define.
ld/testsuite/
* ld-selective/sel-dump.exp: Do not exclude sparc64-*.
* ld-selective/selective.exp: Likewise.
* ld-sparc/sparc.exp: Add {32,64}-bit prefix to test
names so we know which one is failing. Run sparc64 TLS
tests on multi-arch sparc platforms.
* ld-sparc/tls64.sd, ld-sparc/tlssunbin64.dd,
ld-sparc/tlssunbin64.rd, ld/testsuite/ld-sparc/tlssunbin64.sd,
ld-sparc/tlssunbin64.td, ld-sparc/tlssunnopic64.dd,
ld-sparc/tlssunnopic64.rd, ld-sparc/tlssunnopic64.sd,
ld-sparc/tlssunpic64.dd, ld-sparc/tlssunpic64.rd,
ld-sparc/tlssunpic64.sd, ld-sparc/tlssunpic64.td): Update now
that sparc64 ELF does support TLS.
2005-04-14 00:29:36 +02:00
|
|
|
setup_xfail "i960*-*" "mn10200-*" "or32-*" "pj-*"
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
# It's either C or C++ at the moment.
|
|
|
|
if { $testtype == "C++" } {
|
|
|
|
set testflags "$cflags $cxxflags"
|
2004-06-18 17:41:47 +02:00
|
|
|
if [string match "*gcc*" [lindex $CC 0]] {
|
|
|
|
# Starting with 3.4.0, -fvtable-gc is no longer supported and thus
|
|
|
|
# the functionality we try to test for cannot be expected to work.
|
|
|
|
catch "exec -- $CC -dumpversion" version
|
|
|
|
if [regexp "^(\[1-9\]\[0-9\]+|\[4-9\]|3.(\[1-9\]\[0-9\]+|\[4-9\]))\\." $version] {
|
|
|
|
setup_xfail {*-*-*}
|
|
|
|
}
|
|
|
|
}
|
2000-10-09 03:35:13 +02:00
|
|
|
} {
|
|
|
|
set testflags "$cflags"
|
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
# Note that we do not actually *use* CXX; we just add cxxflags for C++
|
|
|
|
# tests. It might have been a buglet originally; now I think better
|
|
|
|
# leave as is.
|
|
|
|
if { ![ld_compile "$CC $testflags" $srcdir/$subdir/$testfile $objfile] } {
|
|
|
|
unresolved $testname
|
2001-08-21 18:04:37 +02:00
|
|
|
continue
|
2000-04-12 05:44:15 +02:00
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2000-12-10 00:44:17 +01:00
|
|
|
# V850 targets need libgcc.a
|
|
|
|
if [istarget v850*-*-elf] {
|
2004-12-01 22:12:39 +01:00
|
|
|
catch "exec $CC -print-libgcc-file-name" libgcc
|
|
|
|
set objfile "$objfile $libgcc"
|
2000-12-10 00:44:17 +01:00
|
|
|
}
|
2002-02-12 12:10:11 +01:00
|
|
|
|
2002-01-14 16:46:50 +01:00
|
|
|
# ARM targets need libgcc.a in THUMB mode so that __call_via_r3 is provided
|
|
|
|
if {[istarget arm-*-*] || [istarget xscale-*-*]} {
|
2004-12-01 22:12:39 +01:00
|
|
|
catch "exec $CC -print-libgcc-file-name" libgcc
|
|
|
|
set objfile "$objfile $libgcc"
|
2002-01-14 16:46:50 +01:00
|
|
|
}
|
2002-02-12 12:10:11 +01:00
|
|
|
|
|
|
|
# HPPA linux targets need libgcc.a for millicode routines ($$dyncall).
|
|
|
|
if [istarget hppa*-*-linux*] {
|
|
|
|
catch "exec $CC -print-libgcc-file-name" libgcc
|
|
|
|
set objfile "$objfile $libgcc"
|
|
|
|
}
|
|
|
|
|
2001-02-08 19:57:47 +01:00
|
|
|
# m6811/m6812 code has references to soft registers.
|
|
|
|
if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
|
|
|
|
set objfile "$objfile --defsym _.frame=0 --defsym _.d1=0"
|
|
|
|
set objfile "$objfile --defsym _.d2=0"
|
|
|
|
}
|
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
if ![ld_simple_link $ld $ldfile "$ldflags [join $ldargs] $objfile"] {
|
|
|
|
fail $testname
|
|
|
|
continue
|
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2001-07-24 13:09:24 +02:00
|
|
|
if ![ld_nm $nm --demangle $ldfile] {
|
2000-10-09 03:35:13 +02:00
|
|
|
unresolved $testname
|
|
|
|
continue
|
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2001-07-24 13:09:24 +02:00
|
|
|
# Must make V2 demangled names look like V3
|
|
|
|
foreach nm_output_key [array names nm_output] {
|
|
|
|
if [regsub \\(void\\) $nm_output_key () new_nm_output_key] {
|
|
|
|
set nm_output($new_nm_output_key) nm_output($nm_output_key)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-02-12 12:10:11 +01:00
|
|
|
# Check each mandated symbol and optionally mandated values.
|
2000-10-09 03:35:13 +02:00
|
|
|
foreach mustsym $mustsyms {
|
|
|
|
if { [llength [concat $mustsym]] == 1 } {
|
|
|
|
if { ![info exists nm_output($mustsym)] } {
|
|
|
|
verbose -log "$testname: missing $mustsym"
|
|
|
|
fail $testname
|
|
|
|
set failed 1
|
|
|
|
break
|
|
|
|
}
|
|
|
|
} {
|
|
|
|
set mustsymname [lindex $mustsym 0]
|
|
|
|
set mustsymvalue [lindex $mustsym 1]
|
|
|
|
if { ![info exists nm_output($mustsymname)] } {
|
|
|
|
verbose -log "$testname: missing $mustsymname"
|
|
|
|
fail $testname
|
|
|
|
set failed 1
|
|
|
|
break
|
|
|
|
} {
|
|
|
|
if { $nm_output($mustsymname) != $mustsymvalue } {
|
|
|
|
verbose -log "$testname: $mustsymname != $mustsymvalue"
|
|
|
|
verbose -log "is instead $nm_output($mustsymname)"
|
|
|
|
fail $testname
|
|
|
|
set failed 1
|
|
|
|
break
|
2000-04-12 14:47:25 +02:00
|
|
|
}
|
|
|
|
}
|
2000-04-12 05:44:15 +02:00
|
|
|
}
|
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
if { $failed != 0 } {
|
|
|
|
continue
|
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
# Check each unwanted symbol, or that symbols do not have specific
|
|
|
|
# values.
|
|
|
|
foreach mustnotsym $mustnotsyms {
|
|
|
|
if { [llength [concat $mustnotsym]] == 1 } {
|
|
|
|
if { [info exists nm_output($mustnotsym)] } {
|
|
|
|
verbose -log "$testname: $mustnotsym == $nm_output($mustnotsym)"
|
|
|
|
fail $testname
|
|
|
|
set failed 1
|
|
|
|
break
|
|
|
|
}
|
|
|
|
} {
|
|
|
|
set mustnotsymname [lindex $mustnotsym 0]
|
|
|
|
set mustnotsymvalue [lindex $mustnotsym 1]
|
|
|
|
if { [info exists nm_output($mustnotsymname)] \
|
|
|
|
&& $nm_output($mustnotsymname) == $mustnotsymvalue} {
|
|
|
|
verbose -log "$testname: $mustnotsymname == $mustnotsymvalue"
|
|
|
|
fail $testname
|
|
|
|
set failed 1
|
|
|
|
break
|
2000-04-12 05:44:15 +02:00
|
|
|
}
|
1999-05-03 09:29:11 +02:00
|
|
|
}
|
|
|
|
}
|
2000-09-29 00:57:26 +02:00
|
|
|
|
2000-10-09 03:35:13 +02:00
|
|
|
if { $failed == 0 } {
|
|
|
|
pass $testname
|
2000-09-29 00:57:26 +02:00
|
|
|
}
|
|
|
|
}
|