1a7fe7e37ea687d5c12607470dac813a46b07ac3
[external/binutils.git] / ld / testsuite / ld-i386 / no-plt.exp
1 # Expect script for i386 no-PLT tests.
2 #   Copyright (C) 2016 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 # The following tests require running the executable generated by ld,
23 # or enough of a build environment to create a fully linked executable.
24 # This is not commonly available when testing a cross-built linker.
25 if ![isnative] {
26     return
27 }
28
29 if ![is_elf_format] {
30     return
31 }
32
33 if ![istarget "i?86-*-*"] {
34     return
35 }
36
37 # Check to see if the C compiler works
38 if { [which $CC] == 0 } {
39     return
40 }
41
42 run_cc_link_tests [list \
43     [list \
44         "Build no-plt-func1.o no-plt-main1.o" \
45         "" \
46         "-fPIE" \
47         {no-plt-func1.c no-plt-main1.c} \
48     ] \
49     [list \
50         "Build no-plt-check1a.o no-plt-extern1a.o \
51          no-plt-check1b.o no-plt-extern1b.o" \
52         "" \
53         "-Wa,-mrelax-relocations=yes" \
54         {no-plt-check1a.S no-plt-extern1a.S \
55          no-plt-check1b.S no-plt-extern1b.S } \
56     ] \
57     [list \
58         "Build libno-plt-1a.so" \
59         "-shared tmpdir/no-plt-func1.o" \
60         "" \
61         {dummy.s} \
62         {} \
63         "libno-plt-1a.so" \
64     ] \
65     [list \
66         "Build libno-plt-1b.so" \
67         "-shared tmpdir/no-plt-extern1a.o" \
68         "" \
69         {dummy.s} \
70         {{readelf -Wr libno-plt-1b.rd} \
71          {objdump -dwrj.text libno-plt-1b.dd}} \
72         "libno-plt-1b.so" \
73     ] \
74     [list \
75         "No PLT (dynamic 1a)" \
76         "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
77          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
78         "" \
79         {dummy.s} \
80         {{readelf -Wr no-plt-1a.rd} {objdump -dwrj.text no-plt-1a.dd}} \
81         "no-plt-1a" \
82     ] \
83     [list \
84         "No PLT (dynamic 1b)" \
85         "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
86          tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
87         "" \
88         {dummy.s} \
89         {{readelf -Wr no-plt-1b.rd} {objdump -dwrj.text no-plt-1b.dd}} \
90         "no-plt-1b" \
91     ] \
92     [list \
93         "No PLT (dynamic 1c)" \
94         "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
95          tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
96         "" \
97         {dummy.s} \
98         {{readelf -Wr no-plt-1c.rd} {objdump -dwrj.text no-plt-1c.dd}} \
99         "no-plt-1c" \
100     ] \
101     [list \
102         "No PLT (static 1d)" \
103         "-static tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
104          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
105         "" \
106         {dummy.s} \
107         {{readelf -Wr no-plt-1d.rd} {objdump -dwrj.text no-plt-1d.dd}} \
108         "no-plt-1d" \
109     ] \
110     [list \
111         "No PLT (PIE 1e)" \
112         "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
113          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
114         "" \
115         {dummy.s} \
116         {{readelf -Wr no-plt-1e.rd} {objdump -dwrj.text no-plt-1e.dd}} \
117         "no-plt-1e" \
118     ] \
119     [list \
120         "No PLT (PIE 1f)" \
121         "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
122          tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
123         "" \
124         { dummy.s } \
125         {{readelf -Wr no-plt-1f.rd} {objdump -dwrj.text no-plt-1f.dd}} \
126         "no-plt-1f" \
127     ] \
128     [list \
129         "No PLT (PIE 1g)" \
130         "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
131          tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
132         "" \
133         { dummy.s } \
134         {{readelf -Wr no-plt-1g.rd} {objdump -dwrj.text no-plt-1g.dd}} \
135         "no-plt-1g" \
136     ] \
137     [list \
138         "No PLT (dynamic 1h)" \
139         "tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
140          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
141         "" \
142         {dummy.s} \
143         {{readelf -Wr no-plt-1h.rd} {objdump -dwrj.text no-plt-1h.dd}} \
144         "no-plt-1h" \
145     ] \
146     [list \
147         "No PLT (dynamic 1i)" \
148         "tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
149          tmpdir/no-plt-extern1b.o tmpdir/libno-plt-1a.so" \
150         "" \
151         {dummy.s} \
152         {{readelf -Wr no-plt-1i.rd} {objdump -dwrj.text no-plt-1i.dd}} \
153         "no-plt-1i" \
154     ] \
155     [list \
156         "No PLT (static 1j)" \
157         "-static tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
158          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
159         "" \
160         {dummy.s} \
161         {{readelf -Wr no-plt-1j.rd} {objdump -dwrj.text no-plt-1j.dd}} \
162         "no-plt-1j" \
163     ] \
164 ]
165
166 run_ld_link_exec_tests [list \
167     [list \
168         "No PLT (dynamic 1a)" \
169         "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
170          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
171         "" \
172         { dummy.s } \
173         "no-plt-1a" \
174         "pass.out" \
175     ] \
176     [list \
177         "No PLT (dynamic 1b)" \
178         "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
179          tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
180         "" \
181         { dummy.s } \
182         "no-plt-1b" \
183         "pass.out" \
184     ] \
185     [list \
186         "No PLT (dynamic 1c)" \
187         "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
188          tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
189         "" \
190         { dummy.s } \
191         "no-plt-1c" \
192         "pass.out" \
193     ] \
194     [list \
195         "No PLT (static 1d)" \
196         "-static tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
197          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
198         "" \
199         { dummy.s } \
200         "no-plt-1d" \
201         "pass.out" \
202     ] \
203     [list \
204         "No PLT (PIE 1e)" \
205         "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
206          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
207         "" \
208         { dummy.s } \
209         "no-plt-1e" \
210         "pass.out" \
211     ] \
212     [list \
213         "No PLT (PIE 1f)" \
214         "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
215          tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
216         "" \
217         { dummy.s } \
218         "no-plt-1f" \
219         "pass.out" \
220     ] \
221     [list \
222         "No PLT (PIE 1g)" \
223         "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
224          tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
225         "" \
226         { dummy.s } \
227         "no-plt-1g" \
228         "pass.out" \
229     ] \
230     [list \
231         "No PLT (dynamic 1h)" \
232         "tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
233          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
234         "" \
235         {dummy.s} \
236         "no-plt-1h" \
237         "pass.out" \
238     ] \
239     [list \
240         "No PLT (dynamic 1i)" \
241         "tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
242          tmpdir/no-plt-extern1b.o tmpdir/libno-plt-1a.so" \
243         "" \
244         {dummy.s} \
245         "no-plt-1i" \
246         "pass.out" \
247     ] \
248     [list \
249         "No PLT (static 1j)" \
250         "-static tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
251          tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
252         "" \
253         {dummy.s} \
254         "no-plt-1j" \
255         "pass.out" \
256     ] \
257 ]
258
259 # Run-time tests which require working IFUNC support.
260 if { [check_ifunc_available] } {
261     run_cc_link_tests [list \
262         [list \
263             "Build pr20244-3a.o pr20244-3b.o pr20244-3c.o pr20244-3d.o" \
264             "" \
265             "-fPIC -O2 -g" \
266             { pr20244-3a.c pr20244-3b.S pr20244-3c.S pr20244-3d.S } \
267         ] \
268         [list \
269             "Build pr20253-1a.o pr20253-1b.o pr20253-1c.o pr20253-1d.o" \
270             "" \
271             "-fPIE -O2 -g" \
272             { pr20253-1a.c pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
273         ] \
274         [list \
275             "Build libpr20253-1a.so" \
276             "-shared tmpdir/pr20253-1b.o \
277              tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
278             "" \
279             { dummy.s } \
280             {} \
281             "libpr20253-1a.so" \
282         ] \
283         [list \
284             "Build pr20253-2a.o pr20253-2b.o pr20253-2c.o pr20253-2d.o" \
285             "" \
286             "-fPIE -O2 -g" \
287             { pr20253-2a.c pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
288         ] \
289     ]
290
291     run_ld_link_exec_tests [list \
292         [list \
293             "Run pr20244-3a" \
294             "tmpdir/pr20244-3a.o tmpdir/pr20244-3b.o \
295              tmpdir/pr20244-3c.o tmpdir/pr20244-3d.o" \
296             "" \
297             { dummy.c } \
298             "pr20244-3a" \
299             "pass.out" \
300         ] \
301         [list \
302             "Run pr20244-3b" \
303             "--static tmpdir/pr20244-3a.o tmpdir/pr20244-3b.o \
304             tmpdir/pr20244-3c.o tmpdir/pr20244-3d.o" \
305             "" \
306             { dummy.c } \
307             "pr20244-3b" \
308             "pass.out" \
309         ] \
310         [list \
311             "Run pr20253-1a" \
312             "tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
313              tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
314             "" \
315             { dummy.s } \
316             "pr20253-1a" \
317             "pass.out" \
318         ] \
319         [list \
320             "Run pr20253-1b" \
321             "--static tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
322             tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
323             "" \
324             { dummy.s } \
325             "pr20253-1b" \
326             "pass.out" \
327         ] \
328         [list \
329             "Run pr20253-1c" \
330             "-pie tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
331             tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
332             "" \
333             { dummy.s } \
334             "pr20253-1c" \
335             "pass.out" \
336         ] \
337         [list \
338             "Run pr20253-1d" \
339             "tmpdir/pr20253-1a.o tmpdir/libpr20253-1a.so" \
340             "" \
341             { dummy.s } \
342             "pr20253-1d" \
343             "pass.out" \
344         ] \
345         [list \
346             "Run pr20253-1e" \
347             "-pie tmpdir/pr20253-1a.o tmpdir/libpr20253-1a.so" \
348             "" \
349             { dummy.s } \
350             "pr20253-1e" \
351             "pass.out" \
352         ] \
353         [list \
354             "Run pr20253-1f" \
355             "tmpdir/pr20253-1a.o" \
356             "" \
357             { pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
358             "pr20253-1f" \
359             "pass.out" \
360             "-DCHECK_PLT" \
361         ] \
362         [list \
363             "Run pr20253-1g" \
364             "--static tmpdir/pr20253-1a.o" \
365             "" \
366             { pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
367             "pr20253-1g" \
368             "pass.out" \
369             "-DCHECK_PLT" \
370         ] \
371         [list \
372             "Run pr20253-2a" \
373             "tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
374              tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
375             "" \
376             { dummy.s } \
377             "pr20253-2a" \
378             "pass.out" \
379         ] \
380         [list \
381             "Run pr20253-2b" \
382             "--static tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
383             tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
384             "" \
385             { dummy.s } \
386             "pr20253-2b" \
387             "pass.out" \
388         ] \
389         [list \
390             "Run pr20253-2c" \
391             "tmpdir/pr20253-2a.o" \
392             "" \
393             { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
394             "pr20253-2c" \
395             "pass.out" \
396             "-DCHECK_PLT" \
397         ] \
398         [list \
399             "Run pr20253-2d" \
400             "--static tmpdir/pr20253-2a.o" \
401             "" \
402             { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
403             "pr20253-2d" \
404             "pass.out" \
405             "-DCHECK_PLT" \
406         ] \
407     ]
408 }