aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-linkonce/linkonce.exp35
-rw-r--r--ld/testsuite/ld-linkonce/x.s26
-rw-r--r--ld/testsuite/ld-linkonce/y.s33
-rw-r--r--ld/testsuite/ld-linkonce/zeroeh.ld4
-rw-r--r--ld/testsuite/ld-linkonce/zeroehl32.d19
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