aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog10
-rw-r--r--ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t11
-rw-r--r--ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t11
-rw-r--r--ld/testsuite/ld-elf/sec-to-seg-script-same-page.t10
-rw-r--r--ld/testsuite/ld-elf/sec-to-seg.exp97
-rw-r--r--ld/testsuite/ld-elf/sec-to-seg1.s9
-rw-r--r--ld/testsuite/ld-elf/sec-to-seg2.s13
7 files changed, 161 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 6d881ca..93a5e41 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2008-07-30 Nick Clifton <nickc@redhat.com>
+
+ * ld-elf/sec-to-seg.exp: New test: Checks the assignment of
+ sections to segments.
+ * ld-elf/sec-to-seg1.s: Test source file.
+ * ld-elf/sec-to-seg2.s: Test source file.
+ * ld-elf/sec-to-seg-script-same-page.t: Test linker script.
+ * ld-elf/sec-to-seg-script-adjoining-pages.t: Test linker script.
+ * ld-elf/sec-to-seg-script-disjoint-pages.t: Test linker script.
+
2008-07-28 Alexandre Oliva <aoliva@redhat.com>
* ld-i386/tlsbindesc.dd: Adjust incorrect expectations for LD to
diff --git a/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t b/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t
new file mode 100644
index 0000000..763fcb7
--- /dev/null
+++ b/ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ . = 0x1000;
+ .sec1 : { *sec-to-seg1.o(.rodata) }
+ . += CONSTANT(MAXPAGESIZE);
+ .sec2 : { *sec-to-seg2.o(.rodata) }
+
+ .data : { *(.data) } /* For hppa64. */
+
+ /DISCARD/ : {*(*) }
+}
diff --git a/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t b/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t
new file mode 100644
index 0000000..25023cc
--- /dev/null
+++ b/ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ . = 0x1000;
+ .sec1 : { *sec-to-seg1.o(.rodata) }
+ . += CONSTANT(MAXPAGESIZE) * 2;
+ .sec2 : { *sec-to-seg2.o(.rodata) }
+
+ .data : { *(.data) } /* For hppa64. */
+
+ /DISCARD/ : {*(*) }
+}
diff --git a/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t b/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t
new file mode 100644
index 0000000..2b50f7e
--- /dev/null
+++ b/ld/testsuite/ld-elf/sec-to-seg-script-same-page.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ . = 0x1000;
+ .sec1 : { *sec-to-seg1.o(.rodata) }
+ .sec2 : { *sec-to-seg2.o(.rodata) }
+
+ .data : { *(.data) } /* For hppa64. */
+
+ /DISCARD/ : {*(*) }
+}
diff --git a/ld/testsuite/ld-elf/sec-to-seg.exp b/ld/testsuite/ld-elf/sec-to-seg.exp
new file mode 100644
index 0000000..a576fce
--- /dev/null
+++ b/ld/testsuite/ld-elf/sec-to-seg.exp
@@ -0,0 +1,97 @@
+# Test the assigment of sections to segments.
+#
+# Copyright 2008 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of the GNU Binutils.
+#
+# This program 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+set testname "assignment of ELF sections to segments"
+
+if {! [is_elf_format] } {
+ unsupported $testname
+ return
+}
+
+if { ! [ld_assemble $as $srcdir/$subdir/sec-to-seg1.s tmpdir/sec-to-seg1.o]
+ || ! [ld_assemble $as $srcdir/$subdir/sec-to-seg2.s tmpdir/sec-to-seg2.o]} then {
+ unresolved $testname
+ return
+}
+
+proc sec_to_seg_test { testname scriptname same_seg } {
+ global srcdir
+ global subdir
+ global ld
+ global exec_output
+ global READELF
+
+ if {! [ld_simple_link $ld tmpdir/sec-to-seg "-T $srcdir/$subdir/$scriptname tmpdir/sec-to-seg1.o tmpdir/sec-to-seg2.o"] } then {
+ fail $testname
+ return 0
+ }
+
+ send_log "$READELF --program-headers --section-headers tmpdir/sec-to-seg\n"
+ set exec_output [run_host_cmd "$READELF" "--program-headers --section-headers tmpdir/sec-to-seg"]
+
+ if { $same_seg == 1 } {
+ if {! [regexp ".*.sec1 .sec2" $exec_output] } {
+ fail $testname
+ return 0
+ }
+ } else {
+ if { [regexp ".*.sec1 .sec2" $exec_output] } {
+ fail $testname
+ return 0
+ }
+ }
+
+ pass $testname
+ return 1
+}
+
+# Assuming a pagesize of 0x1000 then:
+#
+# Test Sec1 End Sec 2 Start Expected Result
+# ---- -------- ----------- ---------------
+# A 00001042 00001043 Both sections on same page: assign to same segment.
+# B 00001042 00002044 Sections on adjacent pages: assign to same segment.
+# C 00001042 00003044 Sections on disjoint pages: assign to separate segments.
+
+# These targets have a pagesize of 1, so they will always end up
+# placing the two sections in separate segments in the B test.
+if { [istarget avr-*-*]
+ || [istarget cr16-*-*]
+ || [istarget crx-*-*]
+ || [istarget dlx-*-*]
+ || [istarget h8300-*-*]
+ || [istarget ip2k-*-*]
+ || [istarget m32r-*-*]
+ || [istarget m88k-*-*]
+ || [istarget msp430-*-*]
+ } {
+ set B_test_same_seg 0
+} else {
+ set B_test_same_seg 1
+}
+
+sec_to_seg_test "assignment of ELF sections to segments (same page)" "sec-to-seg-script-same-page.t" 1
+sec_to_seg_test "assignment of ELF sections to segments (adjacent pages)" "sec-to-seg-script-adjoining-pages.t" $B_test_same_seg
+sec_to_seg_test "assignment of ELF sections to segments (disjoint pages)" "sec-to-seg-script-disjoint-pages.t" 0
+
+
+# FIXME: Add more tests to check other rules of section to segment assignment.
diff --git a/ld/testsuite/ld-elf/sec-to-seg1.s b/ld/testsuite/ld-elf/sec-to-seg1.s
new file mode 100644
index 0000000..7c9f479
--- /dev/null
+++ b/ld/testsuite/ld-elf/sec-to-seg1.s
@@ -0,0 +1,9 @@
+ .file "sec-to-seg1.s"
+
+ .section .rodata
+ .align 2
+ .ascii "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\000"
+ .align 2
+ .ascii "00000000000000000000000000000000\000"
+
+
diff --git a/ld/testsuite/ld-elf/sec-to-seg2.s b/ld/testsuite/ld-elf/sec-to-seg2.s
new file mode 100644
index 0000000..b1dd078
--- /dev/null
+++ b/ld/testsuite/ld-elf/sec-to-seg2.s
@@ -0,0 +1,13 @@
+ .file "sec-to-seg2.s"
+
+ .section .rodata
+ .align 2
+ .ascii "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\000"
+ .align 2
+ .ascii "55555555555555555555555555555555\000"
+ .align 2
+ .ascii "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\000"
+ .align 2
+ .ascii "99999999999999999999999999999999\000"
+
+