Commit | Line | Data |
---|---|---|
851b0ff7 L |
1 | # Expect script for run_dump_test based ld-m68k GOT tests. |
2 | # Copyright 008 Free Software Foundation, Inc. | |
3 | # | |
4 | # This file is part of the GNU Binutils. | |
5 | # | |
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. | |
10 | # | |
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. | |
15 | # | |
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, | |
19 | # MA 02110-1301, USA. | |
20 | # | |
21 | ||
22 | if { ![is_elf_format] || ![istarget m68k-*-*] } { | |
23 | return | |
24 | } | |
25 | ||
26 | # 1 - 1 | |
27 | # 2 - 8189 | |
28 | # 3 - 8190 | |
29 | # 4 - 16384 | |
30 | # 5 - 16385 | |
31 | ||
32 | proc gen_got_test { testname } { | |
33 | global srcdir | |
34 | global subdir | |
35 | ||
36 | if [catch { set ofd [open "tmpdir/$testname.s" w] } msg] { | |
37 | perror "$msg" | |
38 | unresolved $testname | |
39 | return | |
40 | } | |
41 | ||
42 | switch -- $testname { | |
43 | "got-12" { | |
44 | set start 1 | |
45 | set count 8189 | |
46 | set xgot 0 | |
47 | } | |
48 | "got-13" { | |
49 | set start 1 | |
50 | set count 8190 | |
51 | set xgot 0 | |
52 | } | |
53 | "got-14" { | |
54 | set start 1 | |
55 | set count 16384 | |
56 | set xgot 0 | |
57 | } | |
58 | "got-15" { | |
59 | set start 1 | |
60 | set count 16385 | |
61 | set xgot 0 | |
62 | } | |
63 | "got-34" { | |
64 | set start 8190 | |
65 | set count 16384 | |
66 | set xgot 0 | |
67 | } | |
68 | "got-35" { | |
69 | set start 8190 | |
70 | set count 16385 | |
71 | set xgot 0 | |
72 | } | |
73 | "xgot-15" { | |
74 | set start 1 | |
75 | set count 16385 | |
76 | set xgot 1 | |
77 | } | |
78 | } | |
79 | ||
80 | set func [format "sum_%05d_%05d" $start $count] | |
81 | puts $ofd "\t.text" | |
82 | puts $ofd "\t.align 2" | |
83 | puts $ofd "\t.globl $func" | |
84 | puts $ofd "\t.type $func,@function" | |
85 | puts $ofd "$func:" | |
86 | puts $ofd "\tlink.w %fp,#0" | |
87 | puts $ofd "\tmove.l %a5,-(%sp)" | |
88 | puts $ofd "\tmove.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %a5" | |
89 | puts $ofd "\tlea (-6, %pc, %a5), %a5" | |
90 | ||
91 | if { $xgot == 1 } { | |
92 | set symbol [format "a%05d" $start] | |
93 | incr start | |
94 | puts $ofd "\tlea $symbol@GOT,%a0" | |
95 | puts $ofd "\tadd.l %a5,%a0" | |
96 | puts $ofd "\tmove.l (%a0),%a0" | |
97 | puts $ofd "\tmove.l (%a0),%d1" | |
98 | for { set i $start } { $i < $count } { incr i } { | |
99 | set symbol [format "a%05d" $i] | |
100 | puts $ofd "\tlea $symbol@GOT,%a0" | |
101 | puts $ofd "\tadd.l %a5,%a0" | |
102 | puts $ofd "\tmove.l (%a0),%a0" | |
103 | puts $ofd "\tmove.l (%a0),%d0" | |
104 | puts $ofd "\tadd.l %d0,%d1" | |
105 | } | |
106 | set symbol [format "a%05d" $count] | |
107 | puts $ofd "\tlea $symbol@GOT,%a0" | |
108 | puts $ofd "\tadd.l %a5,%a0" | |
109 | puts $ofd "\tmove.l (%a0),%a0" | |
110 | puts $ofd "\tmove.l (%a0),%d0" | |
111 | puts $ofd "\tadd.l %d1,%d0" | |
112 | } else { | |
113 | set symbol [format "a%05d" $start] | |
114 | incr start | |
115 | puts $ofd "\tmove.l $symbol@GOT(%a5),%d0" | |
116 | puts $ofd "\tmove.l %d0,%a0" | |
117 | puts $ofd "\tmove.l (%a0),%d1" | |
118 | for { set i $start } { $i < $count } { incr i } { | |
119 | set symbol [format "a%05d" $i] | |
120 | puts $ofd "\tmove.l $symbol@GOT(%a5),%d0" | |
121 | puts $ofd "\tmove.l %d0,%a0" | |
122 | puts $ofd "\tmove.l (%a0),%d0" | |
123 | puts $ofd "\tadd.l %d0,%d1" | |
124 | } | |
125 | set symbol [format "a%05d" $count] | |
126 | puts $ofd "\tmove.l $symbol@GOT(%a5),%d0" | |
127 | puts $ofd "\tmove.l %d0,%a0" | |
128 | puts $ofd "\tmove.l (%a0),%d0" | |
129 | puts $ofd "\tadd.l %d1,%d0" | |
130 | } | |
131 | ||
132 | puts $ofd "\tmove.l (%sp)+,%a5" | |
133 | puts $ofd "\tunlk %fp" | |
134 | puts $ofd "\trts" | |
135 | puts $ofd "\t.size $func, .-$func" | |
136 | ||
137 | close $ofd | |
138 | } | |
139 | ||
140 | proc got_test { testname } { | |
141 | global srcdir | |
142 | global subdir | |
143 | global objdir | |
144 | ||
145 | if [catch { set ifd [open "$srcdir/$subdir/$testname.d" r] } msg] { | |
146 | perror "$msg" | |
147 | unresolved $testname | |
148 | return | |
149 | } | |
150 | if [catch { set ofd [open "tmpdir/$testname.d" w] } msg] { | |
151 | perror "$msg" | |
152 | unresolved $testname | |
153 | return | |
154 | } | |
155 | ||
156 | switch -- $testname { | |
157 | "got-single-12-ok" { | |
158 | puts $ofd "#source: $objdir/tmpdir/got-12.s" | |
159 | set count 8189 | |
160 | } | |
161 | "got-single-13-er" { | |
162 | puts $ofd "#source: $objdir/tmpdir/got-13.s" | |
163 | set count 0 | |
164 | } | |
165 | "got-negative-14-ok" { | |
166 | puts $ofd "#source: $objdir/tmpdir/got-14.s" | |
167 | set count 16384 | |
168 | } | |
169 | "got-negative-15-er" { | |
170 | puts $ofd "#source: $objdir/tmpdir/got-15.s" | |
171 | set count 0 | |
172 | } | |
173 | "got-negative-12-13-14-34-ok" { | |
174 | puts $ofd "#source: $objdir/tmpdir/got-12.s" | |
175 | puts $ofd "#source: $objdir/tmpdir/got-13.s" | |
176 | puts $ofd "#source: $objdir/tmpdir/got-14.s" | |
177 | puts $ofd "#source: $objdir/tmpdir/got-34.s" | |
178 | set count 16384 | |
179 | } | |
180 | "got-negative-12-13-14-35-er" { | |
181 | puts $ofd "#source: $objdir/tmpdir/got-12.s" | |
182 | puts $ofd "#source: $objdir/tmpdir/got-13.s" | |
183 | puts $ofd "#source: $objdir/tmpdir/got-14.s" | |
184 | puts $ofd "#source: $objdir/tmpdir/got-35.s" | |
185 | set count 0 | |
186 | } | |
187 | "got-multigot-14-ok" { | |
188 | puts $ofd "#source: $objdir/tmpdir/got-14.s" | |
189 | set count 16384 | |
190 | } | |
191 | "got-multigot-15-er" { | |
192 | puts $ofd "#source: $objdir/tmpdir/got-15.s" | |
193 | set count 0 | |
194 | } | |
195 | "got-multigot-12-13-14-34-35-ok" { | |
196 | puts $ofd "#source: $objdir/tmpdir/got-12.s" | |
197 | puts $ofd "#source: $objdir/tmpdir/got-13.s" | |
198 | puts $ofd "#source: $objdir/tmpdir/got-14.s" | |
199 | puts $ofd "#source: $objdir/tmpdir/got-34.s" | |
200 | puts $ofd "#source: $objdir/tmpdir/got-35.s" | |
201 | set count 24580 | |
202 | } | |
203 | "got-xgot-15-ok" { | |
204 | puts $ofd "#source: $objdir/tmpdir/xgot-15.s" | |
205 | set count 16385 | |
206 | } | |
207 | "got-xgot-12-13-14-15-34-35-ok" { | |
208 | puts $ofd "#source: $objdir/tmpdir/got-12.s" | |
209 | puts $ofd "#source: $objdir/tmpdir/got-13.s" | |
210 | puts $ofd "#source: $objdir/tmpdir/got-14.s" | |
211 | puts $ofd "#source: $objdir/tmpdir/xgot-15.s" | |
212 | puts $ofd "#source: $objdir/tmpdir/got-34.s" | |
213 | puts $ofd "#source: $objdir/tmpdir/got-35.s" | |
214 | set count 24581 | |
215 | } | |
216 | } | |
217 | ||
218 | while { [gets $ifd line] != -1 } { | |
219 | puts $ofd $line | |
220 | } | |
221 | ||
222 | for { set i 0 } { $i < $count } { incr i } { | |
223 | puts $ofd "^\[0-9a-f\]+ \[0-9a-f\]+ R_68K_GLOB_DAT 00000000 a\[0-9\]+ \\\+ 0" | |
224 | } | |
225 | ||
226 | close $ifd | |
227 | close $ofd | |
228 | run_dump_test "tmpdir/$testname" | |
229 | } | |
230 | ||
231 | gen_got_test got-12 | |
232 | gen_got_test got-13 | |
233 | gen_got_test got-14 | |
234 | gen_got_test got-15 | |
235 | gen_got_test got-34 | |
236 | gen_got_test got-35 | |
237 | gen_got_test xgot-15 | |
238 | ||
239 | run_dump_test "got-1" | |
240 | got_test "got-single-12-ok" | |
241 | got_test "got-single-13-er" | |
242 | got_test "got-negative-14-ok" | |
243 | got_test "got-negative-15-er" | |
244 | got_test "got-negative-12-13-14-34-ok" | |
245 | got_test "got-negative-12-13-14-35-er" | |
246 | got_test "got-multigot-14-ok" | |
247 | got_test "got-multigot-15-er" | |
248 | got_test "got-multigot-12-13-14-34-35-ok" | |
249 | got_test "got-xgot-15-ok" | |
250 | got_test "got-xgot-12-13-14-15-34-35-ok" |