X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=ld%2Ftestsuite%2Fld-elf%2Fsec-to-seg.exp;fp=ld%2Ftestsuite%2Fld-elf%2Fsec-to-seg.exp;h=a576fcefcd22fdeb317dc04f9483fbedeab97b8b;hp=0000000000000000000000000000000000000000;hb=d5da4f291af551c0b8b79e1d4a9b173d60e5c10e;hpb=7b5ea4fcdf2819e070665ab5610f8b48e3867c10 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.