Update release readme after making 2.43.1 release
[binutils-gdb.git] / ld / testsuite / ld-i386 / i386.exp
blobadc88e42ad84fc685ab70b8830fb167d20c73d98
1 # Expect script for ld-i386 tests
2 #   Copyright (C) 2002-2024 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,
19 # MA 02110-1301, USA.
22 set saved_ASFLAGS "$ASFLAGS"
23 if { [is_elf_format] \
24      && ([istarget "i?86-*-*"] || [istarget "x86_64-*-*"]) } {
25     set ASFLAGS "$ASFLAGS -mx86-used-note=no"
28 # Test i386 linking; all types of relocs.  This tests the assembler and
29 # tools like objdump as well as the linker.
31 if {[istarget "i?86-*-vxworks"]} {
32     set i386tests {
33         {"VxWorks shared library test 1"
34          "-shared -Tvxworks1.ld --hash-style=sysv" ""
35          "" {vxworks1-lib.s}
36          {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
37           {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
38          "libvxworks1.so"}
39         {"VxWorks executable test 1 (dynamic)" \
40          "tmpdir/libvxworks1.so -Tvxworks1.ld --hash-style=sysv -q --force-dynamic" ""
41          "" {vxworks1.s}
42          {{readelf {--relocs --wide} vxworks1.rd} {objdump -dr vxworks1.dd}}
43          "vxworks1"}
44         {"VxWorks executable test 2 (dynamic)" \
45          "-Tvxworks1.ld --hash-style=sysv -q --force-dynamic" ""
46          "" {vxworks2.s}
47          {{readelf --segments vxworks2.sd}}
48          "vxworks2"}
49         {"VxWorks executable test 2 (static)"
50          "-Tvxworks1.ld --hash-style=sysv" ""
51          "" {vxworks2.s}
52          {{readelf --segments vxworks2-static.sd}}
53          "vxworks2"}
54     }
55     run_ld_link_tests $i386tests
56     run_dump_test "vxworks1-static"
59 if [istarget "*-*-go32*"] {
60     run_ld_link_tests {{"go32 stub" "" "" "" {zero.s} {} "go32stub"}}
62     set src "tmpdir/go32stub"
63     set dest "tmpdir/go32stub-copy"
65     set test "go32 stub patch the source"
66     set fi [open $src r+]
67     fconfigure $fi -translation binary
68     if {[read $fi 2] != "MZ"} {
69         fail $test
70     } else {
71         pass $test
72         seek $fi 0x40
73         puts -nonewline $fi "objcopy-test-go32stub"
74     }
75     close $fi
77     set test "go32 stub objcopy"
78     set status [remote_exec build $OBJCOPY "$OBJCOPYFLAGS $src $dest"]
79     set exec_output [lindex $status 1]
80     set exec_output [prune_warnings $exec_output]
81     if [string match "" $exec_output] then {
82         pass $test
83     } else {
84         send_log "$exec_output\n"
85         verbose "$exec_output" 1
86         fail $test
87     }
89     # cmp would compare the whole files and some data after the initial exe
90     # stub could differ.
91     set test "go32 stub comparison after objcopy"
92     set fi [open $src]
93     fconfigure $fi -translation binary
94     set src_stub [read $fi 2048]
95     close $fi
96     set fi [open $dest]
97     fconfigure $fi -translation binary
98     set dest_stub [read $fi 2048]
99     close $fi
100     if {$src_stub == $dest_stub} {
101         pass $test
102     } else {
103         fail $test
104     }
107 if { !([istarget "i?86-*-elf*"]
108        || [istarget "i?86-*-linux*"]
109        || [istarget "i?86-*-gnu*"]
110        || [istarget "x86_64-*-elf*"]
111        || [istarget "x86_64-*-linux*"]
112        || [istarget "amd64-*-linux*"]) } {
113     return
116 # List contains test-items with 3 items followed by 2 lists:
117 # 0:name 1:ld early options 2:ld late options 3:assembler options
118 # 4:filenames of assembler files 5: action and options. 6: name of output file
120 # Actions:
121 # objdump: Apply objdump options on result.  Compare with regex (last arg).
122 # nm: Apply nm options on result.  Compare with regex (last arg).
123 # readelf: Apply readelf options on result.  Compare with regex (last arg).
125 set i386tests {
126     {"Helper shared library (basic PLT test)"
127       "-shared -melf_i386" "" "--32" {pltlib.s} {} "libpltlib.so"}
128     {"basic PLT generation (non-PIC)"
129      "-melf_i386 tmpdir/libpltlib.so" "" "--32" {plt.s}
130      {{objdump -drj.plt plt.pd}} "plt"}
131     {"basic PLT generation (PIC)"
132      "-shared -melf_i386 tmpdir/libpltlib.so" "" "--32" {plt-pic.s}
133      {{objdump -drj.plt plt-pic.pd}} "libplt-pic.so"}
134     {"TLS -fpic -shared transitions"
135      "-shared -melf_i386 --no-ld-generated-unwind-info \
136       -z noseparate-code --hash-style=sysv" ""
137      "--32" {tlspic1.s tlspic2.s}
138      {{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd}
139       {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
140       "libtlspic.so"}
141     {"TLS -fpic -shared transitions without PLT"
142      "-shared -melf_i386 --no-ld-generated-unwind-info \
143       -z noseparate-code --hash-style=sysv" ""
144      "-mrelax-relocations=yes --32"
145      {tlspic3.s tlspic2.s}
146      {{readelf -Ssrl tlspic2.rd} {objdump -drj.text tlspic2.dd}
147       {objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
148       "libtlspic2.so"}
149     {"TLS descriptor -fpic -shared transitions"
150      "-shared -melf_i386 --no-ld-generated-unwind-info \
151       -z noseparate-code --hash-style=sysv" ""
152      "--32" {tlsdesc.s tlspic2.s}
153      {{readelf -Ssrl tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
154       {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}}
155       "libtlsdesc.so"}
156     {"Helper shared library" "-shared -melf_i386" ""
157      "--32" {tlslib.s} {} "libtlslib.so"}
158     {"TLS -fpic and -fno-pic exec transitions"
159      "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
160       -z noseparate-code --hash-style=sysv" ""
161      "--32" {tlsbinpic.s tlsbin.s}
162      {{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
163       {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
164       "tlsbin"}
165     {"TLS -fpic and -fno-pic exec transitions without PLT"
166      "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
167       -z noseparate-code --hash-style=sysv" ""
168      "-mrelax-relocations=yes --32"
169      {tlsbinpic2.s tlsbin.s}
170      {{readelf -Ssrl tlsbin2.rd} {objdump -drj.text tlsbin2.dd}
171       {objdump -sj.got tlsbin2.sd} {objdump -sj.tdata tlsbin2.td}}
172       "tlsbin2"}
173     {"TLS descriptor -fpic and -fno-pic exec transitions"
174      "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
175       -z noseparate-code --hash-style=sysv" ""
176      "--32" {tlsbindesc.s tlsbin.s}
177      {{readelf -Ssrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
178       {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
179       "tlsbindesc"}
180     {"TLS with global dynamic and descriptors"
181      "-shared -melf_i386 --no-ld-generated-unwind-info \
182       -z noseparate-code --hash-style=sysv" ""
183      "--32" {tlsgdesc.s}
184      {{readelf -Ssrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
185       "libtlsgdesc.so"}
186     {"TLS in debug sections" "-melf_i386" ""
187      "--32" {tlsg.s}
188      {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
189     {"TLS @indntpoff with %eax" "-melf_i386" "" "--32" {tlsindntpoff.s}
190      {{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"}
191     {"Reloc section order"
192      "-shared -melf_i386 -z nocombreloc -z notext" "" "--32"
193      {reloc.s} {{objdump -hw reloc.d}} "reloc.so"}
194     {"Basic --emit-relocs support" "-shared -melf_i386 --emit-relocs --no-rosegment" "" "--32"
195      {emit-relocs.s} {{readelf --relocs emit-relocs.rd}} "emit-relocs.so"}
196     {"-z combreloc relocation sections" "-shared -melf_i386 -z combreloc" ""
197      "--32" {combreloc.s} {{readelf -r combreloc.d}} "combreloc.so"}
198     {"TLS GD->LE transition" "-melf_i386" ""
199      "--32" {tlsgd1.s}
200      {{objdump -dwr tlsgd1.dd}} "tlsgd1"}
201     {"TLS GD->LE transition without PLT" "-melf_i386" ""
202      "-mrelax-relocations=yes --32"
203      {tlsgd3.s}
204      {{objdump -dwr tlsgd3.dd}} "tlsgd3"}
205     {"TLS LD->LE transition" "-melf_i386" ""
206      "--32" {tlsld1.s}
207      {{objdump -dwr tlsld1.dd}} "tlsld1"}
208     {"TLS LD->LE transition without PLT" "-melf_i386" ""
209      "-mrelax-relocations=yes --32"
210      {tlsld2.s}
211      {{objdump -dwr tlsld2.dd}} "tlsld2"}
212     {"TLS IE->LE transition" "-melf_i386" ""
213      "--32" {tlsie1.s}
214      {{objdump -dwr tlsie1.dd}} "tlsie1"}
215     {"PR ld/17313 (1)" "-melf_i386" ""
216      "--32 -mx86-used-note=yes" {zero.s} {} ""}
217     {"PR ld/17313 (2)" "-melf_i386 -shared --just-symbols=tmpdir/zero.o" ""
218      "--32 -mx86-used-note=yes" {lea1.s} {} "libpr17313.so"}
219     {"PR ld/17306 (1)" "-melf_i386" ""
220      "--32 -mx86-used-note=yes" {pr17306b.s} {} ""}
221     {"PR ld/17306 (2)" "-melf_i386 -shared -Bsymbolic --just-symbols=tmpdir/pr17306b.o" ""
222      "--32 -mx86-used-note=yes" {pr17306a.s} {} "libpr17306.so"}
223     {"PR ld/17709 (1)" "-melf_i386 -shared" ""
224      "--32 -mx86-used-note=yes" {pr17709a.s} {} "libpr17709.so"}
225     {"PR ld/17709 (2)" "-melf_i386 tmpdir/libpr17709.so" ""
226      "--32 -mx86-used-note=yes"
227      {pr17709b.s} {{ld "pr17709.err"}} "pr17709"}
228     {"Build pr19827a.o" "" ""
229      "--32 -mx86-used-note=yes" { pr19827a.S }}
230     {"Build pr19827b.so" "-melf_i386 -shared" ""
231      "--32 -mx86-used-note=yes"
232      { pr19827b.S } {} "pr19827b.so"}
233     {"Build pr19827"
234      "-melf_i386 -pie -z notext tmpdir/pr19827a.o tmpdir/pr19827b.so"
235      ""
236      "--32 -mx86-used-note=yes"
237      { dummy.s } {{readelf {-rW} pr19827.rd}} "pr19827"}
238     {"Build pr19827.so"
239      "-melf_i386 -shared -Bsymbolic -z notext" ""
240      "--32 -mx86-used-note=yes"
241      { pr19827a.S }  {{readelf {-rW} pr19827.rd}} "pr19827.so"}
242     {"Build pr27193a.so"
243      "-melf_i386 -shared -z noexecstack" ""
244      "--32"
245      { pr27193a.o.bz2 pr27193b.s }
246      {{objdump {-dw} pr27193.dd}} "pr27193a.so"}
247     {"Build pr27193b.so"
248      "-melf_i386 -shared --reduce-memory-overheads -z noexecstack" ""
249      "--32"
250      { pr27193a.o.bz2 pr27193b.s }
251      {{objdump {-dw} pr27193.dd}} "pr27193b.so"}
254 proc iamcu_tests {} {
255     global as
256     global srcdir
257     global subdir
259     if ![ld_assemble $as "--32 -march=iamcu $srcdir/$subdir/start.s" tmpdir/startiamcu.o] {
260         fail "Build Intel MCU start.o"
261         return
262     }
264     if ![ld_assemble $as "--32 $srcdir/$subdir/start.s" tmpdir/start32.o] {
265         fail "Build ia32 start.o"
266         return
267      }
269     if ![ld_assemble $as "--32 -march=iamcu $srcdir/$subdir/foo.s" tmpdir/fooiamcu.o] {
270         fail "Build Intel MCU foo.o"
271         return
272     }
274     if ![ld_assemble $as "--32 $srcdir/$subdir/foo.s" tmpdir/foo32.o] {
275         fail "Build ia32 foo.o"
276         return
277     }
279     run_dump_test "abs-iamcu"
280     run_dump_test "iamcu-1"
281     run_dump_test "iamcu-2"
282     run_dump_test "iamcu-3"
283     run_dump_test "iamcu-4"
286 iamcu_tests
288 run_ld_link_tests $i386tests
290 run_ld_link_tests [list \
291     [list \
292         "TLS -fno-pic -shared" \
293         "-shared -melf_i386 --no-ld-generated-unwind-info -z notext \
294          -z noseparate-code --hash-style=sysv $NO_DT_RELR_LDFLAGS" \
295         "" "--32" \
296         {tlsnopic1.s tlsnopic2.s} \
297         {{readelf -Ssrl tlsnopic.rd} \
298          {objdump -drj.text tlsnopic.dd} \
299          {objdump -sj.got tlsnopic.sd}} \
300         "libtlsnopic.so" \
301     ] \
304 run_dump_test "abs"
305 run_dump_test "pcrel8"
306 run_dump_test "pcrel16"
307 run_dump_test "pcrel16abs"
308 run_dump_test "pcrel16-2"
309 run_dump_test "alloc"
310 run_dump_test "warn1"
311 run_dump_test "tlsgd2"
312 run_dump_test "tlsgd4"
313 run_dump_test "tlsie2"
314 run_dump_test "tlsie3"
315 run_dump_test "tlsie4"
316 run_dump_test "tlsie5"
317 run_dump_test "hidden1"
318 run_dump_test "hidden2"
319 run_dump_test "hidden3"
320 run_dump_test "protected1"
321 run_dump_test "protected2"
322 run_dump_test "protected3"
323 run_dump_test "protected4"
324 run_dump_test "protected5"
325 run_dump_test "protected6a"
326 run_dump_test "protected6b"
327 run_dump_test "protected7"
328 run_dump_test "tlspie1"
329 run_dump_test "tlspie2"
330 run_dump_test "tlspie3a"
331 run_dump_test "tlspie3b"
332 run_dump_test "tlspie3c"
333 run_dump_test "nogot1"
334 run_dump_test "nogot2"
335 run_dump_test "discarded1"
336 run_dump_test "pr12718"
337 run_dump_test "pr12921"
338 run_dump_test "pr12570a"
339 run_dump_test "pr12570b"
340 run_dump_test "lea1a"
341 run_dump_test "lea1b"
342 run_dump_test "lea1c"
343 run_dump_test "lea1d"
344 run_dump_test "lea1e"
345 run_dump_test "lea1f"
346 run_dump_test "mov1a"
347 run_dump_test "mov1b"
348 run_dump_test "mov2a"
349 run_dump_test "mov2b"
350 run_dump_test "mov3"
351 run_dump_test "branch1"
352 run_dump_test "call1"
353 run_dump_test "call2"
354 run_dump_test "call3a"
355 run_dump_test "call3b"
356 run_dump_test "call3c"
357 run_dump_test "call3d"
358 run_dump_test "call3e"
359 run_dump_test "call3f"
360 run_dump_test "call3g"
361 run_dump_test "call3h"
362 run_dump_test "jmp1"
363 run_dump_test "jmp2"
364 run_dump_test "ljmp1"
365 run_dump_test "ljmp2"
366 run_dump_test "load1"
367 run_dump_test "load2"
368 run_dump_test "load3"
369 run_dump_test "load4a"
370 run_dump_test "load4b"
371 run_dump_test "load5a"
372 run_dump_test "load5b"
373 run_dump_test "load6"
374 run_dump_test "load7"
375 run_dump_test "pr19175"
376 run_dump_test "pr19615"
377 run_dump_test "pr19636-1a"
378 run_dump_test "pr19636-1b"
379 run_dump_test "pr19636-1c"
380 run_dump_test "pr19636-1d"
381 run_dump_test "pr19636-1e"
382 run_dump_test "pr19636-1f"
383 run_dump_test "pr19636-1g"
384 run_dump_test "pr19636-1h"
385 run_dump_test "pr19636-1i"
386 run_dump_test "pr19636-1j"
387 run_dump_test "pr19636-1k"
388 run_dump_test "pr19636-1l"
389 run_dump_test "pr19636-2a"
390 run_dump_test "pr19636-2b"
391 run_dump_test "pr19636-2c"
392 run_dump_test "pr19636-2d"
393 run_dump_test "pr19636-2e"
394 run_dump_test "pr19636-3a"
395 run_dump_test "pr19636-3b"
396 run_dump_test "pr19636-3c"
397 run_dump_test "pr19636-3d"
398 run_dump_test "pr19636-3e"
399 run_dump_test "pr19636-3f"
400 run_dump_test "pr19636-3g"
401 run_dump_test "pr19636-3h"
402 run_dump_test "pr19636-3i"
403 run_dump_test "pr19636-4a"
404 run_dump_test "pr19636-4b"
405 run_dump_test "pr19636-4c"
406 run_dump_test "pr19636-4d"
407 run_dump_test "pr19645"
408 run_dump_test "pr19609-1a"
409 run_dump_test "pr19609-1b"
410 run_dump_test "pr19609-1c"
411 run_dump_test "pr19609-1d"
412 run_dump_test "pr19609-1e"
413 run_dump_test "pr19609-1f"
414 run_dump_test "pr19609-1g"
415 run_dump_test "pr19609-1h"
416 run_dump_test "pr19609-1i"
417 run_dump_test "pr19609-2a"
418 run_dump_test "pr19609-2b"
419 run_dump_test "pr19609-2c"
420 run_dump_test "undefweaka"
421 run_dump_test "undefweakb"
422 run_dump_test "pr19539"
423 run_dump_test "pr20117"
424 run_dump_test "pr20244-1a"
425 run_dump_test "pr20244-1b"
426 run_dump_test "pr20244-1c"
427 run_dump_test "pr20244-2a"
428 run_dump_test "pr20244-2b"
429 run_dump_test "pr20244-2c"
430 run_dump_test "pr20244-2d"
431 run_dump_test "pr20244-4a"
432 run_dump_test "pr20244-4b"
433 run_dump_test "pr20244-4c"
434 run_dump_test "pr20253-3"
435 run_dump_test "pr20253-4a"
436 run_dump_test "pr20253-4b"
437 run_dump_test "pr20253-4c"
438 run_dump_test "pr20253-5"
439 run_dump_test "pr20515"
440 run_dump_test "property-x86-3"
441 run_dump_test "property-x86-4a"
442 run_dump_test "property-x86-4b"
443 run_dump_test "property-x86-5"
444 run_dump_test "property-x86-6"
445 run_dump_test "property-x86-ibt1a"
446 run_dump_test "property-x86-ibt1b"
447 run_dump_test "property-x86-ibt2"
448 run_dump_test "property-x86-ibt3a"
449 run_dump_test "property-x86-ibt3b"
450 run_dump_test "property-x86-ibt4"
451 run_dump_test "property-x86-ibt5"
452 run_dump_test "property-x86-shstk1a"
453 run_dump_test "property-x86-shstk1b"
454 run_dump_test "property-x86-shstk2"
455 run_dump_test "property-x86-shstk3a"
456 run_dump_test "property-x86-shstk3b"
457 run_dump_test "property-x86-shstk4"
458 run_dump_test "property-x86-shstk5"
459 run_dump_test "property-x86-cet1"
460 run_dump_test "property-x86-cet2a"
461 run_dump_test "property-x86-cet2b"
462 run_dump_test "property-x86-cet3a"
463 run_dump_test "property-x86-cet3b"
464 run_dump_test "property-x86-cet4a"
465 run_dump_test "property-x86-cet4b"
466 run_dump_test "property-x86-cet5a"
467 run_dump_test "property-x86-cet5b"
468 run_dump_test "property-x86-cet6"
469 run_dump_test "pie1"
470 run_dump_test "pr21884"
471 run_dump_test "pr22115-1a"
472 run_dump_test "pr22115-1b"
473 run_dump_test "pr22115-1c"
474 run_dump_test "pr22115-1d"
475 run_dump_test "pr22135"
476 run_dump_test "pr22782"
477 run_dump_test "pr22929"
478 run_dump_test "pr23189"
479 run_dump_test "pr23194"
480 run_dump_test "pr23372a"
481 run_dump_test "pr23372b"
482 run_dump_test "pr23372c"
483 run_dump_test "pr23372d"
484 run_dump_test "pr23486a"
485 run_dump_test "pr23486b"
486 run_dump_test "pr23486c"
487 run_dump_test "pr23486d"
488 run_dump_test "pr23854"
489 run_dump_test "pr23930"
490 run_dump_test "pr24322a"
491 run_dump_test "pr24322b"
492 run_dump_test "align-branch-1"
493 run_dump_test "pr26018"
494 run_dump_test "pr26263"
495 run_dump_test "pr26711-1"
496 run_dump_test "pr26711-2"
497 run_dump_test "pr26711-3"
498 run_dump_test "property-x86-isa1"
499 run_dump_test "property-x86-isa2"
500 run_dump_test "property-x86-isa3"
501 run_dump_test "property-x86-isa4"
502 run_dump_test "pr26869"
503 run_dump_test "code16"
504 run_dump_test "pr27491-1a"
505 run_dump_test "pr27491-1b"
506 run_dump_test "pr27491-1c"
507 run_dump_test "pr27491-2"
508 run_dump_test "pr27491-3"
509 run_dump_test "pr27491-4"
510 run_dump_test "dt-relr-1a"
511 run_dump_test "dt-relr-1b"
512 run_dump_test "pr28870"
513 run_dump_test "pr28894"
514 run_dump_test "pr30787"
515 run_dump_test "pr31047"
517 if { !([istarget "i?86-*-linux*"]
518        || [istarget "i?86-*-gnu*"]
519        || [istarget "x86_64-*-linux*"]) } {
520     set ASFLAGS "$saved_ASFLAGS"
521     return
524 run_dump_test "compressed1"
525 run_dump_test "pr12627"
526 run_dump_test "pr13302"
527 run_dump_test "pr14215"
528 run_dump_test "pr17057"
529 run_dump_test "pr17935-1"
530 run_dump_test "pr17935-2"
531 run_dump_test "pr18801a"
532 run_dump_test "pr18801b"
533 run_dump_test "ifunc-textrel-1a"
534 run_dump_test "ifunc-textrel-1b"
535 run_dump_test "ifunc-textrel-2a"
536 run_dump_test "ifunc-textrel-2b"
537 run_dump_test "pr18815"
538 run_dump_test "pr19939a"
539 run_dump_test "pr19939b"
540 run_dump_test "tlsdesc2"
541 run_dump_test "report-reloc-1"
542 run_dump_test "pr27998a"
543 run_dump_test "pr27998b"
544 run_dump_test "pr31868a"
545 run_dump_test "pr31868b"
546 run_dump_test "pr31868c"
547 run_dump_test "tlsgdesc1"
548 run_dump_test "tlsgdesc2"
550 proc undefined_weak {cflags ldflags} {
551     set testname "Undefined weak symbol"
552     if { ![ string match "" $cflags$ldflags] } {
553         set testname "$testname ($cflags $ldflags)"
554     }
556     if { [string match "*-fPIE*" $cflags]
557          && ![string match "*-z nodynamic-undefined-weak*" $ldflags] } {
558         set weak_symbol "Weak defined\n"
559     } else {
560         set weak_symbol "Weak undefined\n"
561     }
563     run_cc_link_tests [list \
564         [list \
565             "Build libpr19704a.so" \
566             "-shared -Wl,-soname,libpr19704.so" \
567             "-Wa,-mrelax-relocations=yes" \
568             { dummy.s } \
569             {} \
570             "libpr19704a.so" \
571         ] \
572         [list \
573             "Build libpr19704b.so" \
574             "-shared -Wl,-soname,libpr19704.so" \
575             "-fPIC -Wa,-mrelax-relocations=yes" \
576             { pr19704b.c } \
577             {} \
578             "libpr19704b.so" \
579         ] \
580     ]
582     exec cp tmpdir/libpr19704a.so tmpdir/libpr19704.so
584     run_ld_link_exec_tests [list \
585         [list \
586             "Run pr19704" \
587             "$ldflags -Wl,--no-as-needed tmpdir/libpr19704.so \
588              -Wl,-R,tmpdir" \
589             "-Wa,-mrelax-relocations=yes" \
590             { pr19704a.c } \
591             "pr19704" \
592             "pr19704.out" \
593             "$cflags" \
594         ] \
595     ]
597     exec cp tmpdir/libpr19704b.so tmpdir/libpr19704.so
599     set exec_output [run_host_cmd tmpdir/pr19704 ""]
600     if {![string match $weak_symbol $exec_output]} {
601         fail $testname
602     } else {
603         pass $testname
604     }
607 # Must be Linux native with the C compiler
608 if { [isnative]
609      && [istarget "i?86-*-linux*"]
610      && [check_compiler_available] } {
611     run_cc_link_tests [list \
612         [list \
613             "Build plt-lib.so" \
614             "-shared" \
615             "-fPIC -Wa,-mrelax-relocations=yes" \
616             { plt-lib.c } \
617             {} \
618             "libplt-lib.so" \
619         ] \
620         [list \
621             "Build libplt-main1.a" \
622             "" \
623             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes" \
624             { plt-main1.c } \
625             {{readelf {-Wr} plt-main1.rd}} \
626             "libplt-main1.a" \
627         ] \
628         [list \
629             "Build libplt-main2.a" \
630             "" \
631             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes" \
632             { plt-main2.c } \
633             {{readelf {-Wr} plt-main2.rd}} \
634             "libplt-main2.a" \
635         ] \
636         [list \
637             "Build libplt-main3.a" \
638             "" \
639             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes $PLT_CFLAGS" \
640             { plt-main3.c } \
641             {{readelf {-Wr} plt-main3.rd}} \
642             "libplt-main3.a" \
643         ] \
644         [list \
645             "Build libplt-main4.a" \
646             "" \
647             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes $PLT_CFLAGS" \
648             { plt-main4.c } \
649             {{readelf {-Wr} plt-main4.rd}} \
650             "libplt-main4.a" \
651         ] \
652         [list \
653             "Build plt-main" \
654             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
655              tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
656             "-Wa,-mrelax-relocations=yes" \
657             { plt-main5.c } \
658             {{readelf {-Wr} plt-main.rd}} \
659             "plt-main" \
660         ] \
661         [list \
662             "Build plt-main with PIE" \
663             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
664              tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
665             "-fPIC -Wa,-mrelax-relocations=yes" \
666             { plt-main5.c } \
667             {{readelf {-Wr} plt-main.rd}} \
668             "plt-main" \
669         ] \
670         [list \
671             "Build copyreloc-lib.so" \
672             "-shared" \
673             "-fPIC -Wa,-mrelax-relocations=yes" \
674             { copyreloc-lib.c } \
675             {} \
676             "copyreloc-lib.so" \
677         ] \
678         [list \
679             "Build libcopyreloc-main.a" \
680             "" \
681             "-Wa,-mrelax-relocations=yes" \
682             { copyreloc-main.S } \
683             {} \
684             "libcopyreloc-main.a" \
685         ] \
686         [list \
687             "Build copyreloc-main with PIE and GOTOFF (1)" \
688             "tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
689             "-Wa,-mrelax-relocations=yes" \
690             { dummy.s } \
691             {{readelf {-Wr} copyreloc-main1.rd}} \
692             "copyreloc-main" \
693         ] \
694         [list \
695             "Build copyreloc-main with PIE and GOTOFF (2)" \
696             "tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
697             "-Wa,-mrelax-relocations=yes" \
698             { dummy.s } \
699             {{readelf {-Wr} copyreloc-main2.rd}} \
700             "copyreloc-main" \
701         ] \
702         [list \
703             "Build pr17689.so" \
704             "-shared" \
705             "-fPIC -Wa,-mrelax-relocations=yes" \
706             { pr17689a.c } \
707             {} \
708             "pr17689.so" \
709         ] \
710         [list \
711             "Build pr17689.so with -z now" \
712             "-shared -Wl,-z,now" \
713             "-fPIC -Wa,-mrelax-relocations=yes" \
714             { pr17689a.c } \
715             {{readelf {-Wr} pr17689now.rd}} \
716             "pr17689now.so" \
717         ] \
718         [list \
719             "Build pr17689ver.so" \
720             "-shared -Wl,--version-script,pr17689a.t" \
721             "-fPIC -Wa,-mrelax-relocations=yes" \
722             { pr17689a.c } \
723             {} \
724             "pr17689ver.so" \
725         ] \
726         [list \
727             "Build pr17689.a" \
728             "" \
729             "-Wa,-mrelax-relocations=yes" \
730             { pr17689b.S } \
731             {} \
732             "pr17689.a" \
733         ] \
734         [list \
735             "Build pr17689 with PIE and GOTOFF" \
736             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
737             "-Wa,-mrelax-relocations=yes" \
738             { dummy.c } \
739             {{readelf {-Wr} pr17689.rd}} \
740             "pr17689" \
741         ] \
742         [list \
743             "Build pr17689 with PIE, -z now and GOTOFF" \
744             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie -Wl,-z,now" \
745             "-Wa,-mrelax-relocations=yes" \
746             { dummy.c } \
747             {{readelf {-Wr} pr17689now.rd}} \
748             "pr17689now" \
749         ] \
750         [list \
751             "Build pr17689ver with PIE and GOTOFF" \
752             "tmpdir/pr17689b.o tmpdir/pr17689ver.so -pie" \
753             "-Wa,-mrelax-relocations=yes" \
754             { dummy.c } \
755             {{readelf {-Wr} pr17689ver.rd}} \
756             "pr17689ver" \
757         ] \
758         [list \
759             "Build pr17827 with PIE and GOTOFF" \
760             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
761             "-Wa,-mrelax-relocations=yes" \
762             { dummy.c } \
763             {{readelf {-Wr} pr17827.rd}} \
764             "pr17827" \
765         ] \
766         [list \
767             "Build pr18900.so" \
768             "-shared" \
769             "-fPIC -Wa,-mrelax-relocations=yes" \
770             { pr18900a.c } \
771             "" \
772             "pr18900.so" \
773         ] \
774         [list \
775             "Build pr18900.o" \
776             "-r -nostdlib" \
777             "-Wa,-mrelax-relocations=yes" \
778             { pr18900b.c pr18900c.c } \
779             "" \
780             "pr18900.o" \
781         ] \
782         [list \
783             "Build pr18900a" \
784             "tmpdir/pr18900.o tmpdir/pr18900.so" \
785             "-Wa,-mrelax-relocations=yes" \
786             { dummy.s } \
787             {{readelf {-Wrd} pr18900a.rd}} \
788             "pr18900a" \
789         ] \
790         [list \
791             "Build pr18900b" \
792             "-Wl,--as-needed tmpdir/pr18900.o tmpdir/pr18900.so" \
793             "-Wa,-mrelax-relocations=yes" \
794             { dummy.s } \
795             {{readelf {-Wrd} pr18900b.rd}} \
796             "pr18900b" \
797         ] \
798         [list \
799             "Build pr19031.so" \
800             "-shared" \
801             "-fPIC -Wa,-mrelax-relocations=yes" \
802             { pr19031a.c } \
803             "" \
804             "pr19031.so" \
805         ] \
806         [list \
807             "Build got1d.so" \
808             "-shared" \
809             "-Wa,-mrelax-relocations=yes" \
810             { got1d.S } \
811             "" \
812             "got1d.so" \
813         ] \
814         [list \
815             "Build gotpc1.o" \
816             "-r -nostdlib" \
817             "-Wa,-mrelax-relocations=yes" \
818             { got1a.S got1b.c got1c.c } \
819             "" \
820             "gotpc1.o" \
821         ] \
822         [list \
823             "Build gotpc1" \
824             "$NOPIE_LDFLAGS -Wl,--as-needed,-z,noexecstack \
825              tmpdir/gotpc1.o tmpdir/got1d.so" \
826             "-Wa,-mx86-used-note=no" \
827             { dummy.s } \
828             {{objdump {-dw} got1.dd}} \
829             "got1" \
830         ] \
831         [list \
832             "Build pr19319.so" \
833             "-shared" \
834             "-Wa,-mx86-used-note=no" \
835             { pr19319a.S } \
836             "" \
837             "pr19319.so" \
838         ] \
839         [list \
840             "Build pr19319" \
841             "-pie -nostdlib -nostartfiles tmpdir/pr19319.so" \
842             "-Wa,-mrelax-relocations=yes" \
843             { pr19319b.S } \
844             {{objdump {-dw} pr19319.dd}} \
845             "pr19319" \
846         ] \
847         [list \
848             "Build pr24276.so" \
849             "-shared -nostdlib -nostartfiles \
850              -Ltmpdir $srcdir/$subdir/pr24276.dso" \
851             "-Wa,-mx86-used-note=yes" \
852             { pr19319b.S } \
853             {{warning_output pr24276.warn}} \
854             "pr24276.so" \
855         ] \
856         [list \
857             "Build property 1" \
858             "" \
859             "-Wa,-mx86-used-note=no" \
860             {pass.c property-no-copy.S} \
861             {{readelf {-n} property-1.r}} \
862             "property-1" \
863         ] \
864         [list \
865             "Build property 1 (.o)" \
866             "-r -nostdlib" \
867             "-Wa,-mx86-used-note=yes" \
868             {pass.c property-no-copy.S} \
869             {{readelf {-n} property-1a.r}} \
870             "property-1.o" \
871         ] \
872         [list \
873             "Build property 1 (.so)" \
874             "-shared" \
875             "-fPIC -Wa,-mx86-used-note=no" \
876             {pass.c property-no-copy.S} \
877             {{readelf {-n} property-1.r}} \
878             "property-1.so" \
879         ] \
880         [list \
881             "Build property 2" \
882             "" \
883             "-Wa,-mx86-used-note=no" \
884             {pass.c property-stack.S} \
885             {{readelf {-n} property-2.r}} \
886             "property-2" \
887         ] \
888         [list \
889             "Build property 2 (.o)" \
890             "-r -nostdlib" \
891             "-Wa,-mx86-used-note=yes" \
892             {pass.c property-stack.S} \
893             {{readelf {-n} property-2a.r}} \
894             "property-2.o" \
895         ] \
896         [list \
897             "Build property 2 (.so)" \
898             "-shared" \
899             "-fPIC -Wa,-mx86-used-note=no" \
900             {pass.c property-stack.S} \
901             {{readelf {-n} property-2.r}} \
902             "property-2.so" \
903         ] \
904         [list \
905             "Build property 3" \
906             "" \
907             "-Wa,-mx86-used-note=no" \
908             {pass.c property-stack.S property-x86-1.S} \
909             {{readelf {-n} property-3.r}} \
910             "property-3" \
911         ] \
912         [list \
913             "Build property 3 (.o)" \
914             "-r -nostdlib" \
915             "-Wa,-mx86-used-note=yes" \
916             {pass.c property-x86-1.S property-stack.S} \
917             {{readelf {-n} property-3a.r}} \
918             "property-3.o" \
919         ] \
920         [list \
921             "Build property 3 (.so)" \
922             "-shared" \
923             "-fPIC -Wa,-mx86-used-note=no" \
924             {property-x86-1.S pass.c property-stack.S} \
925             {{readelf {-n} property-3.r}} \
926             "property-3.so" \
927         ] \
928         [list \
929             "Build property 4" \
930             "" \
931             "-Wa,-mx86-used-note=no" \
932             {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
933             {{readelf {-n} property-4.r}} \
934             "property-4" \
935         ] \
936         [list \
937             "Build property 4 (.o)" \
938             "-r -nostdlib" \
939             "-Wa,-mx86-used-note=yes" \
940             {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
941             {{readelf {-n} property-4a.r}} \
942             "property-4.o" \
943         ] \
944         [list \
945             "Build property 4 (.so)" \
946             "-shared" \
947             "-fPIC -Wa,-mx86-used-note=no" \
948             {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
949             {{readelf {-n} property-4.r}} \
950             "property-4.so" \
951         ] \
952         [list \
953             "Build property 4 (-Wl,-z,stack-size=0)" \
954             "-Wl,-z,stack-size=0" \
955             "-Wa,-mx86-used-note=no" \
956             {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
957             {{readelf {-n} property-4.r}} \
958             "property-4" \
959         ] \
960         [list \
961             "Build property 5" \
962             "-Wl,-z,stack-size=0x900000" \
963             "-Wa,-mx86-used-note=no" \
964             {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
965             {{readelf {-n} property-5.r}} \
966             "property-5" \
967         ] \
968         [list \
969             "Build property 5 (.o)" \
970             "-r -nostdlib -Wl,-z,stack-size=0x900000" \
971             "-Wa,-mx86-used-note=yes" \
972             {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
973             {{readelf {-n} property-5a.r}} \
974             "property-5.o" \
975         ] \
976         [list \
977             "Build property 5 (.so)" \
978             "-shared -Wl,-z,stack-size=0x900000" \
979             "-fPIC -Wa,-mx86-used-note=no" \
980             {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
981             {{readelf {-n} property-5.r}} \
982             "property-5.so" \
983         ] \
984         [list \
985             "Build property-6.so" \
986             "-shared" \
987             "-fPIC -Wa,-mx86-used-note=no" \
988             {property-6a.c property-6c.S} \
989             {{readelf {-n} property-6.r}} \
990             "property-6.so" \
991         ] \
992         [list \
993             "Build property-6.o" \
994             "-r -nostdlib" \
995             "-Wa,-mx86-used-note=yes" \
996             {property-6b.c property-stack.S} \
997             {{readelf {-n} property-2a.r}} \
998             "property-6.o" \
999         ] \
1000         [list \
1001             "Build property-6" \
1002             "-Wl,--as-needed,-z,noexecstack \
1003              tmpdir/property-6.o tmpdir/property-6.so" \
1004             "-Wa,-mx86-used-note=no" \
1005             { dummy.s } \
1006             {{readelf {-n} property-2.r}} \
1007             "property-6" \
1008         ] \
1009         [list \
1010             "Build property 7a (.o)" \
1011             "-r -nostdlib" \
1012             "-Wa,-mx86-used-note=yes" \
1013             {property-unsorted-1.S} \
1014             {{readelf {-n} property-7a.r}} \
1015             "property-7a.o" \
1016         ] \
1017         [list \
1018             "Build property 7b (.o)" \
1019             "-r -nostdlib" \
1020             "-Wa,-mx86-used-note=yes" \
1021             {property-unsorted-2.S} \
1022             {{readelf {-n} property-7a.r}} \
1023             "property-7b.o" \
1024         ] \
1025     ]
1027     run_ld_link_exec_tests [list \
1028         [list \
1029             "Run plt-main" \
1030             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1031              tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1032             "-Wa,-mx86-used-note=yes" \
1033             { plt-main5.c } \
1034             "plt-main" \
1035             "plt-main.out" \
1036         ] \
1037         [list \
1038             "Run plt-main with PIE" \
1039             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1040              tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
1041             "-Wa,-mx86-used-note=yes" \
1042             { plt-main5.c } \
1043             "plt-main-pie" \
1044             "plt-main.out" \
1045             "-fPIC" \
1046         ] \
1047         [list \
1048             "Run copyreloc-main with PIE and GOTOFF" \
1049             "-Wl,--as-needed tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
1050             "-Wa,-mx86-used-note=yes" \
1051             { dummy.s } \
1052             "copyreloc-main" \
1053             "copyreloc-main.out" \
1054         ] \
1055         [list \
1056             "Run pr17689 with PIE and GOTOFF" \
1057             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
1058             "-Wa,-mx86-used-note=yes" \
1059             { dummy.c } \
1060             "pr17689" \
1061             "pr17689.out" \
1062         ] \
1063         [list \
1064             "Run pr17689 with PIE, -z now and GOTOFF" \
1065             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie -z now" \
1066             "-Wa,-mx86-used-note=yes" \
1067             { dummy.c } \
1068             "pr17689now" \
1069             "pr17689.out" \
1070         ] \
1071         [list \
1072             "Run pr17689ver with PIE and GOTOFF" \
1073             "tmpdir/pr17689b.o tmpdir/pr17689ver.so -pie" \
1074             "-Wa,-mx86-used-note=yes" \
1075             { dummy.c } \
1076             "pr17689ver" \
1077             "pr17689.out" \
1078         ] \
1079         [list \
1080             "Run pr18900" \
1081             "tmpdir/pr18900.o tmpdir/pr18900.so" \
1082             "-Wa,-mx86-used-note=yes" \
1083             { dummy.s } \
1084             "pr18900" \
1085             "pr18900.out" \
1086         ] \
1087         [list \
1088             "Run pr19031" \
1089             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr19031.so" \
1090             "-Wa,-mx86-used-note=yes" \
1091             { pr19031b.S pr19031c.c } \
1092             "pr19031" \
1093             "pr19031.out" \
1094             "$NOPIE_CFLAGS" \
1095         ] \
1096         [list \
1097             "Run got1" \
1098             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/got1d.so" \
1099             "-Wa,-mx86-used-note=yes" \
1100             { got1a.S got1b.c got1c.c } \
1101             "got1" \
1102             "got1.out" \
1103         ] \
1104         [list \
1105             "Run property 1" \
1106             "" \
1107             "-Wa,-mx86-used-note=yes" \
1108             {pass.c property-no-copy.S} \
1109             "property-1" "pass.out" \
1110         ] \
1111         [list \
1112             "Run property 1 (PIE)" \
1113             "-pie" \
1114             "-Wa,-mx86-used-note=yes" \
1115             {pass.c property-no-copy.S} \
1116             "property-1-pie" "pass.out" "-fPIE" \
1117         ] \
1118         [list \
1119             "Run property 1 (static)" \
1120             "-static" \
1121             "-Wa,-mx86-used-note=yes" \
1122             {pass.c property-no-copy.S} \
1123             "property-1-static" "pass.out" \
1124         ] \
1125         [list \
1126             "Run property 2" \
1127             "" \
1128             "-Wa,-mx86-used-note=yes" \
1129             {pass.c property-stack.S} \
1130             "property-2" "pass.out" \
1131         ] \
1132         [list \
1133             "Run property 2 (PIE)" \
1134             "-pie" \
1135             "-Wa,-mx86-used-note=yes" \
1136             {pass.c property-stack.S} \
1137             "property-2-pie" "pass.out" "-fPIE" \
1138         ] \
1139         [list \
1140             "Run property 2 (static)" \
1141             "-static" \
1142             "-Wa,-mx86-used-note=yes" \
1143             {pass.c property-stack.S} \
1144             "property-3-static" "pass.out" \
1145         ] \
1146     ]
1148     undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
1149     undefined_weak "-fPIE" "$NOPIE_LDFLAGS"
1150     undefined_weak "-fPIE" "-pie"
1151     undefined_weak "-fPIE" "-z nodynamic-undefined-weak $NOPIE_LDFLAGS"
1152     undefined_weak "-fPIE" "-pie -z nodynamic-undefined-weak"
1155 # Must be native with the C compiler and working IFUNC support,
1156 if { [isnative]
1157      && [check_ifunc_available]
1158      && [istarget "i?86-*-*"]
1159      && [check_compiler_available] } {
1160     run_cc_link_tests [list \
1161         [list \
1162             "Build ifunc-1a.o ifunc-1b.o ifunc-1c.o ifunc-1d.o" \
1163             "" \
1164             "-fPIC -O2 -g -Wa,-mx86-used-note=yes" \
1165             { ifunc-1a.c ifunc-1b.S ifunc-1c.S ifunc-1d.S } \
1166         ] \
1167         [list \
1168             "Build pr21168a.o" \
1169             "" \
1170             "-Wa,-mx86-used-note=yes" \
1171             { pr21168a.c } \
1172         ] \
1173         [list \
1174             "Build pr21168.so" \
1175             "-shared" \
1176             "-Wa,-mx86-used-note=yes" \
1177             { pr21168b.S } \
1178             "" \
1179             "pr21168.so" \
1180         ] \
1181     ]
1183     run_ld_link_exec_tests [list \
1184         [list \
1185             "Run ifunc-1a" \
1186             "tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
1187              tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1188             "-Wa,-mx86-used-note=yes" \
1189             { dummy.c } \
1190             "ifunc-1a" \
1191             "pass.out" \
1192         ] \
1193         [list \
1194             "Run ifunc-1b" \
1195             "--static tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
1196             tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1197             "-Wa,-mx86-used-note=yes" \
1198             { dummy.c } \
1199             "ifunc-1b" \
1200             "pass.out" \
1201         ] \
1202         [list \
1203             "Run pr21168" \
1204             "tmpdir/pr21168a.o tmpdir/pr21168.so" \
1205             "-Wa,-mx86-used-note=yes" \
1206             { dummy.c } \
1207             "pr21168" \
1208             "pass.out" \
1209         ] \
1210     ]
1212     if { [istarget "i?86-*-linux*"] } {
1213         run_cc_link_tests [list \
1214             [list \
1215                 "Build pr21168.so with -z ibtplt" \
1216                 "-shared -Wl,-z,ibtplt" \
1217                 "-Wa,-mx86-used-note=yes" \
1218                 { pr21168b.S } \
1219                 "" \
1220                 "pr21168-ibt.so" \
1221             ] \
1222             [list \
1223                 "Build ifunc-1a with -z ibtplt" \
1224                 "-Wl,-z,ibtplt $NOPIE_LDFLAGS tmpdir/ifunc-1a.o \
1225                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1226                 "-Wa,-mx86-used-note=yes" \
1227                 { dummy.c } \
1228                 {{objdump {-dw} plt-main-ibt.dd}} \
1229                 "ifunc-1a-ibt" \
1230             ] \
1231             [list \
1232                 "Build ifunc-1a with PIE -z ibtplt" \
1233                 "-Wl,-z,ibtplt -pie tmpdir/ifunc-1a.o \
1234                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1235                 "-Wa,-mx86-used-note=yes" \
1236                 { dummy.c } \
1237                 {{objdump {-dw} plt-pie-ibt.dd}} \
1238                 "ifunc-1a-pie-ibt" \
1239             ] \
1240         ]
1242         run_ld_link_exec_tests [list \
1243             [list \
1244                 "Run ifunc-1a with -z ibtplt" \
1245                 "-Wl,-z,ibtplt $NOPIE_LDFLAGS tmpdir/ifunc-1a.o \
1246                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1247                 "-Wa,-mx86-used-note=yes" \
1248                 { dummy.c } \
1249                 "ifunc-1a-ibt" \
1250                 "pass.out" \
1251             ] \
1252             [list \
1253                 "Run ifunc-1a with PIE -z ibtplt" \
1254                 "-Wl,-z,ibtplt -pie tmpdir/ifunc-1a.o \
1255                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1256                 "-Wa,-mx86-used-note=yes" \
1257                 { dummy.c } \
1258                 "ifunc-1a-pie-ibt" \
1259                 "pass.out" \
1260             ] \
1261             [list \
1262                 "Run pr21168 with -z ibtplt" \
1263                 "tmpdir/pr21168a.o tmpdir/pr21168-ibt.so" \
1264                 "-Wa,-mx86-used-note=yes" \
1265                 { dummy.c } \
1266                 "pr21168-ibt" \
1267                 "pass.out" \
1268             ] \
1269         ]
1270     }
1273 # Must be native with the C compiler.
1274 if { [isnative]
1275      && [istarget "i?86-*-*"]
1276      && [check_compiler_available] } {
1277     run_cc_link_tests [list \
1278         [list \
1279             "Build pr22001-1.so" \
1280             "-shared -Wl,-z,notext" \
1281             "-Wa,-mx86-used-note=yes" \
1282             { pr22001-1a.c } \
1283             {} \
1284             "pr22001-1.so" \
1285         ] \
1286         [list \
1287             "Build pr21997-1.so" \
1288             "-shared" \
1289             "-Wa,-mx86-used-note=yes" \
1290             { property-stack.S property-no-copy.S pr21997-1a.S } \
1291             {} \
1292             "pr21997-1.so" \
1293         ] \
1294         [list \
1295             "Build pr22842.so" \
1296             "-shared" \
1297             "-fPIC -Wa,-mx86-used-note=yes" \
1298             { pr22842a.c } \
1299             {} \
1300             "pr22842.so" \
1301         ] \
1302         [list \
1303             "Build pr28875.so" \
1304             "-shared -Wl,-z,indirect-extern-access" \
1305             "-fPIC" \
1306             { pr28875a.c } \
1307             {} \
1308             "pr28875.so" \
1309         ] \
1310         [list \
1311             "Build pr28875" \
1312             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr28875.so" \
1313             "$NOPIE_CFLAGS" \
1314             { pr28875b.c } \
1315             {{error_output "pr28875.err"}} \
1316             "pr28875" \
1317         ] \
1318         [list \
1319             "Build pr21997-1" \
1320             "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
1321             "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1322             { pr21997-1b.c } \
1323             {{error_output "pr21997-1.err"}} \
1324             "pr21997-1" \
1325         ] \
1326         [list \
1327             "Build pr32067" \
1328             "-Wl,--oformat,binary -nostdlib -nostartfiles" \
1329             "" \
1330             { start.s ../ld-x86-64/pr32067.s } \
1331             {} \
1332             "pr32067" \
1333         ] \
1334     ]
1336     # The musl C library does not support TEXTRELs.
1337     if { ![istarget i?86-*-musl] } {
1338         run_ld_link_exec_tests [list \
1339             [list \
1340                 "Run pr22001-1" \
1341                 "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed,-z,notext tmpdir/pr22001-1.so" \
1342                 "-Wa,-mx86-used-note=yes" \
1343                 { pr22001-1b.c } \
1344                 "pr22001-1" \
1345                 "pass.out" \
1346                 "$NOPIE_CFLAGS" \
1347             ] \
1348         ]
1349     }
1351     run_ld_link_exec_tests [list \
1352         [list \
1353             "Run weakundef1 without PIE" \
1354             "$NOPIE_LDFLAGS" \
1355             "-Wa,-mx86-used-note=yes" \
1356             { weakundef1.c } \
1357             "weakundef1pie" \
1358             "pass.out" \
1359             "$NOPIE_CFLAGS" \
1360         ] \
1361         [list \
1362             "Run pr22001-1 (PIE 1)" \
1363             "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1364             "-Wa,-mx86-used-note=yes" \
1365             { pr22001-1c.S } \
1366             "pr22001-1-pie-1" \
1367             "pass.out" \
1368         ] \
1369         [list \
1370             "Run pr22001-1 (PIE 2)" \
1371             "-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1372             "-Wa,-mx86-used-note=yes" \
1373             { pr22001-1c.S } \
1374             "pr22001-1-pie-2" \
1375             "pass.out" \
1376         ] \
1377         [list \
1378             "Run pr22001-1 (PIC 1)" \
1379             "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1380             "-Wa,-mx86-used-note=yes" \
1381             { pr22001-1b.c } \
1382             "pr22001-1-pic-1" \
1383             "pass.out" \
1384             "-fPIC" \
1385         ] \
1386         [list \
1387             "Run pr22001-1 (PIC 2)" \
1388             "-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1389             "-Wa,-mx86-used-note=yes" \
1390             { pr22001-1b.c } \
1391             "pr22001-1-pic-2" \
1392             "pass.out" \
1393             "-fPIC" \
1394         ] \
1395         [list \
1396             "Run pr21997-1 (PIC 1)" \
1397             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1398             "-Wa,-mx86-used-note=yes" \
1399             { pr21997-1b.c } \
1400             "pr21997-1-pic-1" \
1401             "pass.out" \
1402             "-fPIC" \
1403         ] \
1404         [list \
1405             "Run pr21997-1 (PIC 2)" \
1406             "-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1407             "-Wa,-mx86-used-note=yes" \
1408             { pr21997-1b.c } \
1409             "pr21997-1-pic-2" \
1410             "pass.out" \
1411             "-fPIC" \
1412         ] \
1413         [list \
1414             "Run pr21997-1 (PIE 1)" \
1415             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1416             "-Wa,-mx86-used-note=yes" \
1417             { pr21997-1c.S } \
1418             "pr21997-1-pie-1" \
1419             "pass.out" \
1420         ] \
1421         [list \
1422             "Run pr21997-1 (PIE 2)" \
1423             "-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1424             "-Wa,-mx86-used-note=yes" \
1425             { pr21997-1c.S } \
1426             "pr21997-1-pie-2" \
1427             "pass.out" \
1428         ] \
1429         [list \
1430             "Build pr22842" \
1431             "-pie -Wl,--no-as-needed tmpdir/pr22842.so" \
1432             "-Wa,-mx86-used-note=yes" \
1433             { pr22842b.S } \
1434             "pr22842" \
1435             "pass.out" \
1436         ] \
1437         [list \
1438             "Run pr23997" \
1439             "" \
1440             "" \
1441             { ../ld-x86-64/pr23997a.s ../ld-x86-64/pr23997b.c \
1442               ../ld-x86-64/pr23997c.c } \
1443             "pr23997" \
1444             "pass.out" \
1445         ] \
1446     ]
1448     if { [at_least_gcc_version 5 0] } {
1449         run_ld_link_exec_tests [list \
1450             [list \
1451                 "Run weakundef1 with PIE" \
1452                 "-pie" \
1453                 "-Wa,-mx86-used-note=yes" \
1454                 { weakundef1.c } \
1455                 "weakundef1pie" \
1456                 "pass.out" \
1457                 "-fPIE" \
1458             ] \
1459         ]
1460     }
1463 if { !([istarget "i?86-*-linux*"]
1464        || [istarget "x86_64-*-linux*"]) } {
1465     set ASFLAGS "$saved_ASFLAGS"
1466     return
1469 run_ld_link_tests [list \
1470     [list \
1471         "basic PLT generation (non-PIC, -z now)" \
1472         "-z now -melf_i386 --hash-style=sysv \
1473          -z noseparate-code tmpdir/libpltlib.so" \
1474         "" \
1475         "--32" \
1476         {plt2.s} \
1477         {{readelf -SW plt2.rd} {objdump -dwr plt2.dd}} \
1478         "plt2" \
1479     ] \
1480     [list \
1481         "basic PLT generation (PIC, -z now)" \
1482         "-z now -shared -melf_i386 tmpdir/libpltlib.so" \
1483         "" \
1484         "--32 -mx86-used-note=yes" \
1485         {plt-pic.s} \
1486         {{objdump -dwr plt-pic2.dd}} \
1487         "plt-pic2.so" \
1488     ] \
1489     [list \
1490         "Build pr21626.so" \
1491         "-shared -melf_i386" \
1492         "" \
1493         "--32 -mx86-used-note=yes" \
1494         {property-x86-3.s} \
1495         "" \
1496         "pr21626.so" \
1497     ] \
1498     [list \
1499         "Build pr21626" \
1500         "-melf_i386 tmpdir/pr21626.so" \
1501         "" \
1502         "--32 -mx86-used-note=yes" \
1503         {start.s foo.s} \
1504         "" \
1505         "pr21626" \
1506     ] \
1509 # Linux only tests
1510 run_dump_test "pltgot-1"
1511 run_dump_test "pltgot-2"
1512 run_dump_test "pr20830"
1513 run_dump_test "ibt-plt-1"
1514 run_dump_test "ibt-plt-2a"
1515 run_dump_test "ibt-plt-2b"
1516 run_dump_test "ibt-plt-2c"
1517 run_dump_test "ibt-plt-2d"
1518 run_dump_test "ibt-plt-3a"
1519 run_dump_test "ibt-plt-3b"
1520 run_dump_test "ibt-plt-3c"
1521 run_dump_test "ibt-plt-3d"
1523 set ASFLAGS "$saved_ASFLAGS"