From 3396aee2dd5c2073b6c482b8a7833638403cb2fd Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Sat, 29 Sep 2001 13:01:17 +0000 Subject: * ld-linkonce/linkonce.exp: New file. * ld-linkonce/x.s, ld-linkonce/y.s, ld-linkonce/zeroeh.ld, ld-linkonce/zeroehl32.d: New test. --- ld/testsuite/ld-linkonce/linkonce.exp | 35 +++++++++++++++++++++++++++++++++++ ld/testsuite/ld-linkonce/x.s | 26 ++++++++++++++++++++++++++ ld/testsuite/ld-linkonce/y.s | 33 +++++++++++++++++++++++++++++++++ ld/testsuite/ld-linkonce/zeroeh.ld | 4 ++++ ld/testsuite/ld-linkonce/zeroehl32.d | 19 +++++++++++++++++++ 5 files changed, 117 insertions(+) create mode 100644 ld/testsuite/ld-linkonce/linkonce.exp create mode 100644 ld/testsuite/ld-linkonce/x.s create mode 100644 ld/testsuite/ld-linkonce/y.s create mode 100644 ld/testsuite/ld-linkonce/zeroeh.ld create mode 100644 ld/testsuite/ld-linkonce/zeroehl32.d (limited to 'ld/testsuite/ld-linkonce') diff --git a/ld/testsuite/ld-linkonce/linkonce.exp b/ld/testsuite/ld-linkonce/linkonce.exp new file mode 100644 index 0000000000..d3be491a8c --- /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 0000000000..6807cfcdec --- /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 0000000000..b8ae3d2964 --- /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 0000000000..6550c17db9 --- /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 0000000000..ce91895c03 --- /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 -- cgit v1.2.1