1# Expect script for ld-x86_64 tests
2#   Copyright (C) 2002-2020 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# Test x86_64 linking; all types of relocs.  This tests the assembler and
23# tools like objdump as well as the linker.
24
25if { !([istarget "x86_64-*-elf*"] || [istarget "x86_64-*-linux*"]) } {
26    return
27}
28
29set emul "elf_x86_64"
30set saved_ASFLAGS "$ASFLAGS"
31set ASFLAGS "$ASFLAGS -mx86-used-note=no"
32
33# List contains test-items with 3 items followed by 2 lists:
34# 0:name 1:ld early options 2:ld late options 3:assembler options
35# 4:filenames of assembler files 5: action and options. 6: name of output file
36
37# Actions:
38# objdump: Apply objdump options on result.  Compare with regex (last arg).
39# nm: Apply nm options on result.  Compare with regex (last arg).
40# readelf: Apply readelf options on result.  Compare with regex (last arg).
41
42set x86_64tests {
43    {"Helper shared library (basic PLT test)"
44      "-shared -melf_x86_64" "" "--64" {pltlib.s} {} "libpltlib.so"}
45    {"basic PLT generation"
46     "-melf_x86_64 tmpdir/libpltlib.so" "" "--64" {plt.s}
47     {{objdump -drj.plt plt.pd}} "plt"}
48    {"TLS -fpic -shared transitions"
49     "-shared -melf_x86_64 --no-ld-generated-unwind-info \
50      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
51     "--64" {tlspic1.s tlspic2.s}
52     {{readelf -WSsrl tlspic.rd} {objdump -drj.text\ -Mintel64 tlspic.dd}
53      {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
54      "libtlspic.so"}
55    {"TLS -fpic -shared transitions with r15 as GOT base"
56     "-shared -melf_x86_64 --no-ld-generated-unwind-info \
57      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
58     "--64 -mrelax-relocations=yes"
59     {tlspic3.s tlspic2.s}
60     {{readelf -WSsrl tlspic2.rd} {objdump -drj.text\ -Mintel64 tlspic2.dd}
61      {objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
62      "libtlspic2.so"}
63    {"TLS descriptor -fpic -shared transitions"
64     "-shared -melf_x86_64 --no-ld-generated-unwind-info \
65      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
66     "--64" {tlsdesc.s tlspic2.s}
67     {{readelf -WSsrld tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
68      {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}
69      {objdump -drj.plt tlsdesc.pd}} "libtlsdesc.so"}
70    {"Helper shared library" "-shared -melf_x86_64" ""
71     "--64" {tlslib.s} {} "libtlslib.so"}
72    {"TLS -fpic and -fno-pic exec transitions"
73     "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
74      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
75     "--64" {tlsbinpic.s tlsbin.s}
76     {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
77      {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
78      "tlsbin"}
79    {"TLS -fpic and -fno-pic exec transitions without PLT"
80     "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
81      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
82     "-mrelax-relocations=yes --64" {tlsbinpic2.s tlsbin.s}
83     {{readelf -WSsrl tlsbin2.rd} {objdump -drj.text tlsbin2.dd}
84      {objdump -sj.got tlsbin2.sd} {objdump -sj.tdata tlsbin2.td}}
85      "tlsbin2"}
86    {"TLS descriptor -fpic and -fno-pic exec transitions"
87     "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
88      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
89     "--64" {tlsbindesc.s tlsbin.s}
90     {{readelf -WSsrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
91      {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
92      "tlsbindesc"}
93    {"TLS with global dynamic and descriptors"
94     "-shared -melf_x86_64 --no-ld-generated-unwind-info \
95      -z noseparate-code -z max-page-size=0x200000 --hash-style=sysv" ""
96     "--64" {tlsgdesc.s}
97     {{readelf -WSsrl tlsgdesc.rd} {objdump -drj.text\ -Mintel64 tlsgdesc.dd}}
98      "libtlsgdesc.so"}
99    {"TLS in debug sections" "-melf_x86_64" ""
100     "--64" {tlsg.s}
101     {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
102    {"TLS GD->LE transition" "-melf_x86_64" ""
103     "--64" {tlsgd1.s}
104     {{objdump -dwr tlsgd1.dd}} "tlsgd1"}
105    {"TLS LD->LE transition" "-melf_x86_64" ""
106     "--64" {tlsld1.s}
107     {{objdump -dwr tlsld1.dd}} "tlsld1"}
108    {"TLS IE->LE transition" "-melf_x86_64" ""
109     "--64" {tlsie1.s}
110     {{objdump -dwr tlsie1.dd}} "tlsie1"}
111    {"Helper 64bit object 1" "-r -melf_x86_64" ""
112     "--64" {mixed1a.s} {} "libmixe1a.o"}
113    {"Helper 32bit object 1" "-r -melf_i386" ""
114     "--32" {mixed1b.s} {} "libmixe1b.o"}
115    {"Helper 64bit object 2" "-r -melf_x86_64" ""
116     "--64" {mixed2a.s} {} "libmixe2a.o"}
117    {"Helper 32bit object 2" "-r -melf_i386" ""
118     "--32" {mixed2b.s} {} "libmixe2b.o"}
119    {"Split by file with 'l' flag on section."
120     "-split-by-file -r -melf_x86_64" ""
121     "--64" {split-by-file1.s split-by-file2.s}
122     {{readelf -SW split-by-file.rd}} "split-by-file.o"}
123    {"TLS X32 IE->LE transition" "-melf32_x86_64" ""
124     "--x32" {tlsie4.s}
125     {{objdump -dwr tlsie4.dd}} "tlsie4"}
126    {"TLS X32 GD->LE transition" "-melf32_x86_64" ""
127     "--x32" {tlsgd4.s}
128     {{objdump -dwr tlsgd4.dd}} "tlsgd4"}
129    {"Helper TLS GD->IE transition DSO" "-shared -melf_x86_64" ""
130     "--64" {tlsgd5b.s} {} "libtlsgd5.so"}
131    {"TLS GD->IE transition" "-melf_x86_64 tmpdir/libtlsgd5.so" ""
132     "--64" {tlsgd5a.s}
133     {{objdump -dwr tlsgd5.dd}} "tlsgd5a"}
134    {"TLS GD->IE transition without PLT"
135     "-melf_x86_64 tmpdir/libtlsgd5.so" ""
136     "-mrelax-relocations=yes --64" {tlsgd5c.s}
137     {{objdump -dwr tlsgd5.dd}} "tlsgd5b"}
138    {"Helper TLS X32 GD->IE transition DSO" "-shared -melf32_x86_64" ""
139     "--x32" {tlsgd6b.s} {} "libtlsgd6.so"}
140    {"TLS X32 GD->IE transition" "-melf32_x86_64 tmpdir/libtlsgd6.so" ""
141     "--x32" {tlsgd6a.s}
142     {{objdump -dwr tlsgd6.dd}} "tlsgd6a"}
143    {"TLS X32 GD->IE transition without PLT"
144     "-melf32_x86_64 tmpdir/libtlsgd6.so" ""
145     "-mrelax-relocations=yes --x32" {tlsgd6c.s}
146     {{objdump -dwr tlsgd6.dd}} "tlsgd6b"}
147    {"TLS X32 LD->LE transition" "-melf32_x86_64" ""
148     "--x32" {tlsld2.s}
149     {{objdump -dwr tlsld2.dd}} "tlsld2"}
150    {"TLS -mcmodel=large GD->LE transition" "-melf_x86_64" ""
151     "--64" {tlsgd7.s}
152     {{objdump -dwr tlsgd7.dd}} "tlsgd7"}
153    {"TLS -mcmodel=large LD->LE transition" "-melf_x86_64" ""
154     "--64" {tlsld3.s}
155     {{objdump -dwr tlsld3.dd}} "tlsld3"}
156    {"TLS -mcmodel=large LD->LE transition with r15 as GOT base"
157     "-melf_x86_64" ""
158     "--64" {tlsld4.s}
159     {{objdump -dwr tlsld4.dd}} "tlsld4"}
160    {"TLS LD->LE transition without PLT"
161     "-melf_x86_64" ""
162     "--64 -mrelax-relocations=yes"
163     {tlsld5.s}
164     {{objdump -dwr tlsld5.dd}} "tlsld5"}
165    {"TLS X32 LD->LE transition without PLT" "-melf32_x86_64" ""
166     "--x32 -mrelax-relocations=yes"
167     {tlsld6.s}
168     {{objdump -dwr tlsld6.dd}} "tlsld6"}
169    {"TLS -mcmodel=large GD->IE transition" "-melf_x86_64 tmpdir/libtlsgd5.so" ""
170     "--64" {tlsgd8.s}
171     {{objdump -dwrj.text tlsgd8.dd}} "tlsgd8"}
172    {"TLS -mcmodel=large GD->LE transition with r15 as GOT base"
173     "-melf_x86_64" ""
174     "--64" {tlsgd9.s}
175     {{objdump -dwr tlsgd9.dd}} "tlsgd9"}
176    {"TLS -mcmodel=large GD->IE transition with r15 as GOT base"
177     "-melf_x86_64 tmpdir/libtlsgd5.so" ""
178     "--64" {tlsgd10.s}
179     {{objdump -dwrj.text tlsgd10.dd}} "tlsgd10"}
180    {"TLS GD->LE transition without PLT"
181     "-melf_x86_64" ""
182     "--64" {tlsgd11.s}
183     {{objdump -dwr tlsgd11.dd}} "tlsgd11"}
184    {"TLS X32 GD->LE transition without PLT"
185     "-melf32_x86_64" ""
186     "--x32" {tlsgd14.s}
187     {{objdump -dwr tlsgd14.dd}} "tlsgd14"}
188     {"build 32-bit object with 33 locals" "-melf_x86_64 -e 0" "" "--32" {32bit.s} {{ ld incompatible.l }} "dummy" }
189     {"build 64-bit object" "-melf_x86_64 -e 0 --defsym foo=1" "" "--64" {64bit.s} {} "dummy" }
190     {"link mixed objects"  "-melf_x86_64 -e 0 tmpdir/32bit.o tmpdir/64bit.o" "" "" {} { { ld incompatible.l } } "mixed"}
191    {"PR ld/17313 (1)" "-melf_x86_64" ""
192     "--64" {dummy.s} {} ""}
193    {"PR ld/17313 (2)" "-melf_x86_64 -shared --just-symbols=tmpdir/dummy.o" ""
194     "--64" {lea1.s} {} "libpr17313.so"}
195    {"PR ld/17306 (1)" "-melf_x86_64" ""
196     "--64" {pr17306b.s} {} ""}
197    {"PR ld/17306 (2)" "-melf_x86_64 -shared -Bsymbolic --just-symbols=tmpdir/pr17306b.o" ""
198     "--64" {pr17306a.s} {} "libpr17306.so"}
199    {"PR ld/17709 (1)" "-melf_x86_64 -shared" ""
200     "--64" {pr17709a.s} {} "libpr17709.so"}
201    {"PR ld/17709 (2)" "-melf_x86_64 tmpdir/libpr17709.so" ""
202     "--64" {pr17709b.s} {{readelf -rW pr17709.rd}} "pr17709"}
203    {"Build pr19827a.o" "" ""
204     "--64" { pr19827a.S }}
205    {"Build pr19827b.so" "-melf_x86_64 -shared" ""
206     "--64" { pr19827b.S } {} "pr19827b.so"}
207    {"Build pr19827"
208     "-melf_x86_64 -pie -z notext tmpdir/pr19827a.o tmpdir/pr19827b.so"
209     ""
210     "--64" { dummy.s } {{readelf {-rW} pr19827.rd}} "pr19827"}
211    {"Build pr19827.so"
212     "-melf_x86_64 -shared -Bsymbolic -z notext" ""
213     "--64" { pr19827a.S }  {{readelf {-rW} pr19827.rd}} "pr19827.so"}
214    {"Build pr19969.so" "-melf_x86_64 -shared" ""
215     "--64" { pr19969a.S } {} "pr19969.so"}
216    {"Build pr20550a.o" "" ""
217     "--64" { pr20550a.s }}
218    {"Build pr20550b.so" "-melf_x86_64 -shared" ""
219     "--64" { pr20550b.s } {} "pr20550b.so"}
220    {"Build pr20550"
221     "-melf_x86_64 -pie -z notext tmpdir/pr20550a.o tmpdir/pr20550b.so"
222     ""
223     "--64" { dummy.s } {} "pr20550"}
224}
225
226run_ld_link_tests $x86_64tests
227
228set test_name "Mixed x86_64 and i386 input test 1"
229set test mixed1
230if { ![ld_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
231    if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
232	pass "$test_name"
233    } {
234	fail "$test_name"
235    }
236}
237
238set test_name "Mixed x86_64 and i386 input test 2"
239set test mixed2
240if { ![ld_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
241    if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
242	pass "$test_name"
243    } {
244	fail "$test_name"
245    }
246}
247
248run_dump_test "abs"
249run_dump_test "abs-k1om"
250run_dump_test "abs-l1om"
251run_dump_test "apic"
252run_dump_test "pcrel8"
253run_dump_test "pcrel16"
254run_dump_test "tlsgd2"
255run_dump_test "tlsgd3"
256run_dump_test "tlsgd12"
257run_dump_test "tlsgd13"
258run_dump_test "tlsie2"
259run_dump_test "tlsie3"
260run_dump_test "hidden1"
261run_dump_test "hidden2"
262run_dump_test "hidden3"
263run_dump_test "hidden4"
264run_dump_test "hidden5"
265run_dump_test "protected1"
266run_dump_test "protected2"
267run_dump_test "protected2-k1om"
268run_dump_test "protected2-l1om"
269run_dump_test "protected3"
270run_dump_test "protected3-k1om"
271run_dump_test "protected3-l1om"
272run_dump_test "protected4"
273run_dump_test "protected5"
274run_dump_test "protected6a"
275run_dump_test "protected6b"
276run_dump_test "protected7a"
277run_dump_test "protected7b"
278run_dump_test "protected8"
279run_dump_test "tlsle1"
280run_dump_test "tlspie1"
281run_dump_test "tlspie2a"
282run_dump_test "tlspie2b"
283run_dump_test "tlspie2c"
284run_dump_test "unique1"
285run_dump_test "nogot1"
286run_dump_test "nogot2"
287run_dump_test "discarded1"
288run_dump_test "pr12718"
289run_dump_test "pr12921"
290run_dump_test "pr13947"
291run_dump_test "pr12570a"
292run_dump_test "pr12570b"
293run_dump_test "pr14215"
294run_dump_test "pr14207"
295run_dump_test "gotplt1"
296run_dump_test "pie1"
297run_dump_test "pie2"
298run_dump_test "pie3"
299run_dump_test "pic1"
300run_dump_test "largecomm-1a"
301run_dump_test "largecomm-1b"
302run_dump_test "largecomm-1c"
303run_dump_test "largecomm-1d"
304run_dump_test "largecomm-1e"
305run_dump_test "largecomm-1f"
306run_dump_test "pr19539a"
307run_dump_test "pr19539b"
308run_dump_test "pr19807-1a"
309run_dump_test "pr19807-1b"
310run_dump_test "pr19807-2a"
311run_dump_test "pr19807-2b"
312run_dump_test "pr19807-2c"
313run_dump_test "pr19807-2d"
314run_dump_test "pr19807-2e"
315run_dump_test "pr19969"
316run_dump_test "pr20093-1"
317run_dump_test "pr20093-2"
318run_dump_test "property-x86-3"
319run_dump_test "property-x86-4a"
320run_dump_test "property-x86-4b"
321run_dump_test "property-x86-3-x32"
322run_dump_test "property-x86-4a-x32"
323run_dump_test "property-x86-4b-x32"
324run_dump_test "property-x86-5"
325run_dump_test "property-x86-5-x32"
326run_dump_test "property-x86-ibt1a"
327run_dump_test "property-x86-ibt1b"
328run_dump_test "property-x86-ibt1a-x32"
329run_dump_test "property-x86-ibt1b-x32"
330run_dump_test "property-x86-ibt2"
331run_dump_test "property-x86-ibt2-x32"
332run_dump_test "property-x86-ibt3a"
333run_dump_test "property-x86-ibt3b"
334run_dump_test "property-x86-ibt3a-x32"
335run_dump_test "property-x86-ibt3b-x32"
336run_dump_test "property-x86-ibt4"
337run_dump_test "property-x86-ibt4-x32"
338run_dump_test "property-x86-ibt5"
339run_dump_test "property-x86-ibt5-x32"
340run_dump_test "property-x86-shstk1a"
341run_dump_test "property-x86-shstk1b"
342run_dump_test "property-x86-shstk1a-x32"
343run_dump_test "property-x86-shstk1b-x32"
344run_dump_test "property-x86-shstk2"
345run_dump_test "property-x86-shstk2-x32"
346run_dump_test "property-x86-shstk3a"
347run_dump_test "property-x86-shstk3b"
348run_dump_test "property-x86-shstk3a-x32"
349run_dump_test "property-x86-shstk3b-x32"
350run_dump_test "property-x86-shstk4"
351run_dump_test "property-x86-shstk4-x32"
352run_dump_test "property-x86-shstk5"
353run_dump_test "property-x86-shstk5-x32"
354run_dump_test "property-x86-cet1"
355run_dump_test "property-x86-cet1-x32"
356run_dump_test "property-x86-cet2a"
357run_dump_test "property-x86-cet2a-x32"
358run_dump_test "property-x86-cet2b"
359run_dump_test "property-x86-cet2b-x32"
360run_dump_test "property-x86-cet3a"
361run_dump_test "property-x86-cet3a-x32"
362run_dump_test "property-x86-cet3b"
363run_dump_test "property-x86-cet3b-x32"
364run_dump_test "property-x86-cet4a"
365run_dump_test "property-x86-cet4a-x32"
366run_dump_test "property-x86-cet4b"
367run_dump_test "property-x86-cet4b-x32"
368run_dump_test "property-x86-cet5a"
369run_dump_test "property-x86-cet5a-x32"
370run_dump_test "property-x86-cet5b"
371run_dump_test "property-x86-cet5b-x32"
372run_dump_test "property-x86-cet6"
373run_dump_test "property-x86-cet6-x32"
374run_dump_test "pr21884"
375run_dump_test "pr22071"
376run_dump_test "pr22115-1a"
377run_dump_test "pr22115-1a-x32"
378run_dump_test "pr22115-1b"
379run_dump_test "pr22115-1b-x32"
380run_dump_test "pr22115-1c"
381run_dump_test "pr22115-1c-x32"
382run_dump_test "pr22115-1d"
383run_dump_test "pr22115-1d-x32"
384run_dump_test "pr22135"
385run_dump_test "pr22782a"
386run_dump_test "pr22782b"
387run_dump_test "pr23189"
388run_dump_test "pr23194"
389run_dump_test "pr23324a"
390run_dump_test "pr23324b"
391run_dump_test "pr23372a"
392run_dump_test "pr23372a-x32"
393run_dump_test "pr23372b"
394run_dump_test "pr23372b-x32"
395run_dump_test "pr23372c"
396run_dump_test "pr23372c-x32"
397run_dump_test "pr23372d"
398run_dump_test "pr23372d-x32"
399run_dump_test "pr23486a"
400run_dump_test "pr23486a-x32"
401run_dump_test "pr23486b"
402run_dump_test "pr23486b-x32"
403run_dump_test "pr23486c"
404run_dump_test "pr23486c-x32"
405run_dump_test "pr23486d"
406run_dump_test "pr23486d-x32"
407run_dump_test "pr23854"
408run_dump_test "pr23930"
409run_dump_test "pr23930-x32"
410run_dump_test "pr24151a"
411run_dump_test "pr24151a-x32"
412run_dump_test "pr24322a"
413run_dump_test "pr24322a-x32"
414run_dump_test "pr24322b"
415run_dump_test "pr24322b-x32"
416run_dump_test "pr24458a"
417run_dump_test "pr24458a-x32"
418run_dump_test "pr24458b"
419run_dump_test "pr24458b-x32"
420run_dump_test "pr24458c"
421run_dump_test "pr24458c-x32"
422run_dump_test "pr24721"
423run_dump_test "pr24721-x32"
424run_dump_test "pr24905"
425run_dump_test "pr24905-x32"
426run_dump_test "align-branch-1"
427run_dump_test "pr25416-1a"
428run_dump_test "pr25416-2b"
429run_dump_test "pr25416-2a"
430run_dump_test "pr25416-2b"
431run_dump_test "pr25416-3"
432run_dump_test "pr25416-4"
433run_dump_test "pr26018"
434run_dump_test "pr26263"
435
436if ![istarget "x86_64-*-linux*"] {
437    return
438}
439
440if ![ld_assemble $as "--x32 $srcdir/$subdir/start.s" tmpdir/startx32.o] {
441    fail "Build ILP32 start.o"
442    return
443}
444
445if ![ld_assemble $as "--32 $srcdir/$subdir/start.s" tmpdir/start32.o] {
446    fail "Build ia32 start.o"
447    return
448}
449
450if ![ld_assemble $as "--64 $srcdir/$subdir/start.s" tmpdir/start64.o] {
451    fail "Build LP64 start.o"
452    return
453}
454
455if ![ld_assemble $as "--x32 $srcdir/$subdir/foo.s" tmpdir/foox32.o] {
456    fail "Build ILP32 foo.o"
457    return
458}
459
460if ![ld_assemble $as "--32 $srcdir/$subdir/foo.s" tmpdir/foo32.o] {
461    fail "Build ia32 foo.o"
462    return
463}
464
465if ![ld_assemble $as "--64 $srcdir/$subdir/foo.s" tmpdir/foo64.o] {
466    fail "Build LP64 foo.o"
467    return
468}
469
470run_dump_test "compressed1"
471run_dump_test "ilp32-1"
472run_dump_test "ilp32-2"
473run_dump_test "ilp32-3"
474run_dump_test "ilp32-4"
475run_dump_test "ilp32-5"
476run_dump_test "ilp32-6"
477run_dump_test "ilp32-7"
478run_dump_test "ilp32-8"
479run_dump_test "ilp32-9"
480run_dump_test "ilp32-10"
481run_dump_test "ilp32-11"
482run_dump_test "ia32-1"
483run_dump_test "ia32-2"
484run_dump_test "ia32-3"
485run_dump_test "lp64-1"
486run_dump_test "lp64-2"
487run_dump_test "lp64-3"
488run_dump_test "pr13082-1a"
489run_dump_test "pr13082-1b"
490run_dump_test "pr13082-2a"
491run_dump_test "pr13082-2b"
492run_dump_test "pr13082-3a"
493run_dump_test "pr13082-3b"
494run_dump_test "pr13082-3c"
495run_dump_test "pr13082-3d"
496run_dump_test "pr13082-4a"
497run_dump_test "pr13082-4b"
498run_dump_test "pr13082-5a"
499run_dump_test "pr13082-5b"
500run_dump_test "pr13082-6a"
501run_dump_test "pr13082-6b"
502run_dump_test "lea1a"
503run_dump_test "lea1b"
504run_dump_test "lea1c"
505run_dump_test "lea1d"
506run_dump_test "lea1e"
507run_dump_test "lea1f"
508run_dump_test "lea1g"
509run_dump_test "lea1h"
510run_dump_test "lea1i"
511run_dump_test "lea1j"
512run_dump_test "lea1k"
513run_dump_test "lea1l"
514run_dump_test "mov1a"
515run_dump_test "mov1b"
516run_dump_test "mov1c"
517run_dump_test "mov1d"
518run_dump_test "mov2a"
519run_dump_test "mov2b"
520run_dump_test "mov2c"
521run_dump_test "mov2d"
522run_dump_test "load1a"
523run_dump_test "load1b"
524run_dump_test "load1c"
525run_dump_test "load1d"
526run_dump_test "load2"
527run_dump_test "call1a"
528run_dump_test "call1b"
529run_dump_test "call1c"
530run_dump_test "call1d"
531run_dump_test "call1e"
532run_dump_test "call1f"
533run_dump_test "call1g"
534run_dump_test "call1h"
535run_dump_test "call1i"
536run_dump_test "pr17935-1"
537run_dump_test "pr17935-2"
538run_dump_test "pr18160"
539run_dump_test "pr18176"
540run_dump_test "pr18801a"
541run_dump_test "pr18801b"
542run_dump_test "ifunc-textrel-1a"
543run_dump_test "ifunc-textrel-1b"
544run_dump_test "ifunc-textrel-2a"
545run_dump_test "ifunc-textrel-2b"
546run_dump_test "pr18815"
547run_dump_test "pr19013"
548run_dump_test "pr19013-x32"
549run_dump_test "pr19162"
550run_dump_test "pr19175"
551run_dump_test "pr18591"
552run_dump_test "pr19615"
553run_dump_test "pr19636-1a"
554run_dump_test "pr19636-1b"
555run_dump_test "pr19636-1c"
556run_dump_test "pr19636-1d"
557run_dump_test "pr19636-1e"
558run_dump_test "pr19636-1f"
559run_dump_test "pr19636-1g"
560run_dump_test "pr19636-1h"
561run_dump_test "pr19636-1i"
562run_dump_test "pr19636-1j"
563run_dump_test "pr19636-2a"
564run_dump_test "pr19636-2b"
565run_dump_test "pr19636-2c"
566run_dump_test "pr19636-2d"
567run_dump_test "pr19636-2e"
568run_dump_test "pr19636-2f"
569run_dump_test "pr19636-2g"
570run_dump_test "pr19636-2h"
571run_dump_test "pr19636-2i"
572run_dump_test "pr19636-2j"
573run_dump_test "pr19636-2k"
574run_dump_test "pr19636-2l"
575run_dump_test "pr19636-2m"
576run_dump_test "pr19636-3a"
577run_dump_test "pr19636-3b"
578run_dump_test "pr19636-3c"
579run_dump_test "pr19645"
580run_dump_test "pr19609-1a"
581run_dump_test "pr19609-1b"
582run_dump_test "pr19609-1c"
583run_dump_test "pr19609-1d"
584run_dump_test "pr19609-1e"
585run_dump_test "pr19609-1f"
586run_dump_test "pr19609-1g"
587run_dump_test "pr19609-1h"
588run_dump_test "pr19609-1i"
589run_dump_test "pr19609-1j"
590run_dump_test "pr19609-1k"
591run_dump_test "pr19609-1l"
592run_dump_test "pr19609-1m"
593run_dump_test "pr19609-2a"
594run_dump_test "pr19609-2b"
595run_dump_test "pr19609-2c"
596run_dump_test "pr19609-2d"
597run_dump_test "pr19609-3a"
598run_dump_test "pr19609-3b"
599run_dump_test "pr19609-4a"
600run_dump_test "pr19609-4b"
601run_dump_test "pr19609-4c"
602run_dump_test "pr19609-4d"
603run_dump_test "pr19609-4e"
604run_dump_test "pr19609-5a"
605run_dump_test "pr19609-5b"
606run_dump_test "pr19609-5c"
607run_dump_test "pr19609-5d"
608run_dump_test "pr19609-5e"
609run_dump_test "pr19609-6a"
610run_dump_test "pr19609-6b"
611run_dump_test "pr19609-6c"
612run_dump_test "pr19609-6d"
613run_dump_test "pr19609-7a"
614run_dump_test "pr19609-7b"
615run_dump_test "pr19609-7c"
616run_dump_test "pr19609-7d"
617run_dump_test "pr19939a"
618run_dump_test "pr19939b"
619run_dump_test "pr19719"
620run_dump_test "pr20253-1a"
621run_dump_test "pr20253-1b"
622run_dump_test "pr20253-1c"
623run_dump_test "pr20253-1d"
624run_dump_test "pr20253-1e"
625run_dump_test "pr20253-1f"
626run_dump_test "pr20253-1g"
627run_dump_test "pr20253-1h"
628run_dump_test "pr20253-1i"
629run_dump_test "pr20253-1j"
630run_dump_test "pr20253-1k"
631run_dump_test "pr20253-1l"
632run_dump_test "pr20253-3"
633run_dump_test "pr20253-4a"
634run_dump_test "pr20253-4b"
635run_dump_test "pr20253-4c"
636run_dump_test "pr20253-4d"
637run_dump_test "pr20253-4e"
638run_dump_test "pr20253-4f"
639run_dump_test "pr20253-5a"
640run_dump_test "pr20253-5b"
641run_dump_test "tlsdesc2"
642run_dump_test "pr22048"
643run_dump_test "pr22929"
644
645proc undefined_weak {cflags ldflags} {
646    set testname "Undefined weak symbol"
647    if { ![ string match "" $cflags$ldflags] } {
648	set testname "$testname ($cflags $ldflags)"
649    }
650
651    if { [string match "*-fPIE*" $cflags]
652	 && ![string match "*nodynamic-undefined-weak*" $ldflags] } {
653	set weak_symbol "Weak defined"
654    } else {
655	set weak_symbol "Weak undefined"
656    }
657
658    run_cc_link_tests [list \
659	[list \
660	    "Build libpr19704a.so" \
661	    "-shared -Wl,-soname,libpr19704.so" \
662	    "" \
663	    { dummy.s } \
664	    {} \
665	    "libpr19704a.so" \
666	] \
667	[list \
668	    "Build libpr19704b.so" \
669	    "-shared -Wl,-soname,libpr19704.so" \
670	    "-fPIC" \
671	    { pr19704b.c } \
672	    {} \
673	    "libpr19704b.so" \
674	] \
675    ]
676
677    exec cp tmpdir/libpr19704a.so tmpdir/libpr19704.so
678
679    run_ld_link_exec_tests [list \
680	[list \
681	    "Run pr19704" \
682	    "-Wl,--no-as-needed,-R,tmpdir $ldflags tmpdir/libpr19704.so" \
683	    "" \
684	    { pr19704a.c } \
685	    "pr19704" \
686	    "pr19704.out" \
687	    "$cflags" \
688	] \
689    ]
690
691    exec cp tmpdir/libpr19704b.so tmpdir/libpr19704.so
692
693    set exec_output [run_host_cmd tmpdir/pr19704 ""]
694    if {![string match $weak_symbol $exec_output]} {
695	fail $testname
696    } else {
697	pass $testname
698    }
699}
700
701# Must be native with the C compiler
702if { [isnative] && [check_compiler_available] } {
703    run_cc_link_tests [list \
704	[list \
705	    "Helper X32 DSO from x86-64 object" "" \
706	    "-m64 $NOSANITIZE_CFLAGS -fPIC -g" \
707	    {simple.c} {} "libsimple.a" \
708	] \
709    ]
710
711    set convertx32 "$objcopy -O elf32-x86-64 tmpdir/simple.o tmpdir/simple-x32.o"
712    send_log "$convertx32\n"
713    set got [remote_exec host "$convertx32"]
714    if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
715	send_log "$got\n"
716	fail "Convert x86-64 object to x32"
717	return
718    }
719
720    run_ld_link_tests [list \
721	[list \
722	    "X32 DSO from x86-64 object" \
723	    "-shared -melf32_x86_64 tmpdir/simple-x32.o" \
724	    "$NOSANITIZE_CFLAGS" \
725	    "--x32 -mx86-used-note=yes" \
726	    {dummy.s} {{readelf {-s --wide} x86-64-x32.rd}} \
727	    "x86-64-x32" \
728	] \
729    ]
730
731    run_cc_link_tests [list \
732	[list \
733	    "Build plt-lib.so" \
734	    "-shared" \
735	    "-fPIC -Wa,-mx86-used-note=yes" \
736	    { plt-lib.c } \
737	    {} \
738	    "libplt-lib.so" \
739	] \
740	[list \
741	    "Build libplt-main1.a" \
742	    "" \
743	    "-fPIC -Wa,-mrelax-relocations=yes,-mx86-used-note=yes" \
744	    { plt-main1.c } \
745	    {{readelf {-Wr} plt-main1.rd}} \
746	    "libplt-main1.a" \
747	] \
748	[list \
749	    "Build libplt-main2.a" \
750	    "" \
751	    "-fPIC -Wa,-mrelax-relocations=yes,-mx86-used-note=yes" \
752	    { plt-main2.c } \
753	    {{readelf {-Wr} plt-main2.rd}} \
754	    "libplt-main2.a" \
755	] \
756	[list \
757	    "Build libplt-main3.a" \
758	    "" \
759	    "-fPIC -Wa,-mrelax-relocations=yes,-mx86-used-note=yes $PLT_CFLAGS" \
760	    { plt-main3.c } \
761	    {{readelf {-Wr} plt-main3.rd}} \
762	    "libplt-main3.a" \
763	] \
764	[list \
765	    "Build libplt-main4.a" \
766	    "" \
767	    "-fPIC -Wa,-mrelax-relocations=yes,-mx86-used-note=yes $PLT_CFLAGS" \
768	    { plt-main4.c } \
769	    {{readelf {-Wr} plt-main4.rd}} \
770	    "libplt-main4.a" \
771	] \
772	[list \
773	    "Build plt-main" \
774	    "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
775	     tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
776	    "" \
777	    { plt-main5.c } \
778	    {{readelf {-Wr} plt-main.rd}} \
779	    "plt-main" \
780	] \
781	[list \
782	    "Build plt-main with PIE" \
783	    "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
784	     tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
785	    "-fPIC -Wa,-mx86-used-note=yes" \
786	    { plt-main5.c } \
787	    {{readelf {-Wr} plt-main.rd}} \
788	    "plt-main" \
789	] \
790	[list \
791	    "Build copyreloc-lib.so" \
792	    "-shared" \
793	    "-fPIC -Wa,-mx86-used-note=yes" \
794	    { copyreloc-lib.c } \
795	    {} \
796	    "copyreloc-lib.so" \
797	] \
798	[list \
799	    "Build libcopyreloc-main.a" \
800	    "" \
801	    "-Wa,-mx86-used-note=yes" \
802	    { copyreloc-main.S } \
803	    {} \
804	    "libcopyreloc-main.a" \
805	] \
806	[list \
807	    "Build copyreloc-main with PIE without -fPIE (1)" \
808	    "tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
809	    "-Wa,-mx86-used-note=yes" \
810	    { dummy.s } \
811	    {{readelf {-Wr} copyreloc-main1.rd}} \
812	    "copyreloc-main" \
813	] \
814	[list \
815	    "Build copyreloc-main with PIE without -fPIE (2)" \
816	    "tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
817	    "-Wa,-mx86-used-note=yes" \
818	    { dummy.s } \
819	    {{readelf {-Wr} copyreloc-main2.rd}} \
820	    "copyreloc-main" \
821	] \
822	[list \
823	    "Build pr17689.so" \
824	    "-shared" \
825	    "-fPIC -Wa,-mx86-used-note=yes" \
826	    { pr17689a.c } \
827	    {} \
828	    "pr17689.so" \
829	] \
830	[list \
831	    "Build pr17689now.so with -z now" \
832	    "-shared -Wl,-z,now" \
833	    "-fPIC -Wa,-mx86-used-note=yes" \
834	    { pr17689a.c } \
835	    {{readelf {-Wr} pr17689now.rd}} \
836	    "pr17689now.so" \
837	] \
838	[list \
839	    "Build pr17689b.o" \
840	    "" \
841	    "-Wa,-mx86-used-note=yes" \
842	    { pr17689b.S } \
843	    {} \
844	] \
845	[list \
846	    "Build pr17689 with PIE without -fPIE" \
847	    "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
848	    "-Wa,-mx86-used-note=yes" \
849	    { dummy.s } \
850	    {{readelf {-Wr} pr17689.rd}} \
851	    "pr17689" \
852	] \
853	[list \
854	    "Build pr17689 with PIE -z now without -fPIE" \
855	    "tmpdir/pr17689b.o tmpdir/pr17689.so -pie -Wl,-z,now" \
856	    "-Wa,-mx86-used-note=yes" \
857	    { dummy.s } \
858	    {{readelf {-Wr} pr17689now.rd}} \
859	    "pr17689now" \
860	] \
861	[list \
862	    "Build pr17827 with PIE without -fPIE" \
863	    "-Wl,--as-needed tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
864	    "-Wa,-mx86-used-note=yes" \
865	    { dummy.s } \
866	    {{readelf {-Wr} pr17827.rd}} \
867	    "pr17827" \
868	] \
869	[list \
870	    "Build pr18900.so" \
871	    "-shared" \
872	    "-fPIC -Wa,-mx86-used-note=yes" \
873	    { pr18900a.c } \
874	    "" \
875	    "pr18900.so" \
876	] \
877	[list \
878	    "Build pr18900.o" \
879	    "-r -nostdlib" \
880	    "-Wa,-mx86-used-note=yes" \
881	    { pr18900b.c pr18900c.c } \
882	    "" \
883	    "pr18900.o" \
884	] \
885	[list \
886	    "Build pr18900a" \
887	    "tmpdir/pr18900.o tmpdir/pr18900.so" \
888	    "-Wa,-mx86-used-note=yes" \
889	    { dummy.s } \
890	    {{readelf {-Wrd} pr18900a.rd}} \
891	    "pr18900a" \
892	] \
893	[list \
894	    "Build pr18900b" \
895	    "-Wl,--as-needed tmpdir/pr18900.o tmpdir/pr18900.so" \
896	    "-Wa,-mx86-used-note=yes" \
897	    { dummy.s } \
898	    {{readelf {-Wrd} pr18900b.rd}} \
899	    "pr18900b" \
900	] \
901	[list \
902	    "Build pr19031.so" \
903	    "-shared" \
904	    "-fPIC -Wa,-mx86-used-note=yes" \
905	    { pr19031a.c } \
906	    "" \
907	    "pr19031.so" \
908	] \
909	[list \
910	    "Build gotpcrel1d.so" \
911	    "-shared" \
912	    "-Wa,-mx86-used-note=yes" \
913	    { gotpcrel1d.S } \
914	    "" \
915	    "gotpcrel1d.so" \
916	] \
917	[list \
918	    "Build gotpcrel1a.o gotpcrel1b.o gotpcrel1c.o" \
919	    "" \
920	    "-Wa,-mrelax-relocations=yes,-mx86-used-note=yes" \
921	    { gotpcrel1a.S gotpcrel1b.c gotpcrel1c.c } \
922	] \
923	[list \
924	    "Build gotpcrel1" \
925	    "$NOPIE_LDFLAGS -Wl,--as-needed tmpdir/gotpcrel1a.o \
926	     tmpdir/gotpcrel1b.o tmpdir/gotpcrel1c.o \
927	     tmpdir/gotpcrel1d.so" \
928	    "-Wa,-mx86-used-note=yes" \
929	    { dummy.s } \
930	    {{objdump {-dw} gotpcrel1.dd}} \
931	    "gotpcrel1" \
932	] \
933	[list \
934	    "Build pr19319.so" \
935	    "-shared" \
936	    "-Wa,-mx86-used-note=yes" \
937	    { pr19319a.S } \
938	    "" \
939	    "pr19319.so" \
940	] \
941	[list \
942	    "Build pr19319" \
943	    "-pie -nostdlib -nostartfiles tmpdir/pr19319.so" \
944	    "-Wa,-mx86-used-note=yes" \
945	    { pr19319b.S } \
946	    {{objdump {-dw} pr19319.dd}} \
947	    "pr19319" \
948	] \
949	[list \
950	    "Build pr24276.so" \
951	    "-shared -nostdlib -nostartfiles \
952	     -Ltmpdir $srcdir/$subdir/pr24276.dso" \
953	    "-Wa,-mx86-used-note=yes" \
954	    { pr19319b.S } \
955	    {{warning_output pr24276.warn}} \
956	    "pr24276.so" \
957	] \
958	[list \
959	    "Build property 1" \
960	    "" \
961	    "-Wa,-mx86-used-note=no" \
962	    {pass.c property-no-copy.S} \
963	    {{readelf {-n} property-1.r}} \
964	    "property-1" \
965	] \
966	[list \
967	    "Build property 1 (.o)" \
968	    "-r -nostdlib" \
969	    "-Wa,-mx86-used-note=yes" \
970	    {pass.c property-no-copy.S} \
971	    {{readelf {-n} property-1a.r}} \
972	    "property-1.o" \
973	] \
974	[list \
975	    "Build property 1 (.so)" \
976	    "-shared" \
977	    "-fPIC -Wa,-mx86-used-note=no" \
978	    {pass.c property-no-copy.S} \
979	    {{readelf {-n} property-1.r}} \
980	    "property-1.so" \
981	] \
982	[list \
983	    "Build property 2" \
984	    "" \
985	    "-Wa,-mx86-used-note=no" \
986	    {pass.c property-stack.S} \
987	    {{readelf {-n} property-2.r}} \
988	    "property-2" \
989	] \
990	[list \
991	    "Build property 2 (.o)" \
992	    "-r -nostdlib" \
993	    "-Wa,-mx86-used-note=yes" \
994	    {pass.c property-stack.S} \
995	    {{readelf {-n} property-2a.r}} \
996	    "property-2.o" \
997	] \
998	[list \
999	    "Build property 2 (.so)" \
1000	    "-shared" \
1001	    "-fPIC -Wa,-mx86-used-note=yes" \
1002	    {pass.c property-stack.S} \
1003	    {{readelf {-n} property-2.r}} \
1004	    "property-2.so" \
1005	] \
1006	[list \
1007	    "Build property 3" \
1008	    "" \
1009	    "-Wa,-mx86-used-note=yes" \
1010	    {pass.c property-stack.S property-x86-1.S} \
1011	    {{readelf {-n} property-3.r}} \
1012	    "property-3" \
1013	] \
1014	[list \
1015	    "Build property 3 (.o)" \
1016	    "-r -nostdlib" \
1017	    "-Wa,-mx86-used-note=yes" \
1018	    {pass.c property-x86-1.S property-stack.S} \
1019	    {{readelf {-n} property-3a.r}} \
1020	    "property-3.o" \
1021	] \
1022	[list \
1023	    "Build property 3 (.so)" \
1024	    "-shared" \
1025	    "-fPIC -Wa,-mx86-used-note=yes" \
1026	    {property-x86-1.S pass.c property-stack.S} \
1027	    {{readelf {-n} property-3.r}} \
1028	    "property-3.so" \
1029	] \
1030	[list \
1031	    "Build property 4" \
1032	    "" \
1033	    "-Wa,-mx86-used-note=yes" \
1034	    {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
1035	    {{readelf {-n} property-4.r}} \
1036	    "property-4" \
1037	] \
1038	[list \
1039	    "Build property 4 (.o)" \
1040	    "-r -nostdlib" \
1041	    "-Wa,-mx86-used-note=yes" \
1042	    {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
1043	    {{readelf {-n} property-4a.r}} \
1044	    "property-4.o" \
1045	] \
1046	[list \
1047	    "Build property 4 (.so)" \
1048	    "-shared" \
1049	    "-fPIC -Wa,-mx86-used-note=yes" \
1050	    {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
1051	    {{readelf {-n} property-4.r}} \
1052	    "property-4.so" \
1053	] \
1054	[list \
1055	    "Build property 4 (-Wl,-z,stack-size=0)" \
1056	    "-Wl,-z,stack-size=0" \
1057	    "-Wa,-mx86-used-note=yes" \
1058	    {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
1059	    {{readelf {-n} property-4.r}} \
1060	    "property-4" \
1061	] \
1062	[list \
1063	    "Build property 5" \
1064	    "-Wl,-z,stack-size=0x900000" \
1065	    "-Wa,-mx86-used-note=yes" \
1066	    {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
1067	    {{readelf {-n} property-5.r}} \
1068	    "property-5" \
1069	] \
1070	[list \
1071	    "Build property 5 (.o)" \
1072	    "-r -nostdlib -Wl,-z,stack-size=0x900000" \
1073	    "-Wa,-mx86-used-note=yes" \
1074	    {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
1075	    {{readelf {-n} property-5a.r}} \
1076	    "property-5.o" \
1077	] \
1078	[list \
1079	    "Build property 5 (.so)" \
1080	    "-shared -Wl,-z,stack-size=0x900000" \
1081	    "-fPIC -Wa,-mx86-used-note=yes" \
1082	    {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
1083	    {{readelf {-n} property-5.r}} \
1084	    "property-5.so" \
1085	] \
1086	[list \
1087	    "Build property-6.so" \
1088	    "-shared" \
1089	    "-fPIC -Wa,-mx86-used-note=yes" \
1090	    {property-6a.c property-6c.S} \
1091	    {{readelf {-n} property-6.r}} \
1092	    "property-6.so" \
1093	] \
1094	[list \
1095	    "Build property-6.o" \
1096	    "-r -nostdlib" \
1097	    "-Wa,-mx86-used-note=yes" \
1098	    {property-6b.c property-stack.S} \
1099	    {{readelf {-n} property-2a.r}} \
1100	    "property-6.o" \
1101	] \
1102	[list \
1103	    "Build property-6" \
1104	    "-Wl,--as-needed tmpdir/property-6.o tmpdir/property-6.so" \
1105	    "-Wa,-mx86-used-note=yes" \
1106	    { dummy.s } \
1107	    {{readelf {-n} property-2.r}} \
1108	    "property-6" \
1109	] \
1110	[list \
1111	    "Build property 7a (.o)" \
1112	    "-r -nostdlib" \
1113	    "-Wa,-mx86-used-note=yes" \
1114	    {property-unsorted-1.S} \
1115	    {{readelf {-n} property-7a.r}} \
1116	    "property-7a.o" \
1117	] \
1118	[list \
1119	    "Build property 7b (.o)" \
1120	    "-r -nostdlib" \
1121	    "-Wa,-mx86-used-note=yes" \
1122	    {property-unsorted-2.S} \
1123	    {{readelf {-n} property-7a.r}} \
1124	    "property-7b.o" \
1125	] \
1126	[list \
1127	    "Build pr22001-1.so" \
1128	    "-shared" \
1129	    "-fPIC -Wa,-mx86-used-note=yes" \
1130	    { pr22001-1a.c } \
1131	    {} \
1132	    "pr22001-1.so" \
1133	] \
1134	[list \
1135	    "Build pr22001-1a" \
1136	    "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed,-z,notext tmpdir/pr22001-1.so" \
1137	    "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1138	    { pr22001-1b.c } \
1139	    {{error_output "pr22001-1a.err"}} \
1140	    "pr22001-1a" \
1141	] \
1142	[list \
1143	    "Build pr21997-1.so" \
1144	    "-shared" \
1145	    "-Wa,-mx86-used-note=yes" \
1146	    { property-stack.S property-no-copy.S pr21997-1a.S } \
1147	    {} \
1148	    "pr21997-1.so" \
1149	] \
1150	[list \
1151	    "Build pr21997-1a" \
1152	    "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
1153	    "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1154	    { pr21997-1b.c } \
1155	    {{error_output "pr21997-1a.err"}} \
1156	    "pr21997-1a" \
1157	] \
1158	[list \
1159	    "Build pr22064a.o" \
1160	    "" \
1161	    "-Wa,-mx86-used-note=yes" \
1162	    { pr22064a.S } \
1163	] \
1164	[list \
1165	    "Build pr22064.so" \
1166	    "-shared" \
1167	    "-fPIC -Wa,-mx86-used-note=yes" \
1168	    { pr22064b.c } \
1169	    {} \
1170	    "pr22064.so" \
1171	] \
1172	[list \
1173	    "Build pr22393-3a.so" \
1174	    "-shared -Wl,-z,separate-code,-z,max-page-size=0x1000" \
1175	    "-fPIC -Wa,-mx86-used-note=yes" \
1176	    {pr22393-3a.c} \
1177	    {{readelf -lW pr22393-3a.rd} \
1178	     {readelf -lW pr22393-3b.rd}} \
1179	    "pr22393-3a.so" \
1180	] \
1181	[list \
1182	    "Build pr22393-3a-now.so" \
1183	    "-shared -Wl,-z,separate-code,-z,now,-z,max-page-size=0x1000" \
1184	    "-fPIC -Wa,-mx86-used-note=yes" \
1185	    {pr22393-3a.c} \
1186	    {{readelf -lW pr22393-3a.rd} \
1187	     {readelf -lW pr22393-3b.rd}} \
1188	    "pr22393-3a-now.so" \
1189	] \
1190	[list \
1191	    "Build pr22393-3" \
1192	    "$NOPIE_LDFLAGS -Wl,-z,separate-code,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-3a.so" \
1193	    "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1194	    {pr22393-3b.c} \
1195	    {{readelf -lW pr22393-3a.rd} \
1196	     {readelf -lW pr22393-3b.rd}} \
1197	    "pr22393-3" \
1198	] \
1199	[list \
1200	    "Build pr22393-3 (PIE)" \
1201	    "-pie -Wl,-z,separate-code,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-3a-now.so" \
1202	    "-fPIE -Wa,-mx86-used-note=yes" \
1203	    {pr22393-3b.c} \
1204	    {{readelf -lW pr22393-3a.rd} \
1205	     {readelf -lW pr22393-3b.rd}} \
1206	    "pr22393-3-pie" \
1207	] \
1208	[list \
1209	    "Build pr22393-3 (static)" \
1210	    "-static -Wl,-z,separate-code,-z,max-page-size=0x1000" \
1211	    "-Wa,-mx86-used-note=yes" \
1212	    {pr22393-3a.c pr22393-3b.c} \
1213	    {{readelf -lW pr22393-3a.rd} \
1214	     {readelf -lW pr22393-3b.rd}} \
1215	    "pr22393-3-static" \
1216	] \
1217	[list \
1218	    "Build pr22791-1.so" \
1219	    "-shared" \
1220	    "-fPIC -Wa,-mx86-used-note=yes" \
1221	    { pr22791-1a.c } \
1222	    {} \
1223	    "pr22791-1.so" \
1224	] \
1225	[list \
1226	    "Build pr22791-1" \
1227	    "-pie -Wl,--no-as-needed,-z,notext tmpdir/pr22791-1.so" \
1228	    "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1229	    { pr22791-1b.s } \
1230	    {{error_output "pr22791-1.err"}} \
1231	    "pr22791-1" \
1232	] \
1233	[list \
1234	    "Build pr22791-2a.o" \
1235	    "" \
1236	    "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1237	    { pr22791-2a.s } \
1238	] \
1239	[list \
1240	    "Build pr22791-2.so" \
1241	    "-shared tmpdir/pr22791-2a.o" \
1242	    "-fPIC -Wa,-mx86-used-note=yes" \
1243	    { pr22791-2b.c } \
1244	    {{readelf -drW pr22791-2.rd}} \
1245	    "pr22791-2.so" \
1246	] \
1247	[list \
1248	    "Build pr22791-2" \
1249	    "-pie -Wl,--no-as-needed tmpdir/pr22791-2.so" \
1250	    "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1251	    { pr22791-2c.s } \
1252	    {{readelf -drW pr22791-2.rd}} \
1253	    "pr22791-2" \
1254	] \
1255	[list \
1256	    "Build pr22842.so" \
1257	    "-shared" \
1258	    "-fPIC -Wa,-mx86-used-note=yes" \
1259	    { pr22842a.c } \
1260	    {} \
1261	    "pr22842.so" \
1262	] \
1263	[list \
1264	    "Build pr22842" \
1265	    "-pie -Wl,--no-as-needed tmpdir/pr22842.so" \
1266	    "-Wa,-mx86-used-note=yes" \
1267	    { pr22842b.S } \
1268	    {{readelf -rW pr22842a.rd} \
1269	     {readelf -rW pr22842b.rd}} \
1270	    "pr22842" \
1271	] \
1272    ]
1273
1274    if  {[istarget "x86_64-*-linux*-gnux32"]} {
1275	run_cc_link_tests [list \
1276	    [list \
1277		"Build pr25416-5b.o (GDesc -maddress-mode=short)" \
1278		"" \
1279		"-Wa,-mx86-used-note=yes" \
1280		{ pr25416-5b.s } \
1281	    ] \
1282	    [list \
1283		"Build pr25416-5b.so (GDesc -> IE -maddress-mode=short)" \
1284		"-shared" \
1285		"-fPIC -Wa,-mx86-used-note=yes" \
1286		{ pr25416-5b.s pr25416-5d.s } \
1287		{} \
1288		"pr25416-5b.so" \
1289	    ] \
1290	    [list \
1291		"Build pr25416-5c.o (GDesc -maddress-mode=long)" \
1292		"" \
1293		"-Wa,-mx86-used-note=yes" \
1294		{ pr25416-5c.s } \
1295	    ] \
1296	    [list \
1297		"Build pr25416-5c.so (GDesc -> IE -maddress-mode=long)" \
1298		"-shared" \
1299		"-fPIC -Wa,-mx86-used-note=yes" \
1300		{ pr25416-5c.s pr25416-5d.s } \
1301		{} \
1302		"pr25416-5c.so" \
1303	    ] \
1304	    [list \
1305		"Build pr25416-5d.so (GDesc -maddress-mode=short)" \
1306		"-shared" \
1307		"-fPIC -Wa,-mx86-used-note=yes" \
1308		{ pr25416-5b.s pr25416-5e.s } \
1309		{} \
1310		"pr25416-5d.so" \
1311	    ] \
1312	    [list \
1313		"Build pr25416-5d.o (IE -maddress-mode=short)" \
1314		"" \
1315		"-Wa,-mx86-used-note=yes" \
1316		{ pr25416-5d.s } \
1317	    ] \
1318	]
1319
1320	run_ld_link_exec_tests [list \
1321	    [list \
1322		"Run pr22001-1b" \
1323		"$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed,-z,notext tmpdir/pr22001-1.so" \
1324		"-Wa,-mx86-used-note=yes" \
1325		{ pr22001-1c.c } \
1326		"pr22001-1b" \
1327		"pass.out" \
1328		"$NOPIE_CFLAGS" \
1329	    ] \
1330	    [list \
1331		"Run pr21997-1b" \
1332		"$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
1333		"-Wa,-mx86-used-note=yes" \
1334		{ pr21997-1c.c } \
1335		"pr21997-1b" \
1336		"pass.out" \
1337		"$NOPIE_CFLAGS" \
1338	    ] \
1339	    [list \
1340		"Run pr25416-5a (GDesc -> IE -maddress-mode=short)" \
1341		"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr25416-5b.so" \
1342		"-Wa,-mx86-used-note=yes" \
1343		{ pr25416-5a.c } \
1344		"pr25416-5a" \
1345		"pass.out" \
1346		"$NOPIE_CFLAGS" \
1347	    ] \
1348	    [list \
1349		"Run pr25416-5b (GDesc -> LE -maddress-mode=short" \
1350		"$NOPIE_LDFLAGS tmpdir/pr25416-5b.o tmpdir/pr25416-5d.o" \
1351		"-Wa,-mx86-used-note=yes" \
1352		{ pr25416-5a.c } \
1353		"pr25416-5b" \
1354		"pass.out" \
1355		"$NOPIE_CFLAGS" \
1356	    ] \
1357	    [list \
1358		"Run pr25416-5c (GDesc -> IE -maddress-mode=long)" \
1359		"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr25416-5c.so" \
1360		"-Wa,-mx86-used-note=yes" \
1361		{ pr25416-5a.c } \
1362		"pr25416-5c" \
1363		"pass.out" \
1364		"$NOPIE_CFLAGS" \
1365	    ] \
1366	    [list \
1367		"Run pr25416-5d (GDesc -> LE -maddress-mode=long)" \
1368		"$NOPIE_LDFLAGS tmpdir/pr25416-5c.o tmpdir/pr25416-5d.o" \
1369		"-Wa,-mx86-used-note=yes" \
1370		{ pr25416-5a.c } \
1371		"pr25416-5d" \
1372		"pass.out" \
1373		"$NOPIE_CFLAGS" \
1374	    ] \
1375	    [list \
1376		"Run pr25416-5e (GDesc -maddress-mode=short)" \
1377		"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr25416-5d.so" \
1378		"-Wa,-mx86-used-note=yes" \
1379		{ pr25416-5a.c } \
1380		"pr25416-5e" \
1381		"pass.out" \
1382		"$NOPIE_CFLAGS" \
1383	    ] \
1384	    [list \
1385		"Run pr25416-5f (PIE GDesc -> LE -maddress-mode=short)" \
1386		"-pie -Wl,-z,notext tmpdir/pr25416-5b.o tmpdir/pr25416-5d.o" \
1387		"-Wa,-mx86-used-note=yes" \
1388		{ pr25416-5a.c } \
1389		"pr25416-5f" \
1390		"pass.out" \
1391	    ] \
1392	    [list \
1393		"Run pr25416-5g (PIE GDesc -> LE -maddress-mode=long)" \
1394		"-pie -Wl,-z,notext tmpdir/pr25416-5c.o tmpdir/pr25416-5d.o" \
1395		"-Wa,-mx86-used-note=yes" \
1396		{ pr25416-5a.c } \
1397		"pr25416-5g" \
1398		"pass.out" \
1399	    ] \
1400	]
1401    } else {
1402	run_cc_link_tests [list \
1403	    [list \
1404		"Build pr22001-1b" \
1405		"$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed,-z,notext tmpdir/pr22001-1.so" \
1406		"$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1407		{ pr22001-1c.c } \
1408		{{error_output "pr22001-1b.err"}} \
1409		"pr22001-1b" \
1410	    ] \
1411	    [list \
1412		"Build pr21997-1b" \
1413		"$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
1414		"$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1415		{ pr21997-1c.c } \
1416		{{error_output "pr21997-1b.err"}} \
1417		"pr21997-1b" \
1418	    ] \
1419	]
1420    }
1421
1422    run_ld_link_exec_tests [list \
1423	[list \
1424	    "Run plt-main" \
1425	    "-Wl,--no-as-needed tmpdir/plt-main1.o tmpdir/plt-main2.o \
1426	     tmpdir/plt-main3.o tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1427	    "-Wa,-mx86-used-note=yes" \
1428	    { plt-main5.c } \
1429	    "plt-main" \
1430	    "plt-main.out" \
1431	] \
1432	[list \
1433	    "Run plt-main with PIE" \
1434	    "-Wl,--no-as-needed -pie tmpdir/plt-main1.o tmpdir/plt-main2.o \
1435	     tmpdir/plt-main3.o tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1436	    "-Wa,-mx86-used-note=yes" \
1437	    { plt-main5.c } \
1438	    "plt-main-pie" \
1439	    "plt-main.out" \
1440	    "-fPIC" \
1441	] \
1442	[list \
1443	    "Run copyreloc-main with PIE without -fPIE" \
1444	    "-Wl,--as-needed -pie tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so" \
1445	    "-Wa,-mx86-used-note=yes" \
1446	    { dummy.s } \
1447	    "copyreloc-main" \
1448	    "copyreloc-main.out" \
1449	] \
1450	[list \
1451	    "Run pr17689 with PIE without -fPIE" \
1452	    "-Wl,--no-as-needed -pie tmpdir/pr17689b.o tmpdir/pr17689.so" \
1453	    "-Wa,-mx86-used-note=yes" \
1454	    { dummy.s } \
1455	    "pr17689" \
1456	    "pr17689.out" \
1457	] \
1458	[list \
1459	    "Run pr17689 with PIE -z now without -fPIE" \
1460	    "-Wl,--as-needed,-z,now -pie tmpdir/pr17689b.o tmpdir/pr17689.so" \
1461	    "-Wa,-mx86-used-note=yes" \
1462	    { dummy.s } \
1463	    "pr17689now" \
1464	    "pr17689.out" \
1465	] \
1466	[list \
1467	    "Run pr18900" \
1468	    "-Wl,--no-as-needed tmpdir/pr18900.o tmpdir/pr18900.so" \
1469	    "-Wa,-mx86-used-note=yes" \
1470	    { dummy.s } \
1471	    "pr18900" \
1472	    "pr18900.out" \
1473	] \
1474	[list \
1475	    "Run pr19031" \
1476	    "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr19031.so" \
1477	    "-Wa,-mx86-used-note=yes" \
1478	    { pr19031b.S pr19031c.c } \
1479	    "pr19031" \
1480	    "pr19031.out" \
1481	    "$NOPIE_CFLAGS" \
1482	] \
1483	[list \
1484	    "Run gotpcrel1" \
1485	    "-Wl,--no-as-needed tmpdir/gotpcrel1d.so" \
1486	    "-Wa,-mx86-used-note=yes" \
1487	    { gotpcrel1a.S gotpcrel1b.c gotpcrel1c.c } \
1488	    "gotpcrel1" \
1489	    "gotpcrel1.out" \
1490	] \
1491	[list \
1492	    "Run property 1" \
1493	    "" \
1494	    "-Wa,-mx86-used-note=yes" \
1495	    {pass.c property-no-copy.S} \
1496	    "property-1" "pass.out" \
1497	] \
1498	[list \
1499	    "Run property 1 (PIE)" \
1500	    "-pie" \
1501	    "-Wa,-mx86-used-note=yes" \
1502	    {pass.c property-no-copy.S} \
1503	    "property-1-pie" "pass.out" "-fPIE" \
1504	] \
1505	[list \
1506	    "Run property 1 (static)" \
1507	    "-static" \
1508	    "-Wa,-mx86-used-note=yes" \
1509	    {pass.c property-no-copy.S} \
1510	    "property-1-static" "pass.out" \
1511	] \
1512	[list \
1513	    "Run property 2" \
1514	    "" \
1515	    "-Wa,-mx86-used-note=yes" \
1516	    {pass.c property-stack.S} \
1517	    "property-2" "pass.out" \
1518	] \
1519	[list \
1520	    "Run property 2 (PIE)" \
1521	    "-pie" \
1522	    "-Wa,-mx86-used-note=yes" \
1523	    {pass.c property-stack.S} \
1524	    "property-2-pie" "pass.out" "-fPIE" \
1525	] \
1526	[list \
1527	    "Run property 2 (static)" \
1528	    "-static" \
1529	    "-Wa,-mx86-used-note=yes" \
1530	    {pass.c property-stack.S} \
1531	    "property-3-static" "pass.out" \
1532	] \
1533	[list \
1534	    "Run property 3" \
1535	    "" \
1536	    "-Wa,-mx86-used-note=yes" \
1537	    {pass.c property-stack.S property-x86-1.S} \
1538	    "property-3" "pass.out" \
1539	] \
1540	[list \
1541	    "Run property 3 (PIE)" \
1542	    "-pie" \
1543	    "-Wa,-mx86-used-note=yes" \
1544	    {pass.c property-x86-1.S property-stack.S} \
1545	    "property-3-pie" "pass.out" "-fPIE" \
1546	] \
1547	[list \
1548	    "Run property 3 (static)" \
1549	    "-static" \
1550	    "-Wa,-mx86-used-note=yes" \
1551	    {property-x86-1.S pass.c property-stack.S} \
1552	    "property-3-static" "pass.out" \
1553	] \
1554	[list \
1555	    "Run property 4" \
1556	    "" \
1557	    "-Wa,-mx86-used-note=yes" \
1558	    {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
1559	    "property-4" "pass.out" \
1560	] \
1561	[list \
1562	    "Run property 4 (PIE)" \
1563	    "-pie" \
1564	    "-Wa,-mx86-used-note=yes" \
1565	    {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
1566	    "property-4-pie" "pass.out" "-fPIE" \
1567	] \
1568	[list \
1569	    "Run property 4 (static)" \
1570	    "-static" \
1571	    "-Wa,-mx86-used-note=yes" \
1572	    {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
1573	    "property-4-static" "pass.out" \
1574	] \
1575	[list \
1576	    "Run property 5" \
1577	    "-Wl,-z,stack-size=0x900000" \
1578	    "-Wa,-mx86-used-note=yes" \
1579	    {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
1580	    "property-5" "pass.out" \
1581	] \
1582	[list \
1583	    "Run property 5 (PIE)" \
1584	    "-pie -Wl,-z,stack-size=0x900000" \
1585	    "-Wa,-mx86-used-note=yes" \
1586	    {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
1587	    "property-5-pie" "pass.out" "-fPIE" \
1588	] \
1589	[list \
1590	    "Run property 5 (static)" \
1591	    "-static -Wl,-z,stack-size=0x900000" \
1592	    "-Wa,-mx86-used-note=yes" \
1593	    {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
1594	    "property-5-static" "pass.out" \
1595	] \
1596	[list \
1597	    "Run pr22001-1a (PIC 1)" \
1598	    "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1599	    "-Wa,-mx86-used-note=yes" \
1600	    { pr22001-1b.c } \
1601	    "pr22001-1a-pic-1" \
1602	    "pass.out" \
1603	    "-fPIC" \
1604	] \
1605	[list \
1606	    "Run pr22001-1a (PIC 2)" \
1607	    "-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1608	    "-Wa,-mx86-used-note=yes" \
1609	    { pr22001-1b.c } \
1610	    "pr22001-1a-pic-2" \
1611	    "pass.out" \
1612	    "-fPIC" \
1613	] \
1614	[list \
1615	    "Run pr22001-1b (PIC 1)" \
1616	    "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1617	    "-Wa,-mx86-used-note=yes" \
1618	    { pr22001-1c.c } \
1619	    "pr22001-1b-pic-1" \
1620	    "pass.out" \
1621	    "-fPIC" \
1622	] \
1623	[list \
1624	    "Run pr22001-1b (PIC 2)" \
1625	    "-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1626	    "-Wa,-mx86-used-note=yes" \
1627	    { pr22001-1c.c } \
1628	    "pr22001-1b-pic-2" \
1629	    "pass.out" \
1630	    "-fPIC" \
1631	] \
1632	[list \
1633	    "Run pr21997-1a (PIC 1)" \
1634	    "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1635	    "-Wa,-mx86-used-note=yes" \
1636	    { pr21997-1b.c } \
1637	    "pr21997-1a-pic-1" \
1638	    "pass.out" \
1639	    "-fPIC" \
1640	] \
1641	[list \
1642	    "Run pr21997-1a (PIC 2)" \
1643	    "-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1644	    "-Wa,-mx86-used-note=yes" \
1645	    { pr21997-1b.c } \
1646	    "pr21997-1a-pic-2" \
1647	    "pass.out" \
1648	    "-fPIC" \
1649	] \
1650	[list \
1651	    "Run pr21997-1b (PIC 1)" \
1652	    "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1653	    "-Wa,-mx86-used-note=yes" \
1654	    { pr21997-1c.c } \
1655	    "pr21997-1b-pic-1" \
1656	    "pass.out" \
1657	    "-fPIC" \
1658	] \
1659	[list \
1660	    "Run pr21997-1b (PIC 2)" \
1661	    "-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1662	    "-Wa,-mx86-used-note=yes" \
1663	    { pr21997-1c.c } \
1664	    "pr21997-1b-pic-2" \
1665	    "pass.out" \
1666	    "-fPIC" \
1667	] \
1668	[list \
1669	    "Run pr22064" \
1670	    "-pie -Wl,--no-as-needed tmpdir/pr22064a.o tmpdir/pr22064.so" \
1671	    "-Wa,-mx86-used-note=yes" \
1672	    { dummy.s } \
1673	    "pr22064-pie" \
1674	    "pass.out" \
1675	    "-fPIE" \
1676	] \
1677	[list \
1678	    "Run pr22393-3" \
1679	    "$NOPIE_LDFLAGS -Wl,-z,separate-code,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-3a.so" \
1680	    "-Wa,-mx86-used-note=yes" \
1681	    {pr22393-3b.c} \
1682	    "pr22393-3" \
1683	    "pass.out" \
1684	    "$NOPIE_CFLAGS" \
1685	] \
1686	[list \
1687	    "Run pr22393-3 (PIE)" \
1688	    "-pie -Wl,-z,separate-code,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-3a-now.so" \
1689	    "-Wa,-mx86-used-note=yes" \
1690	    {pr22393-3b.c} \
1691	    "pr22393-3-pie" \
1692	    "pass.out" \
1693	    "-fPIE" \
1694	] \
1695	[list \
1696	    "Run pr22393-3 (static)" \
1697	    "-static -Wl,-z,separate-code,-z,max-page-size=0x1000" \
1698	    "-Wa,-mx86-used-note=yes" \
1699	    {pr22393-3a.c pr22393-3b.c} \
1700	    "pr22393-3-static" \
1701	    "pass.out" \
1702	] \
1703	[list \
1704	    "Run pr22791-2" \
1705	    "-pie -Wl,--no-as-needed tmpdir/pr22791-2.so" \
1706	    "-Wa,-mx86-used-note=yes" \
1707	    { pr22791-2c.s } \
1708	    "pr22791-2" \
1709	    "pass.out" \
1710	    "$NOPIE_CFLAGS" \
1711	] \
1712	[list \
1713	    "Run pr22842" \
1714	    "-pie -Wl,--no-as-needed tmpdir/pr22842.so" \
1715	    "-Wa,-mx86-used-note=yes" \
1716	    { pr22842b.S } \
1717	    "pr22842" \
1718	    "pass.out" \
1719	] \
1720	[list \
1721	    "Run pr23997" \
1722	    "" \
1723	    "" \
1724	    { pr23997a.s pr23997b.c pr23997c.c } \
1725	    "pr23997" \
1726	    "pass.out" \
1727	] \
1728    ]
1729
1730    # Run-time tests which require working ifunc attribute support.
1731    if { [check_ifunc_attribute_available] } {
1732	run_cc_link_tests [list \
1733	    [list \
1734		"Build libpr19784a.so" \
1735		"-shared -Wl,-Bsymbolic-functions" \
1736		"-fPIC -O2 -g -Wa,-mx86-used-note=yes" \
1737		{ pr19784b.c pr19784c.c } \
1738		{} \
1739		"libpr19784a.so" \
1740	    ] \
1741	    [list \
1742		"Build libpr19784b.so" \
1743		"-shared -Wl,-Bsymbolic-functions" \
1744		"-fPIC -O2 -g -Wa,-mx86-used-note=yes" \
1745		{ pr19784c.c pr19784b.c } \
1746		{} \
1747		"libpr19784b.so" \
1748	    ] \
1749	    [list \
1750		"Build pr19784a.o" \
1751		"" \
1752		"-Wa,-mx86-used-note=yes" \
1753		{ pr19784a.c } \
1754	    ] \
1755	]
1756
1757	run_ld_link_exec_tests [list \
1758	    [list \
1759		"Run pr19784a" \
1760		"-Wl,--no-as-needed tmpdir/pr19784a.o tmpdir/libpr19784a.so" \
1761		"-Wa,-mx86-used-note=yes" \
1762		{ dummy.s } \
1763		"pr19784a" \
1764		"pass.out" \
1765	    ] \
1766	    [list \
1767		"Run pr19784b" \
1768		"-Wl,--as-needed tmpdir/pr19784a.o tmpdir/libpr19784b.so" \
1769		"-Wa,-mx86-used-note=yes" \
1770		{ dummy.s } \
1771		"pr19784b" \
1772		"pass.out" \
1773	    ] \
1774	]
1775    }
1776
1777    if { [istarget "x86_64-*-linux*"] \
1778	 && ![istarget "x86_64-*-linux*-gnux32"]} {
1779
1780	run_cc_link_tests [list \
1781	    [list \
1782		"Build plt-main with -z bndplt" \
1783		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1784		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt \
1785		 -z noseparate-code -z max-page-size=0x200000" \
1786		"-Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
1787		{ plt-main5.c } \
1788		{{objdump {-drw} plt-main-bnd.dd}} \
1789		"plt-main-bnd" \
1790	    ] \
1791	    [list \
1792		"Build plt-main with PIE and -z bndplt" \
1793		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1794		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie \
1795		 -z noseparate-code -z max-page-size=0x200000" \
1796		"-fPIC -Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
1797		{ plt-main5.c } \
1798		{{objdump {-drw} plt-main-bnd.dd}} \
1799		"plt-main-pie-bnd" \
1800	    ] \
1801	    [list \
1802		"Build plt-main with -z bndplt -z now" \
1803		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1804		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -z now \
1805		 -z noseparate-code -z max-page-size=0x200000" \
1806		"-Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
1807		{ plt-main5.c } \
1808		{{readelf {-SW} plt-main-bnd-now.rd} {objdump {-drw} plt-main-bnd.dd}} \
1809		"plt-main-bnd-now" \
1810	    ] \
1811	    [list \
1812		"Build plt-main with PIE and -z bndplt -z now" \
1813		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1814		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -z now -pie \
1815		 -z noseparate-code -z max-page-size=0x200000" \
1816		"-fPIC -Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
1817		{ plt-main5.c } \
1818		{{readelf {-SW} plt-main-bnd-now.rd} {objdump {-drw} plt-main-bnd.dd}} \
1819		"plt-main-pie-bnd-now" \
1820	    ] \
1821	]
1822
1823	run_ld_link_exec_tests [list \
1824	    [list \
1825		"Run plt-main with -z bndplt" \
1826		"-Wl,--no-as-needed,-z,bndplt tmpdir/plt-main1.o \
1827		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1828		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1829		"-Wa,-mx86-used-note=yes" \
1830		{ plt-main5.c } \
1831		"plt-main-bnd" \
1832		"plt-main.out" \
1833	    ] \
1834	    [list \
1835		"Run plt-main with PIE and -z bndplt" \
1836		"-Wl,--no-as-needed,-z,bndplt -pie tmpdir/plt-main1.o \
1837		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1838		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1839		"-Wa,-mx86-used-note=yes" \
1840		{ plt-main5.c } \
1841		"plt-main-pie-bnd" \
1842		"plt-main.out" \
1843		"-fPIC" \
1844	    ] \
1845	    [list \
1846		"Run plt-main with -z bndplt -z now" \
1847		"-Wl,--no-as-needed,-z,bndplt,-z,now tmpdir/plt-main1.o \
1848		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1849		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1850		"-Wa,-mx86-used-note=yes" \
1851		{ plt-main5.c } \
1852		"plt-main-bnd-now" \
1853		"plt-main.out" \
1854	    ] \
1855	    [list \
1856		"Run plt-main with PIE and -z bndplt -z now" \
1857		"-Wl,--no-as-needed,-z,bndplt,-z,now -pie tmpdir/plt-main1.o \
1858		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1859		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1860		"-Wa,-mx86-used-note=yes" \
1861		{ plt-main5.c } \
1862		"plt-main-pie-bnd-now" \
1863		"plt-main.out" \
1864		"-fPIC" \
1865	    ] \
1866	    [list \
1867		"Run pr20800" \
1868		"-Wl,-z,now -pie" \
1869		"-Wa,-mx86-used-note=yes" \
1870		{ pr20800a.S pr20800b.S } \
1871		"pr20800" \
1872		"pass.out" \
1873	    ] \
1874	]
1875	if { [check_ifunc_attribute_available] } {
1876	    run_ld_link_exec_tests [list \
1877		[list \
1878		    "Run pr21481a" \
1879		    "$NOPIE_LDFLAGS -Wl,-z,bndplt" \
1880		    "-Wa,-mx86-used-note=yes" \
1881		    { pr21481a.c pr21481b.S } \
1882		    "pr21481a" \
1883		    "pass.out" \
1884		     "$NOPIE_CFLAGS" \
1885		] \
1886		[list \
1887		    "Run pr21481b" \
1888		    "$NOPIE_LDFLAGS -Wl,-z,bndplt,-z,now" \
1889		    "-Wa,-mx86-used-note=yes" \
1890		    { pr21481a.c pr21481b.S } \
1891		    "pr21481b" \
1892		    "pass.out" \
1893		    "$NOPIE_CFLAGS" \
1894		] \
1895	    ]
1896	}
1897    }
1898
1899    if { [istarget "x86_64-*-linux*"] } {
1900	if { [istarget "x86_64-*-linux*-gnux32"] } {
1901	    set pltdump {{objdump {-drw} plt-main-ibt-x32.dd}}
1902	    set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt-x32.dd}}
1903	} else {
1904	    set pltdump {{objdump {-drw} plt-main-ibt.dd}}
1905	    set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt.dd}}
1906	}
1907	run_cc_link_tests [list \
1908	    [list \
1909		"Build plt-main with -z ibtplt" \
1910		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1911		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt \
1912		 -z noseparate-code -z max-page-size=0x200000" \
1913		"-Wa,-mx86-used-note=yes" \
1914		{ plt-main5.c } \
1915		$pltdump \
1916		"plt-main-ibt" \
1917	    ] \
1918	    [list \
1919		"Build plt-main with PIE and -z ibtplt" \
1920		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1921		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt -pie \
1922		 -z noseparate-code -z max-page-size=0x200000" \
1923		"-fPIC -Wa,-mx86-used-note=yes" \
1924		{ plt-main5.c } \
1925		$pltdump \
1926		"plt-main-pie-ibt" \
1927	    ] \
1928	    [list \
1929		"Build plt-main with -z ibtplt -z now" \
1930		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1931		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt -z now \
1932		 -z noseparate-code -z max-page-size=0x200000" \
1933		"-Wa,-mx86-used-note=yes" \
1934		{ plt-main5.c } \
1935		$pltsecdump \
1936		"plt-main-ibt-now" \
1937	    ] \
1938	    [list \
1939		"Build plt-main with PIE and -z ibtplt -z now" \
1940		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1941		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt -z now -pie \
1942		 -z noseparate-code -z max-page-size=0x200000" \
1943		"-fPIC -Wa,-mx86-used-note=yes" \
1944		{ plt-main5.c } \
1945		$pltsecdump \
1946		"plt-main-pie-ibt-now" \
1947	    ] \
1948	    [list \
1949		"Build libibtplt-lib.so with -z ibtplt" \
1950		"-shared -z ibtplt \
1951		 -z noseparate-code -z max-page-size=0x200000" \
1952		"-fPIC -Wa,-mx86-used-note=yes" \
1953		{ plt-main1.c plt-main2.c plt-main3.c plt-main4.c} \
1954		$pltdump \
1955		"libibtplt-lib.so" \
1956	    ] \
1957	    [list \
1958		"Build libibtplt--now-lib.so with -z ibtplt -z now" \
1959		"-shared -z ibtplt -z now \
1960		 -z noseparate-code -z max-page-size=0x200000" \
1961		"-fPIC -Wa,-mx86-used-note=yes" \
1962		{ plt-main1.c plt-main2.c plt-main3.c plt-main4.c} \
1963		$pltdump \
1964		"libibtplt-now-lib.so" \
1965	    ] \
1966	]
1967
1968	run_ld_link_exec_tests [list \
1969	    [list \
1970		"Run plt-main with -z ibtplt" \
1971		"-Wl,--no-as-needed,-z,ibtplt tmpdir/plt-main1.o \
1972		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1973		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1974		"-Wa,-mx86-used-note=yes" \
1975		{ plt-main5.c } \
1976		"plt-main-ibt" \
1977		"plt-main.out" \
1978	    ] \
1979	    [list \
1980		"Run plt-main with PIE and -z ibtplt" \
1981		"-Wl,--no-as-needed,-z,ibtplt -pie tmpdir/plt-main1.o \
1982		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1983		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1984		"-Wa,-mx86-used-note=yes" \
1985		{ plt-main5.c } \
1986		"plt-main-pie-ibt" \
1987		"plt-main.out" \
1988		"-fPIC" \
1989	    ] \
1990	    [list \
1991		"Run plt-main with -z ibtplt -z now" \
1992		"-Wl,--no-as-needed,-z,ibtplt,-z,now tmpdir/plt-main1.o \
1993		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
1994		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1995		"-Wa,-mx86-used-note=yes" \
1996		{ plt-main5.c } \
1997		"plt-main-ibt-now" \
1998		"plt-main.out" \
1999	    ] \
2000	    [list \
2001		"Run plt-main with PIE and -z ibtplt -z now" \
2002		"-Wl,--no-as-needed,-z,ibtplt,-z,now -pie tmpdir/plt-main1.o \
2003		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
2004		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
2005		"-Wa,-mx86-used-note=yes" \
2006		{ plt-main5.c } \
2007		"plt-main-pie-ibt-now" \
2008		"plt-main.out" \
2009		"-fPIC" \
2010	    ] \
2011	    [list \
2012		"Run plt-main with libibtplt-lib.so -z ibtplt" \
2013		"-Wl,--no-as-needed,-z,ibtplt tmpdir/libibtplt-lib.so \
2014		 tmpdir/libplt-lib.so" \
2015		"-Wa,-mx86-used-note=yes" \
2016		{ plt-main5.c } \
2017		"plt-main-ibt-lib" \
2018		"plt-main.out" \
2019	    ] \
2020	    [list \
2021		"Run plt-main with libibtplt-lib.so -z ibtplt -z now" \
2022		"-Wl,--no-as-needed,-z,ibtplt,-z,now \
2023		 tmpdir/libibtplt-now-lib.so tmpdir/libplt-lib.so" \
2024		"-Wa,-mx86-used-note=yes" \
2025		{ plt-main5.c } \
2026		"plt-main-ibt-now-lib" \
2027		"plt-main.out" \
2028	    ] \
2029	]
2030
2031	if { [check_ifunc_attribute_available] } {
2032	    run_ld_link_exec_tests [list \
2033		[list \
2034		    "Run pr21481a" \
2035		    "$NOPIE_LDFLAGS -Wl,-z,ibtplt" \
2036		    "-Wa,-mx86-used-note=yes" \
2037		    { pr21481a.c pr21481b.S } \
2038		    "pr21481a" \
2039		    "pass.out" \
2040		     "$NOPIE_CFLAGS" \
2041		] \
2042		[list \
2043		    "Run pr21481b" \
2044		    "$NOPIE_LDFLAGS -Wl,-z,ibtplt,-z,now" \
2045		    "-Wa,-mx86-used-note=yes" \
2046		    { pr21481a.c pr21481b.S } \
2047		    "pr21481b" \
2048		    "pass.out" \
2049		    "$NOPIE_CFLAGS" \
2050		] \
2051	    ]
2052	}
2053    }
2054
2055    undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
2056    undefined_weak "-fPIE" ""
2057    undefined_weak "-fPIE" "-pie"
2058    undefined_weak "-fPIE" "-Wl,-z,nodynamic-undefined-weak"
2059    undefined_weak "-fPIE" "-pie -Wl,-z,nodynamic-undefined-weak"
2060}
2061
2062if { ![istarget "x86_64-*-linux*"]} {
2063    set ASFLAGS "$saved_ASFLAGS"
2064    return
2065}
2066
2067run_ld_link_tests [list \
2068    [list \
2069	"basic PLT generation (-z now)" \
2070	"-z now -melf_x86_64 --hash-style=sysv tmpdir/libpltlib.so \
2071	 -z noseparate-code -z max-page-size=0x200000" \
2072	"" \
2073	"--64" \
2074	{plt2.s} \
2075	{{readelf -SW plt2.rd} {objdump -dwr plt2.dd}} \
2076	"plt2" \
2077    ] \
2078    [list \
2079	"Build pr21626.so" \
2080	"-shared -melf_x86_64" \
2081	"" \
2082	"--64 -defsym __64_bit__=1 -mx86-used-note=yes" \
2083	{property-x86-3.s} \
2084	"" \
2085	"pr21626.so" \
2086    ] \
2087    [list \
2088	"Build pr21626" \
2089	"-melf_x86_64 tmpdir/pr21626.so" \
2090	"" \
2091	"--64 -mx86-used-note=yes" \
2092	{start.s foo.s} \
2093	"" \
2094	"pr21626" \
2095    ] \
2096]
2097
2098# Linux only tests
2099if { "$LD_CLASS" == "64bit" } then {
2100    # This test needs 64-bit linker.
2101    run_dump_test "pr17618"
2102}
2103run_dump_test "pltgot-1"
2104run_dump_test "pltgot-2"
2105run_dump_test "pr20830a"
2106run_dump_test "pr20830b"
2107run_dump_test "pr21038a"
2108run_dump_test "pr21038b"
2109run_dump_test "pr21038c"
2110run_dump_test "pr20830a-now"
2111run_dump_test "pr20830b-now"
2112run_dump_test "pr21038a-now"
2113run_dump_test "pr21038b-now"
2114run_dump_test "pr21038c-now"
2115run_dump_test "ibt-plt-1"
2116run_dump_test "ibt-plt-1-x32"
2117run_dump_test "ibt-plt-2a"
2118run_dump_test "ibt-plt-2b"
2119run_dump_test "ibt-plt-2c"
2120run_dump_test "ibt-plt-2d"
2121run_dump_test "ibt-plt-2a-x32"
2122run_dump_test "ibt-plt-2b-x32"
2123run_dump_test "ibt-plt-2c-x32"
2124run_dump_test "ibt-plt-2d-x32"
2125run_dump_test "ibt-plt-3a"
2126run_dump_test "ibt-plt-3b"
2127run_dump_test "ibt-plt-3c"
2128run_dump_test "ibt-plt-3d"
2129run_dump_test "ibt-plt-3a-x32"
2130run_dump_test "ibt-plt-3b-x32"
2131run_dump_test "ibt-plt-3c-x32"
2132run_dump_test "ibt-plt-3d-x32"
2133
2134set ASFLAGS "$saved_ASFLAGS"
2135