1 # Test the assigment of sections to segments.
3 # Copyright
2008, 2010 Free Software Foundation
, Inc.
4 # Contributed by Red Hat.
6 # This file is part of the GNU Binutils.
8 # This
program is free software
; you can redistribute it and
/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation
; either version
3 of the License
, or
11 #
(at your option
) any later version.
13 # This
program is distributed in the hope that it will be useful
,
14 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License
for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this
program; if not
, write to the Free Software
20 # Foundation
, Inc.
, 51 Franklin Street
- Fifth Floor
, Boston
,
23 set testname
"assignment of ELF sections to segments"
25 if {! [is_elf_format
] } {
30 if { ! [ld_assemble $as $srcdir
/$subdir
/sec
-to
-seg1.s tmpdir
/sec
-to
-seg1.o
]
31 ||
! [ld_assemble $as $srcdir
/$subdir
/sec
-to
-seg2.s tmpdir
/sec
-to
-seg2.o
]} then {
36 proc sec_to_seg_test
{ testname scriptname same_seg
} {
43 if {! [ld_simple_link $
ld tmpdir
/sec
-to
-seg
"-T $srcdir/$subdir/$scriptname tmpdir/sec-to-seg1.o tmpdir/sec-to-seg2.o"] } then {
48 send_log
"$READELF --program-headers --section-headers tmpdir/sec-to-seg\n"
49 set exec_output
[run_host_cmd
"$READELF" "--program-headers --section-headers tmpdir/sec-to-seg"]
51 if { $same_seg
== 1 } {
52 if {! [regexp
".*.sec1 .sec2" $exec_output] } {
57 if { [regexp
".*.sec1 .sec2" $exec_output] } {
67 # Assuming a
pagesize of
0x1000 then:
69 # Test Sec1 End Sec
2 Start Expected Result
70 #
---- -------- ----------- ---------------
71 # A
00001042 00001043 Both sections
on same
page: assign to same segment.
72 # B
00001042 00002044 Sections
on adjacent pages
: assign to same segment.
73 # C
00001042 00003044 Sections
on disjoint pages
: assign to separate segments.
75 # These targets have a
pagesize of
1, so they will always end up
76 # placing the two sections in separate segments in the B test.
77 if { [istarget avr
-*-*]
78 ||
[istarget cr16
-*-*]
81 ||
[istarget h8300
-*-*]
82 ||
[istarget i960
-*-*]
83 ||
[istarget ip2k
-*-*]
84 ||
[istarget m32r
-*-*]
85 ||
[istarget m88k
-*-*]
86 ||
[istarget microblaze
-*-*]
87 ||
[istarget moxie
-*-*]
88 ||
[istarget msp430
-*-*]
96 sec_to_seg_test
"assignment of ELF sections to segments (same page)" "sec-to-seg-script-same-page.t" 1
97 sec_to_seg_test
"assignment of ELF sections to segments (adjacent pages)" "sec-to-seg-script-adjoining-pages.t" $B_test_same_seg
98 sec_to_seg_test
"assignment of ELF sections to segments (disjoint pages)" "sec-to-seg-script-disjoint-pages.t" 0
101 # FIXME
: Add more tests to check other rules of section to segment assignment.