* 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:
parent
081ba1b3c0
commit
2e658c8781
@ -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
|
||||
|
11
ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t
Normal file
11
ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t
Normal 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/ : {*(*) }
|
||||
}
|
11
ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t
Normal file
11
ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t
Normal 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/ : {*(*) }
|
||||
}
|
10
ld/testsuite/ld-elf/sec-to-seg-script-same-page.t
Normal file
10
ld/testsuite/ld-elf/sec-to-seg-script-same-page.t
Normal file
@ -0,0 +1,10 @@
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x1000;
|
||||
.sec1 : { *sec-to-seg1.o(.rodata) }
|
||||
.sec2 : { *sec-to-seg2.o(.rodata) }
|
||||
|
||||
.data : { *(.data) } /* For hppa64. */
|
||||
|
||||
/DISCARD/ : {*(*) }
|
||||
}
|
97
ld/testsuite/ld-elf/sec-to-seg.exp
Normal file
97
ld/testsuite/ld-elf/sec-to-seg.exp
Normal 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.
|
9
ld/testsuite/ld-elf/sec-to-seg1.s
Normal file
9
ld/testsuite/ld-elf/sec-to-seg1.s
Normal file
@ -0,0 +1,9 @@
|
||||
.file "sec-to-seg1.s"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
.ascii "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\000"
|
||||
.align 2
|
||||
.ascii "00000000000000000000000000000000\000"
|
||||
|
||||
|
13
ld/testsuite/ld-elf/sec-to-seg2.s
Normal file
13
ld/testsuite/ld-elf/sec-to-seg2.s
Normal 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"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user