1 # Expect script for i386 no-PLT tests.
2 # Copyright (C) 2016-2017 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,
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.
33 if ![istarget "i?86-*-*"] {
37 # Check to see if the C compiler works
38 if { [which $CC] == 0 } {
42 # Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
43 global NOPIE_CFLAGS NOPIE_LDFLAGS
45 run_cc_link_tests [list \
47 "Build no-plt-func1.o no-plt-main1.o" \
50 {no-plt-func1.c no-plt-main1.c} \
53 "Build no-plt-check1a.o no-plt-extern1a.o \
54 no-plt-check1b.o no-plt-extern1b.o" \
56 "-Wa,-mrelax-relocations=yes" \
57 {no-plt-check1a.S no-plt-extern1a.S \
58 no-plt-check1b.S no-plt-extern1b.S } \
61 "Build libno-plt-1a.so" \
62 "-shared tmpdir/no-plt-func1.o" \
69 "Build libno-plt-1b.so" \
70 "-shared tmpdir/no-plt-extern1a.o" \
73 {{readelf -Wr libno-plt-1b.rd} \
74 {objdump -dwrj.text libno-plt-1b.dd}} \
78 "No PLT (dynamic 1a)" \
79 "$NOPIE_LDFLAGS tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
80 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
83 {{readelf -Wr no-plt-1a.rd} {objdump -dwrj.text no-plt-1a.dd}} \
87 "No PLT (dynamic 1b)" \
88 "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
89 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
92 {{readelf -Wr no-plt-1b.rd} {objdump -dwrj.text no-plt-1b.dd}} \
96 "No PLT (dynamic 1c)" \
97 "$NOPIE_LDFLAGS tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
98 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
101 {{readelf -Wr no-plt-1c.rd} {objdump -dwrj.text no-plt-1c.dd}} \
105 "No PLT (static 1d)" \
106 "-static tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
107 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
110 {{readelf -Wr no-plt-1d.rd} {objdump -dwrj.text no-plt-1d.dd}} \
115 "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
116 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
119 {{readelf -Wr no-plt-1e.rd} {objdump -dwrj.text no-plt-1e.dd}} \
124 "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
125 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
128 {{readelf -Wr no-plt-1f.rd} {objdump -dwrj.text no-plt-1f.dd}} \
133 "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
134 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
137 {{readelf -Wr no-plt-1g.rd} {objdump -dwrj.text no-plt-1g.dd}} \
141 "No PLT (dynamic 1h)" \
142 "$NOPIE_LDFLAGS tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
143 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
146 {{readelf -Wr no-plt-1h.rd} {objdump -dwrj.text no-plt-1h.dd}} \
150 "No PLT (dynamic 1i)" \
151 "$NOPIE_LDFLAGS tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
152 tmpdir/no-plt-extern1b.o tmpdir/libno-plt-1a.so" \
155 {{readelf -Wr no-plt-1i.rd} {objdump -dwrj.text no-plt-1i.dd}} \
159 "No PLT (static 1j)" \
160 "-static tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
161 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
164 {{readelf -Wr no-plt-1j.rd} {objdump -dwrj.text no-plt-1j.dd}} \
169 run_ld_link_exec_tests [list \
171 "No PLT (dynamic 1a)" \
172 "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
173 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
180 "No PLT (dynamic 1b)" \
181 "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
182 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
189 "No PLT (dynamic 1c)" \
190 "tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
191 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
198 "No PLT (static 1d)" \
199 "-static tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
200 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
208 "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
209 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1a.o" \
217 "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
218 tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \
226 "-pie tmpdir/no-plt-check1a.o tmpdir/no-plt-main1.o \
227 tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \
234 "No PLT (dynamic 1h)" \
235 "$NOPIE_LDFLAGS tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
236 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
243 "No PLT (dynamic 1i)" \
244 "$NOPIE_LDFLAGS tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
245 tmpdir/no-plt-extern1b.o tmpdir/libno-plt-1a.so" \
252 "No PLT (static 1j)" \
253 "-static tmpdir/no-plt-check1b.o tmpdir/no-plt-main1.o \
254 tmpdir/no-plt-func1.o tmpdir/no-plt-extern1b.o" \
262 # Run-time tests which require working IFUNC support.
263 if { [check_ifunc_available] } {
264 run_cc_link_tests [list \
266 "Build pr20244-3a.o pr20244-3b.o pr20244-3c.o pr20244-3d.o" \
269 { pr20244-3a.c pr20244-3b.S pr20244-3c.S pr20244-3d.S } \
272 "Build pr20253-1a.o pr20253-1b.o pr20253-1c.o pr20253-1d.o" \
275 { pr20253-1a.c pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
278 "Build libpr20253-1a.so" \
279 "-shared tmpdir/pr20253-1b.o \
280 tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
287 "Build pr20253-2a.o pr20253-2b.o pr20253-2c.o pr20253-2d.o" \
290 { pr20253-2a.c pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
294 run_ld_link_exec_tests [list \
297 "$NOPIE_LDFLAGS tmpdir/pr20244-3a.o tmpdir/pr20244-3b.o \
298 tmpdir/pr20244-3c.o tmpdir/pr20244-3d.o" \
306 "--static tmpdir/pr20244-3a.o tmpdir/pr20244-3b.o \
307 tmpdir/pr20244-3c.o tmpdir/pr20244-3d.o" \
315 "tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
316 tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
324 "--static tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
325 tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
333 "-pie tmpdir/pr20253-1a.o tmpdir/pr20253-1b.o \
334 tmpdir/pr20253-1c.o tmpdir/pr20253-1d.o" \
342 "tmpdir/pr20253-1a.o tmpdir/libpr20253-1a.so" \
350 "-pie tmpdir/pr20253-1a.o tmpdir/libpr20253-1a.so" \
358 "$NOPIE_LDFLAGS tmpdir/pr20253-1a.o" \
360 { pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
367 "--static tmpdir/pr20253-1a.o" \
369 { pr20253-1b.S pr20253-1c.S pr20253-1d.S } \
376 "$NOPIE_LDFLAGS tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
377 tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
385 "--static tmpdir/pr20253-2a.o tmpdir/pr20253-2b.o \
386 tmpdir/pr20253-2c.o tmpdir/pr20253-2d.o" \
394 "$NOPIE_LDFLAGS tmpdir/pr20253-2a.o" \
396 { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \
403 "--static tmpdir/pr20253-2a.o" \
405 { pr20253-2b.S pr20253-2c.S pr20253-2d.S } \