* 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.
This commit is contained in:
Nick Clifton 2008-07-30 10:28:31 +00:00
parent 081ba1b3c0
commit 2e658c8781
7 changed files with 161 additions and 0 deletions

View File

@ -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

View File

@ -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/ : {*(*) }
}

View File

@ -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/ : {*(*) }
}

View File

@ -0,0 +1,10 @@
SECTIONS
{
. = 0x1000;
.sec1 : { *sec-to-seg1.o(.rodata) }
.sec2 : { *sec-to-seg2.o(.rodata) }
.data : { *(.data) } /* For hppa64. */
/DISCARD/ : {*(*) }
}

View File

@ -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.

View File

@ -0,0 +1,9 @@
.file "sec-to-seg1.s"
.section .rodata
.align 2
.ascii "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\000"
.align 2
.ascii "00000000000000000000000000000000\000"

View File

@ -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"