Updated Malay translation for the bfd sub-directory
[binutils-gdb.git] / ld / testsuite / ld-i386 / i386.exp
blob16b9fb87e213c5735d9bfd45dff6ca52d48a0c95
1 # Expect script for ld-i386 tests
2 #   Copyright (C) 2002-2025 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 "tlsle1"
318 run_dump_test "hidden1"
319 run_dump_test "hidden2"
320 run_dump_test "hidden3"
321 run_dump_test "protected1"
322 run_dump_test "protected2"
323 run_dump_test "protected3"
324 run_dump_test "protected4"
325 run_dump_test "protected5"
326 run_dump_test "protected6a"
327 run_dump_test "protected6b"
328 run_dump_test "protected7"
329 run_dump_test "tlspie1"
330 run_dump_test "tlspie2"
331 run_dump_test "tlspie3a"
332 run_dump_test "tlspie3b"
333 run_dump_test "tlspie3c"
334 run_dump_test "nogot1"
335 run_dump_test "nogot2"
336 run_dump_test "discarded1"
337 run_dump_test "pr12718"
338 run_dump_test "pr12921"
339 run_dump_test "pr12570a"
340 run_dump_test "pr12570b"
341 run_dump_test "lea1a"
342 run_dump_test "lea1b"
343 run_dump_test "lea1c"
344 run_dump_test "lea1d"
345 run_dump_test "lea1e"
346 run_dump_test "lea1f"
347 run_dump_test "mov1a"
348 run_dump_test "mov1b"
349 run_dump_test "mov2a"
350 run_dump_test "mov2b"
351 run_dump_test "mov3"
352 run_dump_test "branch1"
353 run_dump_test "call1"
354 run_dump_test "call2"
355 run_dump_test "call3a"
356 run_dump_test "call3b"
357 run_dump_test "call3c"
358 run_dump_test "call3d"
359 run_dump_test "call3e"
360 run_dump_test "call3f"
361 run_dump_test "call3g"
362 run_dump_test "call3h"
363 run_dump_test "jmp1"
364 run_dump_test "jmp2"
365 run_dump_test "ljmp1"
366 run_dump_test "ljmp2"
367 run_dump_test "load1"
368 run_dump_test "load2"
369 run_dump_test "load3"
370 run_dump_test "load4a"
371 run_dump_test "load4b"
372 run_dump_test "load5a"
373 run_dump_test "load5b"
374 run_dump_test "load6"
375 run_dump_test "load7"
376 run_dump_test "pr19175"
377 run_dump_test "pr19615"
378 run_dump_test "pr19636-1a"
379 run_dump_test "pr19636-1b"
380 run_dump_test "pr19636-1c"
381 run_dump_test "pr19636-1d"
382 run_dump_test "pr19636-1e"
383 run_dump_test "pr19636-1f"
384 run_dump_test "pr19636-1g"
385 run_dump_test "pr19636-1h"
386 run_dump_test "pr19636-1i"
387 run_dump_test "pr19636-1j"
388 run_dump_test "pr19636-1k"
389 run_dump_test "pr19636-1l"
390 run_dump_test "pr19636-2a"
391 run_dump_test "pr19636-2b"
392 run_dump_test "pr19636-2c"
393 run_dump_test "pr19636-2d"
394 run_dump_test "pr19636-2e"
395 run_dump_test "pr19636-3a"
396 run_dump_test "pr19636-3b"
397 run_dump_test "pr19636-3c"
398 run_dump_test "pr19636-3d"
399 run_dump_test "pr19636-3e"
400 run_dump_test "pr19636-3f"
401 run_dump_test "pr19636-3g"
402 run_dump_test "pr19636-3h"
403 run_dump_test "pr19636-3i"
404 run_dump_test "pr19636-4a"
405 run_dump_test "pr19636-4b"
406 run_dump_test "pr19636-4c"
407 run_dump_test "pr19636-4d"
408 run_dump_test "pr19645"
409 run_dump_test "pr19609-1a"
410 run_dump_test "pr19609-1b"
411 run_dump_test "pr19609-1c"
412 run_dump_test "pr19609-1d"
413 run_dump_test "pr19609-1e"
414 run_dump_test "pr19609-1f"
415 run_dump_test "pr19609-1g"
416 run_dump_test "pr19609-1h"
417 run_dump_test "pr19609-1i"
418 run_dump_test "pr19609-2a"
419 run_dump_test "pr19609-2b"
420 run_dump_test "pr19609-2c"
421 run_dump_test "undefweaka"
422 run_dump_test "undefweakb"
423 run_dump_test "pr19539"
424 run_dump_test "pr20117"
425 run_dump_test "pr20244-1a"
426 run_dump_test "pr20244-1b"
427 run_dump_test "pr20244-1c"
428 run_dump_test "pr20244-2a"
429 run_dump_test "pr20244-2b"
430 run_dump_test "pr20244-2c"
431 run_dump_test "pr20244-2d"
432 run_dump_test "pr20244-4a"
433 run_dump_test "pr20244-4b"
434 run_dump_test "pr20244-4c"
435 run_dump_test "pr20253-3"
436 run_dump_test "pr20253-4a"
437 run_dump_test "pr20253-4b"
438 run_dump_test "pr20253-4c"
439 run_dump_test "pr20253-5"
440 run_dump_test "pr20515"
441 run_dump_test "property-x86-3"
442 run_dump_test "property-x86-4a"
443 run_dump_test "property-x86-4b"
444 run_dump_test "property-x86-5"
445 run_dump_test "property-x86-6"
446 run_dump_test "property-x86-ibt1a"
447 run_dump_test "property-x86-ibt1b"
448 run_dump_test "property-x86-ibt2"
449 run_dump_test "property-x86-ibt3a"
450 run_dump_test "property-x86-ibt3b"
451 run_dump_test "property-x86-ibt4"
452 run_dump_test "property-x86-ibt5"
453 run_dump_test "property-x86-shstk1a"
454 run_dump_test "property-x86-shstk1b"
455 run_dump_test "property-x86-shstk2"
456 run_dump_test "property-x86-shstk3a"
457 run_dump_test "property-x86-shstk3b"
458 run_dump_test "property-x86-shstk4"
459 run_dump_test "property-x86-shstk5"
460 run_dump_test "property-x86-cet1"
461 run_dump_test "property-x86-cet2a"
462 run_dump_test "property-x86-cet2b"
463 run_dump_test "property-x86-cet3a"
464 run_dump_test "property-x86-cet3b"
465 run_dump_test "property-x86-cet4a"
466 run_dump_test "property-x86-cet4b"
467 run_dump_test "property-x86-cet5a"
468 run_dump_test "property-x86-cet5b"
469 run_dump_test "property-x86-cet6"
470 run_dump_test "pie1"
471 run_dump_test "pr21884"
472 run_dump_test "pr22115-1a"
473 run_dump_test "pr22115-1b"
474 run_dump_test "pr22115-1c"
475 run_dump_test "pr22115-1d"
476 run_dump_test "pr22135"
477 run_dump_test "pr22782"
478 run_dump_test "pr22929"
479 run_dump_test "pr23189"
480 run_dump_test "pr23194"
481 run_dump_test "pr23372a"
482 run_dump_test "pr23372b"
483 run_dump_test "pr23372c"
484 run_dump_test "pr23372d"
485 run_dump_test "pr23486a"
486 run_dump_test "pr23486b"
487 run_dump_test "pr23486c"
488 run_dump_test "pr23486d"
489 run_dump_test "pr23854"
490 run_dump_test "pr23930"
491 run_dump_test "pr24322a"
492 run_dump_test "pr24322b"
493 run_dump_test "align-branch-1"
494 run_dump_test "pr26018"
495 run_dump_test "pr26263"
496 run_dump_test "pr26711-1"
497 run_dump_test "pr26711-2"
498 run_dump_test "pr26711-3"
499 run_dump_test "property-x86-isa1"
500 run_dump_test "property-x86-isa2"
501 run_dump_test "property-x86-isa3"
502 run_dump_test "property-x86-isa4"
503 run_dump_test "pr26869"
504 run_dump_test "code16"
505 run_dump_test "pr27491-1a"
506 run_dump_test "pr27491-1b"
507 run_dump_test "pr27491-1c"
508 run_dump_test "pr27491-2"
509 run_dump_test "pr27491-3"
510 run_dump_test "pr27491-4"
511 run_dump_test "dt-relr-1a"
512 run_dump_test "dt-relr-1b"
513 run_dump_test "pr28870"
514 run_dump_test "pr28894"
515 run_dump_test "pr30787"
516 run_dump_test "pr31047"
517 run_dump_test "pr32191"
519 if { !([istarget "i?86-*-linux*"]
520        || [istarget "i?86-*-gnu*"]
521        || [istarget "x86_64-*-linux*"]) } {
522     set ASFLAGS "$saved_ASFLAGS"
523     return
526 run_dump_test "compressed1"
527 run_dump_test "pr12627"
528 run_dump_test "pr13302"
529 run_dump_test "pr14215"
530 run_dump_test "pr17057"
531 run_dump_test "pr17935-1"
532 run_dump_test "pr17935-2"
533 run_dump_test "pr18801a"
534 run_dump_test "pr18801b"
535 run_dump_test "ifunc-textrel-1a"
536 run_dump_test "ifunc-textrel-1b"
537 run_dump_test "ifunc-textrel-2a"
538 run_dump_test "ifunc-textrel-2b"
539 run_dump_test "pr18815"
540 run_dump_test "pr19939a"
541 run_dump_test "pr19939b"
542 run_dump_test "tlsdesc2"
543 run_dump_test "report-reloc-1"
544 run_dump_test "pr27998a"
545 run_dump_test "pr27998b"
546 run_dump_test "pr31868a"
547 run_dump_test "pr31868b"
548 run_dump_test "pr31868c"
549 run_dump_test "tlsgdesc1"
550 run_dump_test "tlsgdesc2"
551 run_dump_test "tlsgdesc3"
553 proc undefined_weak {cflags ldflags} {
554     set testname "Undefined weak symbol"
555     if { ![ string match "" $cflags$ldflags] } {
556         set testname "$testname ($cflags $ldflags)"
557     }
559     if { [string match "*-fPIE*" $cflags]
560          && ![string match "*-z nodynamic-undefined-weak*" $ldflags] } {
561         set weak_symbol "Weak defined\n"
562     } else {
563         set weak_symbol "Weak undefined\n"
564     }
566     run_cc_link_tests [list \
567         [list \
568             "Build libpr19704a.so" \
569             "-shared -Wl,-soname,libpr19704.so" \
570             "-Wa,-mrelax-relocations=yes" \
571             { dummy.s } \
572             {} \
573             "libpr19704a.so" \
574         ] \
575         [list \
576             "Build libpr19704b.so" \
577             "-shared -Wl,-soname,libpr19704.so" \
578             "-fPIC -Wa,-mrelax-relocations=yes" \
579             { pr19704b.c } \
580             {} \
581             "libpr19704b.so" \
582         ] \
583     ]
585     exec cp tmpdir/libpr19704a.so tmpdir/libpr19704.so
587     run_ld_link_exec_tests [list \
588         [list \
589             "Run pr19704" \
590             "$ldflags -Wl,--no-as-needed tmpdir/libpr19704.so \
591              -Wl,-R,tmpdir" \
592             "-Wa,-mrelax-relocations=yes" \
593             { pr19704a.c } \
594             "pr19704" \
595             "pr19704.out" \
596             "$cflags" \
597         ] \
598     ]
600     exec cp tmpdir/libpr19704b.so tmpdir/libpr19704.so
602     set exec_output [run_host_cmd tmpdir/pr19704 ""]
603     if {![string match $weak_symbol $exec_output]} {
604         fail $testname
605     } else {
606         pass $testname
607     }
610 # Must be Linux native with the C compiler
611 if { [isnative]
612      && [istarget "i?86-*-linux*"]
613      && [check_compiler_available] } {
614     run_cc_link_tests [list \
615         [list \
616             "Build plt-lib.so" \
617             "-shared" \
618             "-fPIC -Wa,-mrelax-relocations=yes" \
619             { plt-lib.c } \
620             {} \
621             "libplt-lib.so" \
622         ] \
623         [list \
624             "Build libplt-main1.a" \
625             "" \
626             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes" \
627             { plt-main1.c } \
628             {{readelf {-Wr} plt-main1.rd}} \
629             "libplt-main1.a" \
630         ] \
631         [list \
632             "Build libplt-main2.a" \
633             "" \
634             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes" \
635             { plt-main2.c } \
636             {{readelf {-Wr} plt-main2.rd}} \
637             "libplt-main2.a" \
638         ] \
639         [list \
640             "Build libplt-main3.a" \
641             "" \
642             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes $PLT_CFLAGS" \
643             { plt-main3.c } \
644             {{readelf {-Wr} plt-main3.rd}} \
645             "libplt-main3.a" \
646         ] \
647         [list \
648             "Build libplt-main4.a" \
649             "" \
650             "-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes $PLT_CFLAGS" \
651             { plt-main4.c } \
652             {{readelf {-Wr} plt-main4.rd}} \
653             "libplt-main4.a" \
654         ] \
655         [list \
656             "Build plt-main" \
657             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
658              tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
659             "-Wa,-mrelax-relocations=yes" \
660             { plt-main5.c } \
661             {{readelf {-Wr} plt-main.rd}} \
662             "plt-main" \
663         ] \
664         [list \
665             "Build plt-main with PIE" \
666             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
667              tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
668             "-fPIC -Wa,-mrelax-relocations=yes" \
669             { plt-main5.c } \
670             {{readelf {-Wr} plt-main.rd}} \
671             "plt-main" \
672         ] \
673         [list \
674             "Build copyreloc-lib.so" \
675             "-shared" \
676             "-fPIC -Wa,-mrelax-relocations=yes" \
677             { copyreloc-lib.c } \
678             {} \
679             "copyreloc-lib.so" \
680         ] \
681         [list \
682             "Build libcopyreloc-main.a" \
683             "" \
684             "-Wa,-mrelax-relocations=yes" \
685             { copyreloc-main.S } \
686             {} \
687             "libcopyreloc-main.a" \
688         ] \
689         [list \
690             "Build copyreloc-main with PIE and GOTOFF (1)" \
691             "tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
692             "-Wa,-mrelax-relocations=yes" \
693             { dummy.s } \
694             {{readelf {-Wr} copyreloc-main1.rd}} \
695             "copyreloc-main" \
696         ] \
697         [list \
698             "Build copyreloc-main with PIE and GOTOFF (2)" \
699             "tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
700             "-Wa,-mrelax-relocations=yes" \
701             { dummy.s } \
702             {{readelf {-Wr} copyreloc-main2.rd}} \
703             "copyreloc-main" \
704         ] \
705         [list \
706             "Build pr17689.so" \
707             "-shared" \
708             "-fPIC -Wa,-mrelax-relocations=yes" \
709             { pr17689a.c } \
710             {} \
711             "pr17689.so" \
712         ] \
713         [list \
714             "Build pr17689.so with -z now" \
715             "-shared -Wl,-z,now" \
716             "-fPIC -Wa,-mrelax-relocations=yes" \
717             { pr17689a.c } \
718             {{readelf {-Wr} pr17689now.rd}} \
719             "pr17689now.so" \
720         ] \
721         [list \
722             "Build pr17689ver.so" \
723             "-shared -Wl,--version-script,pr17689a.t" \
724             "-fPIC -Wa,-mrelax-relocations=yes" \
725             { pr17689a.c } \
726             {} \
727             "pr17689ver.so" \
728         ] \
729         [list \
730             "Build pr17689.a" \
731             "" \
732             "-Wa,-mrelax-relocations=yes" \
733             { pr17689b.S } \
734             {} \
735             "pr17689.a" \
736         ] \
737         [list \
738             "Build pr17689 with PIE and GOTOFF" \
739             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
740             "-Wa,-mrelax-relocations=yes" \
741             { dummy.c } \
742             {{readelf {-Wr} pr17689.rd}} \
743             "pr17689" \
744         ] \
745         [list \
746             "Build pr17689 with PIE, -z now and GOTOFF" \
747             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie -Wl,-z,now" \
748             "-Wa,-mrelax-relocations=yes" \
749             { dummy.c } \
750             {{readelf {-Wr} pr17689now.rd}} \
751             "pr17689now" \
752         ] \
753         [list \
754             "Build pr17689ver with PIE and GOTOFF" \
755             "tmpdir/pr17689b.o tmpdir/pr17689ver.so -pie" \
756             "-Wa,-mrelax-relocations=yes" \
757             { dummy.c } \
758             {{readelf {-Wr} pr17689ver.rd}} \
759             "pr17689ver" \
760         ] \
761         [list \
762             "Build pr17827 with PIE and GOTOFF" \
763             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
764             "-Wa,-mrelax-relocations=yes" \
765             { dummy.c } \
766             {{readelf {-Wr} pr17827.rd}} \
767             "pr17827" \
768         ] \
769         [list \
770             "Build pr18900.so" \
771             "-shared" \
772             "-fPIC -Wa,-mrelax-relocations=yes" \
773             { pr18900a.c } \
774             "" \
775             "pr18900.so" \
776         ] \
777         [list \
778             "Build pr18900.o" \
779             "-r -nostdlib" \
780             "-Wa,-mrelax-relocations=yes" \
781             { pr18900b.c pr18900c.c } \
782             "" \
783             "pr18900.o" \
784         ] \
785         [list \
786             "Build pr18900a" \
787             "tmpdir/pr18900.o tmpdir/pr18900.so" \
788             "-Wa,-mrelax-relocations=yes" \
789             { dummy.s } \
790             {{readelf {-Wrd} pr18900a.rd}} \
791             "pr18900a" \
792         ] \
793         [list \
794             "Build pr18900b" \
795             "-Wl,--as-needed tmpdir/pr18900.o tmpdir/pr18900.so" \
796             "-Wa,-mrelax-relocations=yes" \
797             { dummy.s } \
798             {{readelf {-Wrd} pr18900b.rd}} \
799             "pr18900b" \
800         ] \
801         [list \
802             "Build pr19031.so" \
803             "-shared" \
804             "-fPIC -Wa,-mrelax-relocations=yes" \
805             { pr19031a.c } \
806             "" \
807             "pr19031.so" \
808         ] \
809         [list \
810             "Build got1d.so" \
811             "-shared" \
812             "-Wa,-mrelax-relocations=yes" \
813             { got1d.S } \
814             "" \
815             "got1d.so" \
816         ] \
817         [list \
818             "Build gotpc1.o" \
819             "-r -nostdlib" \
820             "-Wa,-mrelax-relocations=yes" \
821             { got1a.S got1b.c got1c.c } \
822             "" \
823             "gotpc1.o" \
824         ] \
825         [list \
826             "Build gotpc1" \
827             "$NOPIE_LDFLAGS -Wl,--as-needed,-z,noexecstack \
828              tmpdir/gotpc1.o tmpdir/got1d.so" \
829             "-Wa,-mx86-used-note=no" \
830             { dummy.s } \
831             {{objdump {-dw} got1.dd}} \
832             "got1" \
833         ] \
834         [list \
835             "Build pr19319.so" \
836             "-shared" \
837             "-Wa,-mx86-used-note=no" \
838             { pr19319a.S } \
839             "" \
840             "pr19319.so" \
841         ] \
842         [list \
843             "Build pr19319" \
844             "-pie -nostdlib -nostartfiles tmpdir/pr19319.so" \
845             "-Wa,-mrelax-relocations=yes" \
846             { pr19319b.S } \
847             {{objdump {-dw} pr19319.dd}} \
848             "pr19319" \
849         ] \
850         [list \
851             "Build pr24276.so" \
852             "-shared -nostdlib -nostartfiles \
853              -Ltmpdir $srcdir/$subdir/pr24276.dso" \
854             "-Wa,-mx86-used-note=yes" \
855             { pr19319b.S } \
856             {{warning_output pr24276.warn}} \
857             "pr24276.so" \
858         ] \
859         [list \
860             "Build property 1" \
861             "" \
862             "-Wa,-mx86-used-note=no" \
863             {pass.c property-no-copy.S} \
864             {{readelf {-n} property-1.r}} \
865             "property-1" \
866         ] \
867         [list \
868             "Build property 1 (.o)" \
869             "-r -nostdlib" \
870             "-Wa,-mx86-used-note=yes" \
871             {pass.c property-no-copy.S} \
872             {{readelf {-n} property-1a.r}} \
873             "property-1.o" \
874         ] \
875         [list \
876             "Build property 1 (.so)" \
877             "-shared" \
878             "-fPIC -Wa,-mx86-used-note=no" \
879             {pass.c property-no-copy.S} \
880             {{readelf {-n} property-1.r}} \
881             "property-1.so" \
882         ] \
883         [list \
884             "Build property 2" \
885             "" \
886             "-Wa,-mx86-used-note=no" \
887             {pass.c property-stack.S} \
888             {{readelf {-n} property-2.r}} \
889             "property-2" \
890         ] \
891         [list \
892             "Build property 2 (.o)" \
893             "-r -nostdlib" \
894             "-Wa,-mx86-used-note=yes" \
895             {pass.c property-stack.S} \
896             {{readelf {-n} property-2a.r}} \
897             "property-2.o" \
898         ] \
899         [list \
900             "Build property 2 (.so)" \
901             "-shared" \
902             "-fPIC -Wa,-mx86-used-note=no" \
903             {pass.c property-stack.S} \
904             {{readelf {-n} property-2.r}} \
905             "property-2.so" \
906         ] \
907         [list \
908             "Build property 3" \
909             "" \
910             "-Wa,-mx86-used-note=no" \
911             {pass.c property-stack.S property-x86-1.S} \
912             {{readelf {-n} property-3.r}} \
913             "property-3" \
914         ] \
915         [list \
916             "Build property 3 (.o)" \
917             "-r -nostdlib" \
918             "-Wa,-mx86-used-note=yes" \
919             {pass.c property-x86-1.S property-stack.S} \
920             {{readelf {-n} property-3a.r}} \
921             "property-3.o" \
922         ] \
923         [list \
924             "Build property 3 (.so)" \
925             "-shared" \
926             "-fPIC -Wa,-mx86-used-note=no" \
927             {property-x86-1.S pass.c property-stack.S} \
928             {{readelf {-n} property-3.r}} \
929             "property-3.so" \
930         ] \
931         [list \
932             "Build property 4" \
933             "" \
934             "-Wa,-mx86-used-note=no" \
935             {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
936             {{readelf {-n} property-4.r}} \
937             "property-4" \
938         ] \
939         [list \
940             "Build property 4 (.o)" \
941             "-r -nostdlib" \
942             "-Wa,-mx86-used-note=yes" \
943             {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
944             {{readelf {-n} property-4a.r}} \
945             "property-4.o" \
946         ] \
947         [list \
948             "Build property 4 (.so)" \
949             "-shared" \
950             "-fPIC -Wa,-mx86-used-note=no" \
951             {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
952             {{readelf {-n} property-4.r}} \
953             "property-4.so" \
954         ] \
955         [list \
956             "Build property 4 (-Wl,-z,stack-size=0)" \
957             "-Wl,-z,stack-size=0" \
958             "-Wa,-mx86-used-note=no" \
959             {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
960             {{readelf {-n} property-4.r}} \
961             "property-4" \
962         ] \
963         [list \
964             "Build property 5" \
965             "-Wl,-z,stack-size=0x900000" \
966             "-Wa,-mx86-used-note=no" \
967             {pass.c property-stack.S property-x86-1.S property-x86-2.S} \
968             {{readelf {-n} property-5.r}} \
969             "property-5" \
970         ] \
971         [list \
972             "Build property 5 (.o)" \
973             "-r -nostdlib -Wl,-z,stack-size=0x900000" \
974             "-Wa,-mx86-used-note=yes" \
975             {pass.c property-x86-2.S property-x86-1.S property-stack.S} \
976             {{readelf {-n} property-5a.r}} \
977             "property-5.o" \
978         ] \
979         [list \
980             "Build property 5 (.so)" \
981             "-shared -Wl,-z,stack-size=0x900000" \
982             "-fPIC -Wa,-mx86-used-note=no" \
983             {property-x86-2.S property-x86-1.S pass.c property-stack.S} \
984             {{readelf {-n} property-5.r}} \
985             "property-5.so" \
986         ] \
987         [list \
988             "Build property-6.so" \
989             "-shared" \
990             "-fPIC -Wa,-mx86-used-note=no" \
991             {property-6a.c property-6c.S} \
992             {{readelf {-n} property-6.r}} \
993             "property-6.so" \
994         ] \
995         [list \
996             "Build property-6.o" \
997             "-r -nostdlib" \
998             "-Wa,-mx86-used-note=yes" \
999             {property-6b.c property-stack.S} \
1000             {{readelf {-n} property-2a.r}} \
1001             "property-6.o" \
1002         ] \
1003         [list \
1004             "Build property-6" \
1005             "-Wl,--as-needed,-z,noexecstack \
1006              tmpdir/property-6.o tmpdir/property-6.so" \
1007             "-Wa,-mx86-used-note=no" \
1008             { dummy.s } \
1009             {{readelf {-n} property-2.r}} \
1010             "property-6" \
1011         ] \
1012         [list \
1013             "Build property 7a (.o)" \
1014             "-r -nostdlib" \
1015             "-Wa,-mx86-used-note=yes" \
1016             {property-unsorted-1.S} \
1017             {{readelf {-n} property-7a.r}} \
1018             "property-7a.o" \
1019         ] \
1020         [list \
1021             "Build property 7b (.o)" \
1022             "-r -nostdlib" \
1023             "-Wa,-mx86-used-note=yes" \
1024             {property-unsorted-2.S} \
1025             {{readelf {-n} property-7a.r}} \
1026             "property-7b.o" \
1027         ] \
1028     ]
1030     run_ld_link_exec_tests [list \
1031         [list \
1032             "Run plt-main" \
1033             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1034              tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
1035             "-Wa,-mx86-used-note=yes" \
1036             { plt-main5.c } \
1037             "plt-main" \
1038             "plt-main.out" \
1039         ] \
1040         [list \
1041             "Run plt-main with PIE" \
1042             "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
1043              tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
1044             "-Wa,-mx86-used-note=yes" \
1045             { plt-main5.c } \
1046             "plt-main-pie" \
1047             "plt-main.out" \
1048             "-fPIC" \
1049         ] \
1050         [list \
1051             "Run copyreloc-main with PIE and GOTOFF" \
1052             "-Wl,--as-needed tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
1053             "-Wa,-mx86-used-note=yes" \
1054             { dummy.s } \
1055             "copyreloc-main" \
1056             "copyreloc-main.out" \
1057         ] \
1058         [list \
1059             "Run pr17689 with PIE and GOTOFF" \
1060             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
1061             "-Wa,-mx86-used-note=yes" \
1062             { dummy.c } \
1063             "pr17689" \
1064             "pr17689.out" \
1065         ] \
1066         [list \
1067             "Run pr17689 with PIE, -z now and GOTOFF" \
1068             "tmpdir/pr17689b.o tmpdir/pr17689.so -pie -z now" \
1069             "-Wa,-mx86-used-note=yes" \
1070             { dummy.c } \
1071             "pr17689now" \
1072             "pr17689.out" \
1073         ] \
1074         [list \
1075             "Run pr17689ver with PIE and GOTOFF" \
1076             "tmpdir/pr17689b.o tmpdir/pr17689ver.so -pie" \
1077             "-Wa,-mx86-used-note=yes" \
1078             { dummy.c } \
1079             "pr17689ver" \
1080             "pr17689.out" \
1081         ] \
1082         [list \
1083             "Run pr18900" \
1084             "tmpdir/pr18900.o tmpdir/pr18900.so" \
1085             "-Wa,-mx86-used-note=yes" \
1086             { dummy.s } \
1087             "pr18900" \
1088             "pr18900.out" \
1089         ] \
1090         [list \
1091             "Run pr19031" \
1092             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr19031.so" \
1093             "-Wa,-mx86-used-note=yes" \
1094             { pr19031b.S pr19031c.c } \
1095             "pr19031" \
1096             "pr19031.out" \
1097             "$NOPIE_CFLAGS" \
1098         ] \
1099         [list \
1100             "Run got1" \
1101             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/got1d.so" \
1102             "-Wa,-mx86-used-note=yes" \
1103             { got1a.S got1b.c got1c.c } \
1104             "got1" \
1105             "got1.out" \
1106         ] \
1107         [list \
1108             "Run property 1" \
1109             "" \
1110             "-Wa,-mx86-used-note=yes" \
1111             {pass.c property-no-copy.S} \
1112             "property-1" "pass.out" \
1113         ] \
1114         [list \
1115             "Run property 1 (PIE)" \
1116             "-pie" \
1117             "-Wa,-mx86-used-note=yes" \
1118             {pass.c property-no-copy.S} \
1119             "property-1-pie" "pass.out" "-fPIE" \
1120         ] \
1121         [list \
1122             "Run property 1 (static)" \
1123             "-static" \
1124             "-Wa,-mx86-used-note=yes" \
1125             {pass.c property-no-copy.S} \
1126             "property-1-static" "pass.out" \
1127         ] \
1128         [list \
1129             "Run property 2" \
1130             "" \
1131             "-Wa,-mx86-used-note=yes" \
1132             {pass.c property-stack.S} \
1133             "property-2" "pass.out" \
1134         ] \
1135         [list \
1136             "Run property 2 (PIE)" \
1137             "-pie" \
1138             "-Wa,-mx86-used-note=yes" \
1139             {pass.c property-stack.S} \
1140             "property-2-pie" "pass.out" "-fPIE" \
1141         ] \
1142         [list \
1143             "Run property 2 (static)" \
1144             "-static" \
1145             "-Wa,-mx86-used-note=yes" \
1146             {pass.c property-stack.S} \
1147             "property-3-static" "pass.out" \
1148         ] \
1149     ]
1151     undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
1152     undefined_weak "-fPIE" "$NOPIE_LDFLAGS"
1153     undefined_weak "-fPIE" "-pie"
1154     undefined_weak "-fPIE" "-z nodynamic-undefined-weak $NOPIE_LDFLAGS"
1155     undefined_weak "-fPIE" "-pie -z nodynamic-undefined-weak"
1158 # Must be native with the C compiler and working IFUNC support,
1159 if { [isnative]
1160      && [check_ifunc_available]
1161      && [istarget "i?86-*-*"]
1162      && [check_compiler_available] } {
1163     run_cc_link_tests [list \
1164         [list \
1165             "Build ifunc-1a.o ifunc-1b.o ifunc-1c.o ifunc-1d.o" \
1166             "" \
1167             "-fPIC -O2 -g -Wa,-mx86-used-note=yes" \
1168             { ifunc-1a.c ifunc-1b.S ifunc-1c.S ifunc-1d.S } \
1169         ] \
1170         [list \
1171             "Build pr21168a.o" \
1172             "" \
1173             "-Wa,-mx86-used-note=yes" \
1174             { pr21168a.c } \
1175         ] \
1176         [list \
1177             "Build pr21168.so" \
1178             "-shared" \
1179             "-Wa,-mx86-used-note=yes" \
1180             { pr21168b.S } \
1181             "" \
1182             "pr21168.so" \
1183         ] \
1184     ]
1186     run_ld_link_exec_tests [list \
1187         [list \
1188             "Run ifunc-1a" \
1189             "tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
1190              tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1191             "-Wa,-mx86-used-note=yes" \
1192             { dummy.c } \
1193             "ifunc-1a" \
1194             "pass.out" \
1195         ] \
1196         [list \
1197             "Run ifunc-1b" \
1198             "--static tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
1199             tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1200             "-Wa,-mx86-used-note=yes" \
1201             { dummy.c } \
1202             "ifunc-1b" \
1203             "pass.out" \
1204         ] \
1205         [list \
1206             "Run pr21168" \
1207             "tmpdir/pr21168a.o tmpdir/pr21168.so" \
1208             "-Wa,-mx86-used-note=yes" \
1209             { dummy.c } \
1210             "pr21168" \
1211             "pass.out" \
1212         ] \
1213     ]
1215     if { [istarget "i?86-*-linux*"] } {
1216         run_cc_link_tests [list \
1217             [list \
1218                 "Build pr21168.so with -z ibtplt" \
1219                 "-shared -Wl,-z,ibtplt" \
1220                 "-Wa,-mx86-used-note=yes" \
1221                 { pr21168b.S } \
1222                 "" \
1223                 "pr21168-ibt.so" \
1224             ] \
1225             [list \
1226                 "Build ifunc-1a with -z ibtplt" \
1227                 "-Wl,-z,ibtplt $NOPIE_LDFLAGS tmpdir/ifunc-1a.o \
1228                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1229                 "-Wa,-mx86-used-note=yes" \
1230                 { dummy.c } \
1231                 {{objdump {-dw} plt-main-ibt.dd}} \
1232                 "ifunc-1a-ibt" \
1233             ] \
1234             [list \
1235                 "Build ifunc-1a with PIE -z ibtplt" \
1236                 "-Wl,-z,ibtplt -pie tmpdir/ifunc-1a.o \
1237                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1238                 "-Wa,-mx86-used-note=yes" \
1239                 { dummy.c } \
1240                 {{objdump {-dw} plt-pie-ibt.dd}} \
1241                 "ifunc-1a-pie-ibt" \
1242             ] \
1243         ]
1245         run_ld_link_exec_tests [list \
1246             [list \
1247                 "Run ifunc-1a with -z ibtplt" \
1248                 "-Wl,-z,ibtplt $NOPIE_LDFLAGS tmpdir/ifunc-1a.o \
1249                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1250                 "-Wa,-mx86-used-note=yes" \
1251                 { dummy.c } \
1252                 "ifunc-1a-ibt" \
1253                 "pass.out" \
1254             ] \
1255             [list \
1256                 "Run ifunc-1a with PIE -z ibtplt" \
1257                 "-Wl,-z,ibtplt -pie tmpdir/ifunc-1a.o \
1258                  tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
1259                 "-Wa,-mx86-used-note=yes" \
1260                 { dummy.c } \
1261                 "ifunc-1a-pie-ibt" \
1262                 "pass.out" \
1263             ] \
1264             [list \
1265                 "Run pr21168 with -z ibtplt" \
1266                 "tmpdir/pr21168a.o tmpdir/pr21168-ibt.so" \
1267                 "-Wa,-mx86-used-note=yes" \
1268                 { dummy.c } \
1269                 "pr21168-ibt" \
1270                 "pass.out" \
1271             ] \
1272         ]
1273     }
1276 # Must be native with the C compiler.
1277 if { [isnative]
1278      && [istarget "i?86-*-*"]
1279      && [check_compiler_available] } {
1280     run_cc_link_tests [list \
1281         [list \
1282             "Build pr22001-1.so" \
1283             "-shared -Wl,-z,notext" \
1284             "-Wa,-mx86-used-note=yes" \
1285             { pr22001-1a.c } \
1286             {} \
1287             "pr22001-1.so" \
1288         ] \
1289         [list \
1290             "Build pr21997-1.so" \
1291             "-shared" \
1292             "-Wa,-mx86-used-note=yes" \
1293             { property-stack.S property-no-copy.S pr21997-1a.S } \
1294             {} \
1295             "pr21997-1.so" \
1296         ] \
1297         [list \
1298             "Build pr22842.so" \
1299             "-shared" \
1300             "-fPIC -Wa,-mx86-used-note=yes" \
1301             { pr22842a.c } \
1302             {} \
1303             "pr22842.so" \
1304         ] \
1305         [list \
1306             "Build pr28875.so" \
1307             "-shared -Wl,-z,indirect-extern-access" \
1308             "-fPIC" \
1309             { pr28875a.c } \
1310             {} \
1311             "pr28875.so" \
1312         ] \
1313         [list \
1314             "Build pr28875" \
1315             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr28875.so" \
1316             "$NOPIE_CFLAGS" \
1317             { pr28875b.c } \
1318             {{error_output "pr28875.err"}} \
1319             "pr28875" \
1320         ] \
1321         [list \
1322             "Build pr21997-1" \
1323             "$NOPIE_LDFLAGS -Wl,--no-as-needed,-z,notext tmpdir/pr21997-1.so" \
1324             "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
1325             { pr21997-1b.c } \
1326             {{error_output "pr21997-1.err"}} \
1327             "pr21997-1" \
1328         ] \
1329         [list \
1330             "Build pr32067" \
1331             "-Wl,--oformat,binary -nostdlib -nostartfiles" \
1332             "" \
1333             { start.s ../ld-x86-64/pr32067.s } \
1334             {} \
1335             "pr32067" \
1336         ] \
1337     ]
1339     # The musl C library does not support TEXTRELs.
1340     if { ![istarget i?86-*-musl] } {
1341         run_ld_link_exec_tests [list \
1342             [list \
1343                 "Run pr22001-1" \
1344                 "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed,-z,notext tmpdir/pr22001-1.so" \
1345                 "-Wa,-mx86-used-note=yes" \
1346                 { pr22001-1b.c } \
1347                 "pr22001-1" \
1348                 "pass.out" \
1349                 "$NOPIE_CFLAGS" \
1350             ] \
1351         ]
1352     }
1354     run_ld_link_exec_tests [list \
1355         [list \
1356             "Run weakundef1 without PIE" \
1357             "$NOPIE_LDFLAGS" \
1358             "-Wa,-mx86-used-note=yes" \
1359             { weakundef1.c } \
1360             "weakundef1pie" \
1361             "pass.out" \
1362             "$NOPIE_CFLAGS" \
1363         ] \
1364         [list \
1365             "Run pr22001-1 (PIE 1)" \
1366             "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1367             "-Wa,-mx86-used-note=yes" \
1368             { pr22001-1c.S } \
1369             "pr22001-1-pie-1" \
1370             "pass.out" \
1371         ] \
1372         [list \
1373             "Run pr22001-1 (PIE 2)" \
1374             "-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1375             "-Wa,-mx86-used-note=yes" \
1376             { pr22001-1c.S } \
1377             "pr22001-1-pie-2" \
1378             "pass.out" \
1379         ] \
1380         [list \
1381             "Run pr22001-1 (PIC 1)" \
1382             "$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1383             "-Wa,-mx86-used-note=yes" \
1384             { pr22001-1b.c } \
1385             "pr22001-1-pic-1" \
1386             "pass.out" \
1387             "-fPIC" \
1388         ] \
1389         [list \
1390             "Run pr22001-1 (PIC 2)" \
1391             "-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
1392             "-Wa,-mx86-used-note=yes" \
1393             { pr22001-1b.c } \
1394             "pr22001-1-pic-2" \
1395             "pass.out" \
1396             "-fPIC" \
1397         ] \
1398         [list \
1399             "Run pr21997-1 (PIC 1)" \
1400             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1401             "-Wa,-mx86-used-note=yes" \
1402             { pr21997-1b.c } \
1403             "pr21997-1-pic-1" \
1404             "pass.out" \
1405             "-fPIC" \
1406         ] \
1407         [list \
1408             "Run pr21997-1 (PIC 2)" \
1409             "-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1410             "-Wa,-mx86-used-note=yes" \
1411             { pr21997-1b.c } \
1412             "pr21997-1-pic-2" \
1413             "pass.out" \
1414             "-fPIC" \
1415         ] \
1416         [list \
1417             "Run pr21997-1 (PIE 1)" \
1418             "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1419             "-Wa,-mx86-used-note=yes" \
1420             { pr21997-1c.S } \
1421             "pr21997-1-pie-1" \
1422             "pass.out" \
1423         ] \
1424         [list \
1425             "Run pr21997-1 (PIE 2)" \
1426             "-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
1427             "-Wa,-mx86-used-note=yes" \
1428             { pr21997-1c.S } \
1429             "pr21997-1-pie-2" \
1430             "pass.out" \
1431         ] \
1432         [list \
1433             "Build pr22842" \
1434             "-pie -Wl,--no-as-needed tmpdir/pr22842.so" \
1435             "-Wa,-mx86-used-note=yes" \
1436             { pr22842b.S } \
1437             "pr22842" \
1438             "pass.out" \
1439         ] \
1440         [list \
1441             "Run pr23997" \
1442             "" \
1443             "" \
1444             { ../ld-x86-64/pr23997a.s ../ld-x86-64/pr23997b.c \
1445               ../ld-x86-64/pr23997c.c } \
1446             "pr23997" \
1447             "pass.out" \
1448         ] \
1449     ]
1451     if { [at_least_gcc_version 5 0] } {
1452         run_ld_link_exec_tests [list \
1453             [list \
1454                 "Run weakundef1 with PIE" \
1455                 "-pie" \
1456                 "-Wa,-mx86-used-note=yes" \
1457                 { weakundef1.c } \
1458                 "weakundef1pie" \
1459                 "pass.out" \
1460                 "-fPIE" \
1461             ] \
1462         ]
1463     }
1466 if { !([istarget "i?86-*-linux*"]
1467        || [istarget "x86_64-*-linux*"]) } {
1468     set ASFLAGS "$saved_ASFLAGS"
1469     return
1472 run_ld_link_tests [list \
1473     [list \
1474         "basic PLT generation (non-PIC, -z now)" \
1475         "-z now -melf_i386 --hash-style=sysv \
1476          -z noseparate-code tmpdir/libpltlib.so" \
1477         "" \
1478         "--32" \
1479         {plt2.s} \
1480         {{readelf -SW plt2.rd} {objdump -dwr plt2.dd}} \
1481         "plt2" \
1482     ] \
1483     [list \
1484         "basic PLT generation (PIC, -z now)" \
1485         "-z now -shared -melf_i386 tmpdir/libpltlib.so" \
1486         "" \
1487         "--32 -mx86-used-note=yes" \
1488         {plt-pic.s} \
1489         {{objdump -dwr plt-pic2.dd}} \
1490         "plt-pic2.so" \
1491     ] \
1492     [list \
1493         "Build pr21626.so" \
1494         "-shared -melf_i386" \
1495         "" \
1496         "--32 -mx86-used-note=yes" \
1497         {property-x86-3.s} \
1498         "" \
1499         "pr21626.so" \
1500     ] \
1501     [list \
1502         "Build pr21626" \
1503         "-melf_i386 tmpdir/pr21626.so" \
1504         "" \
1505         "--32 -mx86-used-note=yes" \
1506         {start.s foo.s} \
1507         "" \
1508         "pr21626" \
1509     ] \
1512 # Linux only tests
1513 run_dump_test "pltgot-1"
1514 run_dump_test "pltgot-2"
1515 run_dump_test "pr20830"
1516 run_dump_test "ibt-plt-1"
1517 run_dump_test "ibt-plt-2a"
1518 run_dump_test "ibt-plt-2b"
1519 run_dump_test "ibt-plt-2c"
1520 run_dump_test "ibt-plt-2d"
1521 run_dump_test "ibt-plt-3a"
1522 run_dump_test "ibt-plt-3b"
1523 run_dump_test "ibt-plt-3c"
1524 run_dump_test "ibt-plt-3d"
1526 set ASFLAGS "$saved_ASFLAGS"