diff options
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-linkonce/linkonce.exp | 35 | ||||
-rw-r--r-- | ld/testsuite/ld-linkonce/x.s | 26 | ||||
-rw-r--r-- | ld/testsuite/ld-linkonce/y.s | 33 | ||||
-rw-r--r-- | ld/testsuite/ld-linkonce/zeroeh.ld | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-linkonce/zeroehl32.d | 19 |
6 files changed, 123 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 9f1df9b..b844c99 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2001-09-29 Hans-Peter Nilsson <hp@axis.com> + + * ld-linkonce/linkonce.exp: New file. + * ld-linkonce/x.s, ld-linkonce/y.s, ld-linkonce/zeroeh.ld, + ld-linkonce/zeroehl32.d: New test. + 2001-09-25 H.J. Lu <hjl@gnu.org> * ld-elfweak/dso.dsym: Updated for alpha. diff --git a/ld/testsuite/ld-linkonce/linkonce.exp b/ld/testsuite/ld-linkonce/linkonce.exp new file mode 100644 index 0000000..d3be491 --- /dev/null +++ b/ld/testsuite/ld-linkonce/linkonce.exp @@ -0,0 +1,35 @@ +# Expect script for ld linkonce tests +# Copyright 2001 Free Software Foundation, Inc. +# +# 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. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Written by Hans-Peter Nilsson (hp@axis.com) +# + +# Test for ELF here (or really, .gnu.linkonce functionality), so we don't +# have to qualify on ELF specifically in every .d-file. + +if { ![istarget *-*-linux*] && ![istarget *-*-gnu] && ![istarget *-*-elf] } { + return +} + +load_lib ld-lib.exp + +set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]] +for { set i 0 } { $i < [llength $rd_test_list] } { incr i } { + # We need to strip the ".d", but can leave the dirname. + verbose [file rootname [lindex $rd_test_list $i]] + run_dump_test [file rootname [lindex $rd_test_list $i]] +} diff --git a/ld/testsuite/ld-linkonce/x.s b/ld/testsuite/ld-linkonce/x.s new file mode 100644 index 0000000..6807cfc --- /dev/null +++ b/ld/testsuite/ld-linkonce/x.s @@ -0,0 +1,26 @@ +;# Main file, x.s, with the program (_start) referring to two +;# linkonce functions fn and fn2. The functions fn and fn2 are +;# supposed to be equivalent of C++ template instantiations; the +;# main file instantiates fn. There's the equivalent of an FDE +;# entry in .eh_frame, referring to fn via a local label. + + .text + .global _start +_start: + .long fn + .long fn2 + + .section .gnu.linkonce.t.fn,"ax",@progbits + .weak fn + .type fn,@function +fn: +.La: + .long 1 + .long 2 +.Lb: + .size fn,.Lb-.La + + .section .eh_frame,"aw",@progbits + .long 2 + .long .La + .long .Lb-.La diff --git a/ld/testsuite/ld-linkonce/y.s b/ld/testsuite/ld-linkonce/y.s new file mode 100644 index 0000000..b8ae3d2 --- /dev/null +++ b/ld/testsuite/ld-linkonce/y.s @@ -0,0 +1,33 @@ +;# Library file y.s has linkonce entries for fn and fn2. Note +;# that this version of fn has different code, as if compiled +;# with different optimization flags than the one in x.s (not +;# important for this test, though). The reference from +;# .eh_frame to the linkonce-excluded fn2 must be zero, or g++ +;# EH will not work. + + .section .gnu.linkonce.t.fn2,"ax",@progbits + .weak fn2 + .type fn2,@function +fn2: +.Lc: + .long 3 +.Ld: + .size fn2,.Ld-.Lc + + .section .gnu.linkonce.t.fn,"ax",@progbits + .weak fn + .type fn,@function +fn: +.Le: + .long 4 +.Lf: + .size fn,.Lf-.Le + + .section .eh_frame,"aw",@progbits + .long 7 + .long .Lc + .long .Ld-.Lc + + .long 0x6066 + .long .Le + .long .Lf-.Le diff --git a/ld/testsuite/ld-linkonce/zeroeh.ld b/ld/testsuite/ld-linkonce/zeroeh.ld new file mode 100644 index 0000000..6550c17 --- /dev/null +++ b/ld/testsuite/ld-linkonce/zeroeh.ld @@ -0,0 +1,4 @@ +SECTIONS { + .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) } + .eh_frame 0x2000 : { *(.eh_frame) } +} diff --git a/ld/testsuite/ld-linkonce/zeroehl32.d b/ld/testsuite/ld-linkonce/zeroehl32.d new file mode 100644 index 0000000..ce91895 --- /dev/null +++ b/ld/testsuite/ld-linkonce/zeroehl32.d @@ -0,0 +1,19 @@ +#source: x.s +#source: y.s +#ld: -Ttext 0xa00 -T $srcdir/$subdir/zeroeh.ld +#objdump: -s +#target: cris-*-elf cris-*-linux* i?86-*-elf i?86-*-linux* +#xfail: *-*-* + +# The word at address 201c, for the linkonce-excluded section, must be zero. + +.*: file format elf32.* + +Contents of section \.text: + 0a00 080a0000 100a0000 01000000 02000000 .* + 0a10 03000000 .* +Contents of section \.eh_frame: + 2000 02000000 080a0000 08000000 07000000 .* + 2010 100a0000 04000000 66600000 00000000 .* + 2020 04000000 .* +#pass |