* ld-linkonce/linkonce.exp: New file.
authorHans-Peter Nilsson <hp@axis.com>
Sat, 29 Sep 2001 13:01:17 +0000 (13:01 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Sat, 29 Sep 2001 13:01:17 +0000 (13:01 +0000)
* ld-linkonce/x.s, ld-linkonce/y.s, ld-linkonce/zeroeh.ld,
ld-linkonce/zeroehl32.d: New test.

ld/testsuite/ChangeLog
ld/testsuite/ld-linkonce/linkonce.exp [new file with mode: 0644]
ld/testsuite/ld-linkonce/x.s [new file with mode: 0644]
ld/testsuite/ld-linkonce/y.s [new file with mode: 0644]
ld/testsuite/ld-linkonce/zeroeh.ld [new file with mode: 0644]
ld/testsuite/ld-linkonce/zeroehl32.d [new file with mode: 0644]

index 9f1df9b54f26f17c19c5417fe45d5bfdac428003..b844c9983b8542c30f382ab36eea15fd904cde7c 100644 (file)
@@ -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 (file)
index 0000000..d3be491
--- /dev/null
@@ -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 (file)
index 0000000..6807cfc
--- /dev/null
@@ -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 (file)
index 0000000..b8ae3d2
--- /dev/null
@@ -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 (file)
index 0000000..6550c17
--- /dev/null
@@ -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 (file)
index 0000000..ce91895
--- /dev/null
@@ -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