1 # Expect script
for tests
for >64k sections
2 # Copyright
2002, 2003, 2006, 2007, 2008 Free Software Foundation
, Inc.
4 # This file is part of the GNU Binutils.
6 # This
program is free software
; you can redistribute it and
/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation
; either version
3 of the License
, or
9 #
(at your option
) any later version.
11 # This
program is distributed in the hope that it will be useful
,
12 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License
for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this
program; if not
, write to the Free Software
18 # Foundation
, Inc.
, 51 Franklin Street
- Fifth Floor
, Boston
,
21 # Written by Hans
-Peter Nilsson
(hp@axis.com
)
24 # Exclude non
-ELF targets.
30 # Test
>64k sections
, with and without
-r. First
, create the assembly
31 # files. Have a relocation to another section and one within the local
37 if { ![runtest_file_p $runtests $test1
] \
38 && ![runtest_file_p $runtests $test2
] } {
44 set secs_per_file
1000
45 for { set i
0 } { $i
< $max_sec
/ $secs_per_file
} { incr i
} {
46 set sfile
"$objdir/tmpdir/sec64-$i.s"
48 if [catch
{ set ofd
[open $sfile w
] } x
] {
56 puts $ofd
" .global start"
58 puts $ofd
" .global _start"
60 puts $ofd
" .global __start"
62 puts $ofd
" .global main"
64 puts $ofd
" .global foo_0"
65 puts $ofd
"foo_0: .dc.a 0"
68 # Make sure the used section is not covered by common linker scripts.
69 # They should
get separate section entries even without
-r.
70 puts $ofd
" .altmacro"
71 puts $ofd
" .macro sec secn, secp"
72 puts $ofd
" .section .foo.\\secn,\"ax\""
73 puts $ofd
" .global foo_\\secn"
74 puts $ofd
"foo_\\secn:"
75 puts $ofd
" .dc.a foo_\\secp"
76 puts $ofd
"bar_\\secn:"
77 puts $ofd
" .dc.a bar_\\secn"
79 puts $ofd
" secn = [expr $i * $secs_per_file]"
80 puts $ofd
" .rept $secs_per_file"
81 puts $ofd
" secn = secn + 1"
82 puts $ofd
" sec %(secn), %(secn-1)"
88 if [catch
{ set ofd
[open
"tmpdir/$test1.d" w] } x] {
95 # The
ld-r linked file will contain relocation
-sections too
, so make it
96 # half the size in order to try and keep the test
-time down.
98 # The m32r target generates both REL and RELA relocs
(for historical
99 # reasons
) so the expected number of sections will be much more than
100 #
68000, which throws this particular test right
off.
101 if {![istarget
"m32r-*-*"]} then {
102 foreach sfile
[lrange $sfiles
0 [expr
[llength $sfiles
] / 2]] {
103 puts $ofd
"#source: $sfile"
106 puts $ofd
"#readelf: -W -Ss"
107 puts $ofd
"There are 680.. section headers.*:"
109 puts $ofd
" \\\[ 0\\\] .* 680\[0-9\]\[0-9\]\[ \]+0\[ \]+0"
111 puts $ofd
" \\\[ \[0-9\]\\\] \.foo\.1\[ \]+PROGBITS\[ \]+.*"
113 puts $ofd
" \\\[65279\\\] (.rel\[a\]?)?\\.foo\\.\[0-9\]+ .*"
114 puts $ofd
" \\\[65280\\\] (.rel\[a\]?)?\\.foo\\.\[0-9\]+ .*"
116 puts $ofd
" 340..: 0+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+68... "
118 puts $ofd
" 340..: 0+(2|4|8)\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[23\] bar_1$"
120 puts $ofd
".* bar_34000$"
122 # Global symbols are not in
"alphanumeric" order, so we just check
123 # that the first and the last are present in
any order
(assuming no
125 puts $ofd
".* (\[0-9\] foo_1|68... foo_34000)$"
127 puts $ofd
".* (\[0-9\] foo_1|68... foo_34000)$"
130 run_dump_test
"tmpdir/$test1"
133 if [catch
{ set ofd
[open
"tmpdir/$test2.d" w] } x] {
138 foreach sfile $sfiles
{ puts $ofd
"#source: $sfile" }
139 if { [istarget spu
*-*-*] } {
140 puts $ofd
"#ld: --local-store 0:0"
144 puts $ofd
"#readelf: -W -Ss"
145 puts $ofd
"There are 660.. section headers.*:"
147 puts $ofd
" \\\[ 0\\\] .* 660..\[ \]+0\[ \]+0"
149 puts $ofd
" \\\[65279\\\] \\.foo\\.\[0-9\]+ .*"
150 puts $ofd
" \\\[65280\\\] \\.foo\\.\[0-9\]+ .*"
152 puts $ofd
" 660..: \[0-9a-f\]+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+660.. "
154 puts $ofd
" 660..: \[0-9a-f\]+\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[0-9\] bar_1$"
156 puts $ofd
".* bar_66000$"
158 # Global symbols are not in
"alphanumeric" order, so we just check
159 # that the first and the last are present in
any order
(assuming no
161 puts $ofd
".* (\[0-9\] foo_1|66... foo_66000)$"
163 puts $ofd
".* (\[0-9\] foo_1|66... foo_66000)$"
166 run_dump_test
"tmpdir/$test2"
168 for { set i
1 } { $i
< $max_sec
/ $secs_per_file
} { incr i
} {
169 catch
"exec rm -f tmpdir/dump$i.o" status