Commit | Line | Data |
---|---|---|
8fd4256d L |
1 | # Expect script for linker support of size relocations. |
2 | # | |
6f2750fe | 3 | # Copyright (C) 2013-2016 Free Software Foundation, Inc. |
8fd4256d L |
4 | # |
5 | # This file is part of the GNU Binutils. | |
6 | # | |
7 | # This program is free software; you can redistribute it and/or modify | |
8 | # it under the terms of the GNU General Public License as published by | |
9 | # the Free Software Foundation; either version 3 of the License, or | |
10 | # (at your option) any later version. | |
11 | # | |
12 | # This program is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | # GNU General Public License for more details. | |
16 | # | |
17 | # You should have received a copy of the GNU General Public License | |
18 | # along with this program; if not, write to the Free Software | |
19 | # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | |
20 | # MA 02110-1301, USA. | |
21 | # | |
22 | ||
23 | ||
24 | # Size relications have only been implemented for the ix86 and x86_64, | |
25 | # so far. | |
26 | if {!(([istarget "i?86-*-*"] | |
27 | || [istarget "x86_64-*-*"]) | |
28 | && ([istarget "*-*-elf*"] | |
29 | || [istarget "*-*-nacl*"] | |
30 | || (([istarget "*-*-linux*"] | |
31 | || [istarget "*-*-gnu*"]) | |
32 | && ![istarget "*-*-*aout*"] | |
33 | && ![istarget "*-*-*oldld*"]))) } { | |
34 | verbose "Size relocations tests not run - no target support" | |
35 | return | |
36 | } | |
37 | ||
9b4fce51 RM |
38 | # So as to avoid rewriting every last test case here in a nacl variant, |
39 | # we use black magic to massage the generic cases into nacl-variant cases. | |
40 | if [istarget "*-*-nacl*"] { | |
41 | # Change all the -melf_i386 to -melf_i386_nacl so linking can succeed. | |
42 | set options_regsub(ld) {-m(\\S+) -m\\1_nacl} | |
43 | } | |
44 | ||
8fd4256d L |
45 | set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]] |
46 | foreach t $test_list { | |
47 | # We need to strip the ".d", but can leave the dirname. | |
48 | verbose [file rootname $t] | |
49 | run_dump_test [file rootname $t] | |
50 | } | |
51 | ||
52 | # We need a native system. | |
53 | if ![isnative] { | |
9b4fce51 | 54 | verbose "Native size relocation tests not run - not a native toolchain" |
8fd4256d L |
55 | return |
56 | } | |
57 | ||
58 | # We need a working compiler. | |
59 | if { [which $CC] == 0 } { | |
60 | verbose "Native size relocation tests not run - no compiler available" | |
61 | return | |
62 | } | |
63 | ||
6f8ea6c4 L |
64 | # Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required. |
65 | global NOPIE_CFLAGS NOPIE_LDFLAGS | |
8fd4256d | 66 | |
6f8ea6c4 L |
67 | run_cc_link_tests [list \ |
68 | [list \ | |
69 | "Build libsize-1.so" \ | |
70 | "-shared" \ | |
71 | "-fPIC" \ | |
72 | {size-1a.c size-1b.c} \ | |
73 | {} \ | |
74 | "libsize-1.so" \ | |
75 | ] \ | |
76 | [list \ | |
77 | "Build libsize-2.so" \ | |
78 | "-shared" \ | |
79 | "-fPIC" \ | |
80 | {size-2a.c size-2b.c} \ | |
81 | {} \ | |
82 | "libsize-2.so" \ | |
83 | ] \ | |
84 | [list \ | |
85 | "Build libsize-3a.so" \ | |
86 | "-shared" "-fPIC" \ | |
87 | {size-3a.c} \ | |
88 | {} \ | |
89 | "libsize-3a.so" \ | |
90 | ] \ | |
91 | [list \ | |
92 | "Build libsize-3b.so" \ | |
93 | "-shared" \ | |
94 | "-fPIC" \ | |
95 | {size-3b.c} \ | |
96 | {} \ | |
97 | "libsize-3b.so" \ | |
98 | ] \ | |
99 | [list \ | |
100 | "Build libsize-3c.so" \ | |
101 | "-shared" \ | |
102 | "-fPIC" \ | |
103 | {size-3c.c} \ | |
104 | {} \ | |
105 | "libsize-3c.so" \ | |
106 | ] \ | |
107 | [list \ | |
108 | "Build libsize-6b.so" \ | |
109 | "-shared" \ | |
110 | "-fPIC" \ | |
111 | {size-6b.c} \ | |
112 | {} \ | |
113 | "libsize-6b.so" \ | |
114 | ] \ | |
115 | [list \ | |
116 | "Build libsize-7.so" \ | |
117 | "-shared" \ | |
118 | "-fPIC" \ | |
119 | {size-7b.c} \ | |
120 | {} \ | |
121 | "libsize-7.so" \ | |
122 | ] \ | |
123 | [list \ | |
124 | "Build size-7" \ | |
125 | "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libsize-7.so" \ | |
126 | "$NOPIE_CFLAGS" \ | |
127 | {size-7a.c} \ | |
128 | {{readelf -rW size-7.rd}} \ | |
129 | "size-7.exe" \ | |
130 | ] \ | |
131 | [list \ | |
132 | "Build libsize-8.so" \ | |
133 | "-shared" "-fPIC" \ | |
134 | {size-8b.c} \ | |
135 | {} \ | |
136 | "libsize-8.so" \ | |
137 | ] \ | |
138 | [list \ | |
139 | "Build size-8" \ | |
140 | "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libsize-8.so" \ | |
141 | "$NOPIE_CFLAGS" \ | |
142 | {size-8a.c} \ | |
143 | {{readelf -rW size-8.rd}} \ | |
144 | "size-8.exe" \ | |
145 | ] \ | |
146 | [list \ | |
147 | "Build libsize-9.so" \ | |
148 | "-shared" \ | |
149 | "-fPIC" \ | |
150 | {size-9b.c} \ | |
151 | {{readelf -rW size-9.rd}} \ | |
152 | "libsize-9.so" \ | |
153 | ] \ | |
154 | [list \ | |
155 | "Build libsize-10.so" \ | |
156 | "-shared" \ | |
157 | "-fPIC" \ | |
158 | {size-10b.c} \ | |
159 | {{readelf -rW size-10.rd}} \ | |
160 | "libsize-10.so" \ | |
161 | ] \ | |
162 | ] | |
8fd4256d | 163 | |
de0a0026 L |
164 | # Check if size relocation works at run-time. |
165 | catch "exec tmpdir/size-7.exe > tmpdir/dump.out" exec_output | |
166 | if ![string match "" $exec_output] then { | |
167 | send_log "No run-time size relocation support: $exec_output\n" | |
168 | verbose "No run-time size relocation support: $exec_output" 1 | |
169 | return | |
170 | } | |
171 | ||
172 | if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/size-7.out" ] } then { | |
173 | verbose "output is [file_contents "tmpdir/dump.out"]" 2 | |
174 | fail "Run-time size relocation" | |
175 | return | |
176 | } | |
177 | ||
6f8ea6c4 L |
178 | # Run-time size relocation tests. |
179 | run_ld_link_exec_tests [] [list \ | |
180 | [list \ | |
181 | "Run size-1" \ | |
182 | "tmpdir/libsize-1.so" \ | |
183 | "" \ | |
184 | {size-1.c} \ | |
185 | "size-1" \ | |
186 | "size-1.out" \ | |
187 | ] \ | |
188 | [list \ | |
189 | "Run size-2" \ | |
190 | "tmpdir/libsize-2.so" \ | |
191 | "" \ | |
192 | {size-2.c} \ | |
193 | "size-2" \ | |
194 | "size-2.out" \ | |
195 | ] \ | |
196 | [list \ | |
197 | "Run size-3a" \ | |
198 | "" \ | |
199 | "" \ | |
200 | {size-3.c size-3a.c} \ | |
201 | "size-3a" \ | |
202 | "size-3.out" \ | |
203 | ] \ | |
204 | [list \ | |
205 | "Run size-3b" \ | |
206 | "tmpdir/libsize-3a.so" \ | |
207 | "" \ | |
208 | {size-3.c} \ | |
209 | "size-3b" \ | |
210 | "size-3.out" \ | |
211 | ] \ | |
212 | [list \ | |
213 | "Run size-3c" \ | |
214 | "" \ | |
215 | "" \ | |
216 | {size-3.c size-3b.c} \ | |
217 | "size-3c" \ | |
218 | "size-3.out" \ | |
219 | ] \ | |
220 | [list \ | |
221 | "Run size-3d (1)" \ | |
222 | "tmpdir/libsize-3b.so" \ | |
223 | "" \ | |
224 | {size-3.c} \ | |
225 | "size-3d1" \ | |
226 | "size-3.out" \ | |
227 | ] \ | |
228 | [list \ | |
229 | "Run size-3d (2)" \ | |
230 | "" \ | |
231 | "" \ | |
232 | {size-3.c size-3c.c} \ | |
233 | "size-3d2" \ | |
234 | "size-3.out" \ | |
235 | ] \ | |
236 | [list \ | |
8fd4256d L |
237 | {"Run size-3e" |
238 | "tmpdir/libsize-3c.so" "" | |
239 | {size-3.c} "size-3e" "size-3.out"} | |
6f8ea6c4 L |
240 | ] \ |
241 | [list \ | |
242 | "Run size-4a" \ | |
243 | "" \ | |
244 | "" \ | |
245 | {size-4a.c size-4b.c} \ | |
246 | "size-4a" \ | |
247 | "size-4.out" \ | |
248 | "$NOPIE_CFLAGS" \ | |
249 | ] \ | |
250 | [list \ | |
251 | "Run size-4b" \ | |
252 | "" \ | |
253 | "" \ | |
254 | {size-4b.c size-4a.c} \ | |
255 | "size-4b" \ | |
256 | "size-4.out" \ | |
257 | "$NOPIE_CFLAGS" \ | |
258 | ] \ | |
259 | [list \ | |
260 | "Run size-5a" \ | |
261 | "" \ | |
262 | "" \ | |
263 | {size-5a.c size-5b.c} \ | |
264 | "size-5a" \ | |
265 | "size-5.out" \ | |
266 | "$NOPIE_CFLAGS" \ | |
267 | ] \ | |
268 | [list \ | |
269 | "Run size-5b" \ | |
270 | "" \ | |
271 | "" \ | |
272 | {size-5b.c size-5a.c} \ | |
273 | "size-5b" \ | |
274 | "size-5.out" \ | |
275 | "$NOPIE_CFLAGS" \ | |
276 | ] \ | |
277 | [list \ | |
278 | "Run size-6" \ | |
279 | "tmpdir/libsize-6b.so" \ | |
280 | "" \ | |
281 | {size-6a.c} \ | |
282 | "size-6" \ | |
283 | "size-6.out" \ | |
284 | "$NOPIE_CFLAGS" \ | |
285 | ] \ | |
286 | [list \ | |
287 | "Run size-8" \ | |
288 | "tmpdir/libsize-8.so --hash-styl=gnu" \ | |
289 | "" \ | |
290 | {size-8a.c} \ | |
291 | "size-8" \ | |
292 | "size-8.out" \ | |
293 | "$NOPIE_CFLAGS" \ | |
294 | ] \ | |
295 | [list \ | |
296 | "Run size-9" \ | |
297 | "tmpdir/libsize-9.so" \ | |
298 | "" \ | |
299 | {size-9a.c} \ | |
300 | "size-9" \ | |
301 | "size-9.out" \ | |
302 | ] \ | |
303 | [list \ | |
304 | "Run size-10" \ | |
305 | "tmpdir/libsize-10.so" \ | |
306 | "" \ | |
307 | {size-10a.c} \ | |
308 | "size-10" \ | |
309 | "size-10.out" \ | |
310 | ] \ | |
311 | ] |