1# Expect script for various ELF tests. 2# Copyright (C) 2006-2020 Free Software Foundation, Inc. 3# 4# This file is part of the GNU Binutils. 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 3 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program; if not, write to the Free Software 18# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19# MA 02110-1301, USA. 20# 21 22# Exclude non-ELF targets. 23 24if ![is_elf_format] { 25 return 26} 27 28# Skip targets where -shared is not supported 29 30if ![check_shared_lib_support] { 31 return 32} 33 34set old_ASFLAGS $ASFLAGS 35 36# This target requires extra GAS options when building code for shared 37# libraries. 38set AFLAGS_PIC "" 39if [istarget "nds32*-*"] { 40 append AFLAGS_PIC " -mpic" 41} 42if [istarget "tic6x-*-*"] { 43 append AFLAGS_PIC " -mpic -mpid=near" 44} 45if [istarget "sparc*-*-*"] { 46 append AFLAGS_PIC " -K PIC -Av9" 47} 48 49# GAS options to disable program property note. 50set AFLAGS_NOTE "" 51if { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { 52 append AFLAGS_NOTE "-mx86-used-note=no" 53} 54 55# This target requires a non-default emulation for successful shared 56# library/executable builds. 57set LFLAGS "" 58if [istarget "tic6x-*-*"] { 59 append LFLAGS " -melf32_tic6x_le" 60} 61# HPUX targets use a different .comm syntax. 62set hpux "" 63if [istarget "*-*-hpux*"] { 64 set hpux "--defsym HPUX=1" 65} 66# These targets do not default to linking with shared libraries. 67if { [istarget "mips*vr4100*-*-elf*"] \ 68 || [istarget "mips*vr4300*-*-elf*"] \ 69 || [istarget "mips*vr5000*-*-elf*"] } { 70 append LFLAGS " -call_shared" 71} 72 73if [is_underscore_target] { 74 set ASFLAGS "$ASFLAGS --defsym UNDERSCORE=1" 75} 76 77run_ld_link_tests [list \ 78 [list \ 79 "Build pr22471a.so" \ 80 "$LFLAGS -shared" \ 81 "" \ 82 "$AFLAGS_PIC" \ 83 {pr22471a.s} \ 84 {} \ 85 "pr22471a.so" \ 86 ] \ 87 [list \ 88 "Build pr22471b.so" \ 89 "$LFLAGS -shared --version-script pr22471.t" \ 90 "tmpdir/pr22471a.so" \ 91 "$AFLAGS_PIC" \ 92 {pr22471a.s} \ 93 {} \ 94 "pr22471b.so" \ 95 ] \ 96 [list \ 97 "Build pr22471" \ 98 "$LFLAGS -rpath-link ." \ 99 "tmpdir/pr22471b.so" \ 100 "" \ 101 {pr22471b.s} \ 102 {} \ 103 "pr22471" \ 104 ] \ 105 [list \ 106 "Build pr22649-1.so" \ 107 "$LFLAGS -shared" \ 108 "" \ 109 "$AFLAGS_PIC" \ 110 {pr22649-1.s} \ 111 {} \ 112 "pr22649-1.so" \ 113 ] \ 114] 115 116if { [check_gc_sections_available] } { 117 if [istarget mips*-*-*] { 118 set actions {{ld pr22649-2ab-mips.msg}} 119 } else { 120 set actions {{ld pr22649.msg}} 121 } 122 run_ld_link_tests [list \ 123 [list \ 124 "Build pr22649-2a.so" \ 125 "$LFLAGS -shared -gc-sections -print-gc-sections" \ 126 "" \ 127 "$AFLAGS_PIC" \ 128 {pr22649-2a.s} \ 129 $actions \ 130 "pr22649-2a.so" \ 131 ] \ 132 [list \ 133 "Build pr22649-2b.so" \ 134 "$LFLAGS -shared -gc-sections -print-gc-sections" \ 135 "tmpdir/pr22649-1.so" \ 136 "$AFLAGS_PIC" \ 137 {pr22649-2a.s} \ 138 $actions \ 139 "pr22649-2b.so" \ 140 ] \ 141 ] 142 if { [istarget mips*-*-*] && ![istarget *-*-elf*] } { 143 set actions {{ld pr22649-2cd-mips.msg}} 144 } else { 145 set actions {} 146 } 147 run_ld_link_tests [list \ 148 [list \ 149 "Build pr22649-2c.so" \ 150 "$LFLAGS -shared -gc-sections -print-gc-sections" \ 151 "" \ 152 "$AFLAGS_PIC" \ 153 {pr22649-2b.s} \ 154 $actions \ 155 "pr22649-2b.so" \ 156 ] \ 157 [list \ 158 "Build pr22649-2d.so" \ 159 "$LFLAGS -shared -gc-sections -print-gc-sections" \ 160 "tmpdir/pr22649-1.so" \ 161 "$AFLAGS_PIC" \ 162 {pr22649-2b.s} \ 163 $actions \ 164 "pr22649-2b.so" \ 165 ] \ 166 ] 167} 168 169run_ld_link_tests [list \ 170 [list \ 171 "DT_TEXTREL in shared lib" \ 172 "$LFLAGS -shared --warn-shared-textrel" \ 173 "" \ 174 "$AFLAGS_PIC" \ 175 {textrel.s} \ 176 {{ld textrel.warn} \ 177 {readelf {-d --wide} textrel.rd}} \ 178 "textrel.so" \ 179 ] \ 180] "xtensa-*-*" 181 182# The MIPS backend sets SHF_WRITE, in `mips_elf_create_dynamic_relocation', 183# for any section that has a dynamic relocation attached and consequently 184# this test is irrelevant for MIPS targets. We don't have a clean way to 185# request UNSUPPORTED result, which would be the most appropriate here, 186# so we just XFAIL the test instead. 187run_ld_link_tests [list \ 188 [list \ 189 "DT_TEXTREL map file warning" \ 190 "$LFLAGS -shared -M" \ 191 "" \ 192 "$AFLAGS_PIC" \ 193 {textrel.s} \ 194 {{ld textrel.map}} \ 195 "textrel.so" \ 196 ] \ 197] "cris*-*-*" "mips*-*-*" 198 199# PR ld/20828 check for correct dynamic symbol table entries where: 200# - symbols have been defined with a linker script, 201# - the same symbols have been seen in shared library used in the link, 202# - the shared library symbols have been swept in section garbage collection. 203# Verify that the symbols are global rather than local and that a version 204# script adjusts them accordingly. 205# Also verify that a version definition supplied by an object rather than 206# a version script and forcibly exported is unaffected by section GC. 207if { [check_gc_sections_available] } { 208 run_ld_link_tests [list \ 209 [list \ 210 "PR ld/20828 dynamic symbols with section GC\ 211 (auxiliary shared library)" \ 212 "$LFLAGS -shared --gc-sections -T pr20828.ld" "" "$AFLAGS_PIC" \ 213 {pr20828.s} \ 214 {{readelf --dyn-syms pr20828-a.sd} \ 215 {readelf --dyn-syms pr20828-b.sd}} \ 216 "libpr20828.so"] \ 217 [list \ 218 "PR ld/20828 dynamic symbols with section GC (plain)" \ 219 "$LFLAGS -shared --gc-sections -T pr20828.ld" \ 220 "tmpdir/libpr20828.so" "$AFLAGS_PIC" \ 221 {pr20828.s} \ 222 {{readelf --dyn-syms pr20828-a.sd} \ 223 {readelf --dyn-syms pr20828-b.sd}} \ 224 "pr20828-1.so"] \ 225 [list \ 226 "PR ld/20828 dynamic symbols with section GC (version script)" \ 227 "$LFLAGS -shared --gc-sections -T pr20828.ld\ 228 --version-script=pr20828.ver" \ 229 "tmpdir/libpr20828.so" \ 230 "$AFLAGS_PIC" \ 231 {pr20828.s} \ 232 {{readelf --dyn-syms pr20828-b.sd} \ 233 {readelf --dyn-syms pr20828-c.sd}} \ 234 "pr20828-2.so"] \ 235 [list \ 236 "PR ld/20828 dynamic symbols with section GC\ 237 (versioned shared library)" \ 238 "$LFLAGS -shared --gc-sections -T pr20828.ld\ 239 --version-script=pr20828-v.ver" \ 240 "" "$AFLAGS_PIC" \ 241 {pr20828.s} \ 242 {{readelf --dyn-syms pr20828-c.sd} \ 243 {readelf --dyn-syms pr20828-d.sd} \ 244 {readelf --dyn-syms pr20828-e.sd}} \ 245 "libpr20828-v.so"] \ 246 [list \ 247 "PR ld/20828 dynamic symbols with section GC (versioned)" \ 248 "$LFLAGS -shared --gc-sections -T pr20828.ld\ 249 --version-script=pr20828-v.ver" \ 250 "tmpdir/libpr20828-v.so" \ 251 "$AFLAGS_PIC" \ 252 {pr20828.s} \ 253 {{readelf --dyn-syms pr20828-c.sd} \ 254 {readelf --dyn-syms pr20828-d.sd} \ 255 {readelf --dyn-syms pr20828-e.sd}} \ 256 "pr20828-v.so"] \ 257 [list \ 258 "PR ld/20828 forcibly exported symbol version without section GC" \ 259 "$LFLAGS --no-dynamic-linker -e foo -E -T pr20828-v.ld" "" "" \ 260 {pr20828-v.s} \ 261 {{objdump -p pr20828-v.od}} \ 262 "pr20828-v-1"] \ 263 [list \ 264 "PR ld/20828 forcibly exported symbol version with section GC" \ 265 "$LFLAGS --no-dynamic-linker -e foo --gc-sections -E -T pr20828-v.ld" "" "" \ 266 {pr20828-v.s} \ 267 {{objdump -p pr20828-v.od}} \ 268 "pr20828-v-2"]] 269} 270# PR ld/21233 check for correct dynamic symbol table entries where: 271# - a symbol has been defined in a shared library used in the link, 272# - the symbol has been referenced from a section swept in garbage collection, 273# - the symbol has also been forced to be entered in the output file as an 274# undefined symbol, either with a command-line option or a linker script 275# command. 276# Verify that the undefined symbol is global rather than local. 277if { [check_gc_sections_available] } { 278 run_ld_link_tests [list \ 279 [list \ 280 "PR ld/21233 dynamic symbols with section GC\ 281 (auxiliary shared library)" \ 282 "$LFLAGS -shared -T pr21233.ld" "" "$AFLAGS_PIC" \ 283 {pr21233-l.s} \ 284 {{readelf --dyn-syms pr21233-l.sd}} \ 285 "libpr21233.so"]] 286 287 run_ld_link_tests [list \ 288 [list \ 289 "PR ld/21233 dynamic symbols with section GC (--undefined)" \ 290 "$LFLAGS --gc-sections -e foo --undefined=bar -T pr21233.ld" \ 291 "tmpdir/libpr21233.so" "" \ 292 {pr21233.s} \ 293 {{readelf --dyn-syms pr21233.sd}} \ 294 "pr21233-1"]] 295 296 run_ld_link_tests [list \ 297 [list \ 298 "PR ld/21233 dynamic symbols with section GC (--require-defined)" \ 299 "$LFLAGS --gc-sections -e foo --require-defined=bar\ 300 -T pr21233.ld" \ 301 "tmpdir/libpr21233.so" "" \ 302 {pr21233.s} \ 303 {{readelf --dyn-syms pr21233.sd}} \ 304 "pr21233-2"]] 305 306 run_ld_link_tests [list \ 307 [list \ 308 "PR ld/21233 dynamic symbols with section GC (EXTERN)" \ 309 "$LFLAGS --gc-sections -e foo -T pr21233-e.ld" \ 310 "tmpdir/libpr21233.so" "" \ 311 {pr21233.s} \ 312 {{readelf --dyn-syms pr21233.sd}} \ 313 "pr21233-3"]] 314} 315 316if { [check_gc_sections_available] } { 317 run_ld_link_tests [list \ 318 [list \ 319 "Build pr22150.so" \ 320 "$LFLAGS -shared --version-script pr22150.ver" \ 321 "" \ 322 "$AFLAGS_PIC" \ 323 {pr22150a.s} \ 324 {} \ 325 "pr22150.so" \ 326 ] \ 327 [list \ 328 "Build pr22150" \ 329 "$LFLAGS -e _start --gc-sections" \ 330 "tmpdir/pr22150.so" \ 331 "" \ 332 {pr22150b.s} \ 333 {{readelf -V pr22150.vd}} \ 334 "pr22150" \ 335 ] \ 336 ] 337 338 switch -glob $target_triplet { 339 # exclude targets that don't support copy relocs 340 bfin-*-* { } 341 frv-*-* { } 342 lm32-*-* { } 343 mips*-*-* { } 344 tic6x-*-* { } 345 xtensa-*-* { } 346 default { 347 run_ld_link_tests [list \ 348 [list \ 349 "Build pr25458.so" \ 350 "$LFLAGS -shared --version-script=pr25458.map" \ 351 "" \ 352 "$AFLAGS_PIC" \ 353 {pr25458b.s} \ 354 {} \ 355 "pr25458.so" \ 356 ] \ 357 [list \ 358 "Build pr25458" \ 359 "$LFLAGS -e _start --gc-sections" \ 360 "tmpdir/pr25458.so" \ 361 "$AFLAGS_PIC" \ 362 {pr25458a.s} \ 363 {{readelf {--dyn-sym --wide} pr25458.rd}} \ 364 "pr25458" \ 365 ] \ 366 ] 367 } 368 } 369} 370 371set ASFLAGS $old_ASFLAGS 372 373run_ld_link_tests { 374 {"Build pr14170a.o" "" "" "" {pr14170a.s} {} "pr14170.a" } 375} 376run_ld_link_tests [list \ 377 [list "Build shared library for pr14170" \ 378 "-shared" "" "$AFLAGS_PIC" "pr14170b.s" {} "pr14170.so" ] \ 379] 380 381# bfin does not currently support copy relocs. 382setup_xfail bfin-*-* 383clear_xfail bfin-*-linux* 384run_ld_link_tests [list \ 385 [list "PR ld/14170" \ 386 "$LFLAGS --no-dynamic-linker tmpdir/pr14170a.o tmpdir/pr14170.so" "" \ 387 $hpux \ 388 {pr14170c.s} { } "pr14170" ] \ 389] 390 391# Targets that use _bfd_generic_link_add_symbols won't pass pr21703 tests 392# Nor will hppa64 with dot-symbols. 393run_ld_link_tests [list \ 394 [list "PR ld/21703 shared" \ 395 "$LFLAGS -shared --allow-multiple-definition --version-script pr21703.ver\ 396 tmpdir/pr21703-3.o tmpdir/pr21703-4.o" "" "$AFLAGS_PIC" \ 397 {pr21703-3.s pr21703-4.s} {{readelf {--dyn-syms} pr21703-shared.sd}} \ 398 "pr21703.so" ] \ 399] \[is_generic\] hppa64-*-* 400 401# This target requires extra GAS options when building non-PIC code 402# for linking with shared libraries. 403set AFLAGS_NONPIC "" 404if [istarget "mips*-*-*"] { 405 append AFLAGS_NONPIC " -call_nonpic" 406} 407 408# Run a test to check linking a shared library with a broken linker 409# script that accidentally marks dynamic sections as notes. The 410# resulting executable is not expected to work, but the linker 411# should not seg-fault whilst creating the binary. 412run_ld_link_tests [list \ 413 [list "Build shared library for broken linker script test" \ 414 "-shared --hash-style=sysv" "" "$AFLAGS_PIC" "note-3.s" \ 415 {} \ 416 "note-3.so" ] \ 417 [list "Link using broken linker script" \ 418 "$LFLAGS --script note-3.t tmpdir/note-3.so" "" "" "" \ 419 { { ld "note-3.l" } } \ 420 "a.out" ] \ 421] 422 423run_ld_link_tests [list \ 424 [list "Build pr17068.so" \ 425 "-shared" "" "$AFLAGS_PIC" \ 426 {pr17068d.s} {} "pr17068.so"] \ 427 [list "Build pr17068a.a" \ 428 "" "" "" \ 429 {pr17068a.s pr17068c.s pr17068ez.s} {} "pr17068a.a"] \ 430 [list "Build pr17068b.a" \ 431 "" "" "" \ 432 {pr17068b.s pr17068e.s} {} "pr17068b.a"] \ 433] 434 435# bfin does not currently support copy relocs. 436setup_xfail bfin-*-* 437clear_xfail bfin-*-linux* 438run_ld_link_tests { 439 {"pr17068 link --as-needed lib in group" 440 "$LFLAGS --as-needed --no-dynamic-linker" 441 "--start-group tmpdir/pr17068a.a tmpdir/pr17068.so tmpdir/pr17068b.a\ 442 --end-group" "" 443 {start.s pr17068.s} {} "pr17068"} 444} 445 446# Fails on MIPS because ABI trickery means that a NULL reloc is emitted. 447# Fails on bfin because relocations are not created. 448setup_xfail mips*-*-* bfin-*-* 449clear_xfail bfin-*-linux* 450run_ld_link_tests [list \ 451 [list "-Bsymbolic-functions" \ 452 "-shared -Bsymbolic-functions" "" "$AFLAGS_PIC" \ 453 {symbolic-func.s} {{readelf {-r --wide} symbolic-func.r}} \ 454 "symbolic-func.so"] \ 455] 456 457run_ld_link_tests [list \ 458 [list "Build pr20995.so" \ 459 "-shared" "" "$AFLAGS_PIC" \ 460 {pr20995b.s} {} "pr20995.so"] \ 461] 462 463# These targets don't copy dynamic variables into .bss. 464setup_xfail "alpha-*-*" "bfin-*-*" "ia64-*-*" "xtensa-*-*" 465# or don't have .data.rel.ro 466setup_xfail "hppa*64*-*-hpux*" "tic6x-*-*" 467run_ld_link_tests [list \ 468 [list \ 469 "pr20995" \ 470 "$LFLAGS" "tmpdir/pr20995.so" "$AFLAGS_NONPIC" \ 471 {pr20995a.s} {{readelf {-S --wide} pr20995.r}} "pr20995"]] 472 473# xfail on targets that don't support GNU_RELRO. 474# For more details, please see discussions at: 475# https://sourceware.org/ml/binutils/2017-01/msg00441.html 476run_ld_link_tests [list \ 477 [list "Build pr20995-2.so" \ 478 "-shared -z relro" "" "$AFLAGS_PIC" \ 479 {pr20995c.s} {{readelf {-l --wide} pr20995-2so.r}} "pr20995-2.so"] \ 480] {![check_relro_support]} 481 482setup_xfail alpha-*-* xtensa-*-* 483run_ld_link_tests [list \ 484 [list \ 485 "pr20995-2" \ 486 "$LFLAGS" "tmpdir/pr20995-2.so" "$AFLAGS_NONPIC" \ 487 {pr20995a.s} {{readelf {-S --wide} pr20995.r}} "pr20995-2"] 488] {![check_relro_support]} 489 490run_ld_link_tests [list \ 491 [list "Build pr22374 shared library" \ 492 "-shared" "" "$AFLAGS_PIC" "pr22374b.s" {} "pr22374.so" ] \ 493] 494 495# The next test checks that copy relocs are not used unnecessarily, 496# but that is just an optimization so don't complain loudly. 497setup_xfail *-*-* 498clear_xfail alpha-*-* bfin-*-linux* csky-*-* frv-*-* hppa*-*-* i?86-*-* 499clear_xfail ia64-*-* microblaze-*-* powerpc*-*-* x86_64-*-* xtensa-*-* 500run_ld_link_tests { 501 {"pr22374 function pointer initialization" 502 "" "tmpdir/pr22374.so" "" "pr22374a.s" 503 { {readelf {--wide -r --dyn-syms} "pr22374-1.r"} 504 {readelf {--wide -r} "pr22374-2.r"} } 505 "pr22374" } 506} 507 508if { [istarget *-*-linux*] 509 || [istarget *-*-nacl*] 510 || [istarget *-*-gnu*] } { 511 run_ld_link_tests { 512 {"Weak symbols in dynamic objects 1 (support)" 513 "-shared" "" "" {weak-dyn-1a.s} 514 {} 515 "libweakdyn1a.so"} 516 {"Weak symbols in dynamic objects 1 (main test)" 517 "-shared tmpdir/libweakdyn1a.so -Tweak-dyn-1.ld" "" "" {weak-dyn-1b.s} 518 {{readelf {--relocs --wide} weak-dyn-1.rd}} 519 "libweakdyn1b.so"} 520 } 521} 522 523# Check to see if the C compiler works 524if { ![check_compiler_available] } { 525 return 526} 527 528# Add -ldl to extralibs if needed 529set extralibs "" 530if { ![istarget *-*-freebsd*]} { 531 set extralibs "-ldl" 532} 533 534set build_tests { 535 {"Build libfoo.so" 536 "-shared" "-fPIC" 537 {foo.c} {} "libfoo.so"} 538 {"Build versioned libfoo.so" 539 "-shared -Wl,--version-script=foo.map" "-fPIC" 540 {foo.c} {} "libfoov.so"} 541 {"Build libbar.so" 542 "-shared" "-fPIC" 543 {begin.c end.c} {} "libbar.so"} 544 {"Build warn libbar.so" 545 "-shared" "-fPIC" 546 {beginwarn.c end.c} 547 {{readelf {-S --wide} libbarw.rd} 548 {warning "^.*beginwarn.c:7: warning: function foo is deprecated\n?$"}} 549 "libbarw.so" "c"} 550 {"Build hidden libbar.so" 551 "-shared" "-fPIC" 552 {begin.c endhidden.c} {} "libbarh.so"} 553 {"Build protected libbar.so" 554 "-shared" "-fPIC" 555 {begin.c endprotected.c} {} "libbarp.so"} 556 {"Build libbar.so with libfoo.so" 557 "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC" 558 {end.c} {} "libbarfoo.so"} 559 {"Build libar.so with versioned libfoo.so" 560 "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC" 561 {end.c} {} "libbarfoov.so"} 562 {"Build hidden libbar.so with libfoo.so" 563 "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC" 564 {endhidden.c} {} "libbarhfoo.so"} 565 {"Build hidden libar.so with versioned libfoo.so" 566 "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC" 567 {endhidden.c} {} "libbarhfoov.so"} 568 {"Build protected libbar.so with libfoo.so" 569 "-shared tmpdir/begin.o tmpdir/libfoo.so" "-fPIC" 570 {endprotected.c} {} "libbarpfoo.so"} 571 {"Build protected libbar.so with versioned libfoo.so" 572 "-shared tmpdir/begin.o tmpdir/libfoov.so" "-fPIC" 573 {endprotected.c} {} "libbarpfoov.so"} 574 {"Build libdl1.so" 575 "-shared" "-fPIC" 576 {dl1.c} {} "libdl1.so"} 577 {"Build libdl2a.so with --dynamic-list=dl2.list" 578 "-shared -Wl,--dynamic-list=dl2.list" "-fPIC" 579 {dl2.c dl2xxx.c} {} "libdl2a.so"} 580 {"Build libdl2a.so with --dynamic-list=dl2a.list" 581 "-shared -Wl,--dynamic-list=dl2a.list" "-fPIC" 582 {dl2.c dl2xxx.c} {} "libdl2a.so"} 583 {"Build libdl2a.so with --dynamic-list-data" 584 "-shared -Wl,--dynamic-list-data" "-fPIC" 585 {dl2.c dl2xxx.c} {} "libdl2a.so"} 586 {"Build libdl2b.so with --dynamic-list=dl2.list and dl2xxx.list" 587 "-shared -Wl,--dynamic-list=dl2.list,--dynamic-list=dl2xxx.list" "-fPIC" 588 {dl2.c dl2xxx.c} {} "libdl2b.so"} 589 {"Build libdl2c.so with --dynamic-list-data and dl2xxx.list" 590 "-shared -Wl,--dynamic-list-data,--dynamic-list=dl2xxx.list" "-fPIC" 591 {dl2.c dl2xxx.c} {} "libdl2c.so"} 592 {"Build libdl2d.so with --dynamic-list-data -Bsymbolic" 593 "-shared -Wl,-Bsymbolic,--dynamic-list-data" "-fPIC" 594 {dl2.c dl2xxx.c} {} "libdl2d.so"} 595 {"Build libdl2e.so with --export-dynamic-symbol=foo" 596 "-shared -Wl,--export-dynamic-symbol=foo" "-fPIC" 597 {dl2.c dl2xxx.c} {} "libdl2e.so"} 598 {"Build libdl2f.so with --dynamic-list=dlempty.list and --export-dynamic-symbol=foo" 599 "-shared -Wl,--dynamic-list=dlempty.list,--export-dynamic-symbol=foo" "-fPIC" 600 {dl2.c dl2xxx.c} {} "libdl2f.so"} 601 {"Build libdl2g.so with --export-dynamic-symbol-list=dl2.list" 602 "-shared -Wl,--export-dynamic-symbol-list=dl2.list" "-fPIC" 603 {dl2.c dl2xxx.c} {} "libdl2g.so"} 604 {"Build libdl2h.so with --dynamic-list=dlempty.list and --export-dynamic-symbol-list=dl2.list" 605 "-shared -Wl,--dynamic-list=dlempty.list,--export-dynamic-symbol-list=dl2.list" "-fPIC" 606 {dl2.c dl2xxx.c} {} "libdl2h.so"} 607 {"Build libdl2i.so with -Bsymbolic and --export-dynamic-symbol=foo" 608 "-shared -Wl,-Bsymbolic,--export-dynamic-symbol=foo" "-fPIC" 609 {dl2.c dl2xxx.c} {} "libdl2i.so"} 610 {"Build libdl2j.so with -Bsymbolic and --export-dynamic-symbol-list=dl2.list" 611 "-shared -Wl,-Bsymbolic,--export-dynamic-symbol-list=dl2.list" "-fPIC" 612 {dl2.c dl2xxx.c} {} "libdl2j.so"} 613 {"Build libdl2k.so with --export-dynamic-symbol-list=dl2.list and -Bsymbolic" 614 "-shared -Wl,--export-dynamic-symbol-list=dl2.list,-Bsymbolic" "-fPIC" 615 {dl2.c dl2xxx.c} {} "libdl2k.so"} 616 {"Build libdl4a.so with --dynamic-list=dl4.list" 617 "-shared -Wl,--dynamic-list=dl4.list" "-fPIC" 618 {dl4.c dl4xxx.c} {} "libdl4a.so"} 619 {"Build libdl4b.so with --dynamic-list-data" 620 "-shared -Wl,--dynamic-list-data" "-fPIC" 621 {dl4.c dl4xxx.c} {} "libdl4b.so"} 622 {"Build libdl4c.so with --dynamic-list=dl4.list and dl4xxx.list" 623 "-shared -Wl,--dynamic-list=dl4.list,--dynamic-list=dl4xxx.list" "-fPIC" 624 {dl4.c dl4xxx.c} {} "libdl4c.so"} 625 {"Build libdl4d.so with --dynamic-list-data and dl4xxx.list" 626 "-shared -Wl,--dynamic-list-data,--dynamic-list=dl4xxx.list" "-fPIC" 627 {dl4.c dl4xxx.c} {} "libdl4d.so"} 628 {"Build libdl4e.so with -Bsymbolic-functions --dynamic-list-cpp-new" 629 "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC" 630 {dl4.c dl4xxx.c} {} "libdl4e.so"} 631 {"Build libdl4f.so with --dynamic-list-cpp-new -Bsymbolic-functions" 632 "-shared -Wl,--dynamic-list-cpp-new,-Bsymbolic-functions" "-fPIC" 633 {dl4.c dl4xxx.c} {} "libdl4f.so"} 634 {"Build libdl6a.so" 635 "-shared" "-fPIC" 636 {dl6.c} {} "libdl6a.so"} 637 {"Build libdl6b.so with -Bsymbolic --dynamic-list-data" 638 "-shared -Wl,-Bsymbolic,--dynamic-list-data" "-fPIC" 639 {dl6.c} {} "libdl6b.so"} 640 {"Build libdl6c.so with -Bsymbolic" 641 "-shared -Wl,-Bsymbolic" "-fPIC" 642 {dl6.c} {} "libdl6c.so"} 643 {"Build libdl6d.so with --dynamic-list-data -Bsymbolic" 644 "-shared -Wl,--dynamic-list-data,-Bsymbolic" "-fPIC" 645 {dl6.c} {} "libdl6d.so"} 646 {"Build libdata1.so" 647 "-shared" "-fPIC" 648 {data1.c} {} "libdata1.so"} 649 {"Build libdata2.so" 650 "-shared" "-fPIC" 651 {data2.c} {} "libdata2.so"} 652 {"Build libcomm1.o" 653 "-r -nostdlib" "-fcommon" 654 {comm1.c} {} "libcomm1.o"} 655 {"Build libfunc1.so" 656 "-shared" "-fPIC" 657 {func1.c} {} "libfunc1.so"} 658 {"Build libpr9676-1.a" 659 "" "-fPIC" 660 {pr9676-1.c} {} "libpr9676-1.a"} 661 {"Build libpr9676-2.a" 662 "" "-fPIC" 663 {pr9676-2.c} {} "libpr9676-2.a"} 664 {"Build libpr9676-3.so" 665 "-shared" "-fPIC" 666 {pr9676-3.c} {} "libpr9676-3.so"} 667 {"Build libpr9676-4.so" 668 "-shared" "-fPIC" 669 {pr9676-4.c} {} "libpr9676-4.so"} 670 {"Build libpr9676-4a.so" 671 "-shared tmpdir/pr9676-4.o -Ltmpdir -lpr9676-3 -Wl,--start-group -lpr9676-1 -lpr9676-2 -Wl,--end-group" 672 "-fPIC" 673 {dummy.c} {{readelf {-s} pr9676.rd}} "libpr9676-4a.so"} 674 {"Build libpr9679.so" 675 "-shared" "-fPIC -O0" 676 {pr9679-1.c pr9679-2.c} {{readelf {-s} pr9679.rd}} "libpr9679.so"} 677 {"Build libpr11138-1.so" 678 "-shared -Wl,--version-script=pr11138-1.map" "-fPIC" 679 {pr11138-1.c} {} "libpr11138-1.so"} 680 {"Build libpr11138-2.o" 681 "-r -nostdlib" "" 682 {pr11138-2.c} {} "libpr11138-2.o"} 683 {"Build pr13250-1.so" 684 "-shared" "-fPIC -fcommon" 685 {pr13250-1.c} {} "libpr13250-1.so"} 686 {"Build pr13250-2.so with libpr13250-1.so" 687 "-shared -Wl,--no-as-needed tmpdir/libpr13250-1.so" "-fPIC -fcommon" 688 {pr13250-2.c} {} "libpr13250-2.so"} 689 {"Build libpr13250-3.o" 690 "-r -nostdlib" "-fcommon" 691 {pr13250-3.c} {} "libpr13250-3.o"} 692 {"Build libpr14323-2.so" 693 "-shared" "-fPIC -fcommon" 694 {pr14323-2.c} {} "libpr14323-2.so"} 695 {"Build pr14862-1.o" 696 "-r -nostdlib" "" 697 {pr14862-1.c} {} "libpr14862-1.o"} 698 {"Build libpr14862.so" 699 "-shared -Wl,--version-script=pr11138-1.map" "-fPIC" 700 {pr14862-2.c} {} "libpr14862.so"} 701 {"Build libneeded1b.so" 702 "-shared" "-fPIC" 703 {needed1b.c} {} "libneeded1b.so"} 704 {"Build libneeded1a.so" 705 "-shared -Wl,--add-needed,--no-as-needed -Ltmpdir -lneeded1b" "-fPIC" 706 {needed1a.c} {} "libneeded1a.so"} 707 {"Build libneeded1c.o" 708 "-r -nostdlib" "" 709 {needed1c.c} {} "libneeded1c.o"} 710 {"Build libneeded1pic.o" 711 "-r -nostdlib" "-fPIC" 712 {needed1c.c} {} "libneeded1pic.o"} 713 {"Build needed1a.so with --add-needed" 714 "-shared tmpdir/libneeded1pic.o -Wl,--no-as-needed,--add-needed,-rpath=tmpdir,-rpath-link=tmpdir,-z,defs -Ltmpdir -lneeded1a" "" 715 {dummy.c} {} "needed1a.so"} 716 {"Build needed1b.so with --copy-dt-needed-entries" 717 "-shared tmpdir/libneeded1pic.o -Wl,--no-as-needed,--copy-dt-needed-entries,-rpath=tmpdir,-rpath-link=tmpdir,-z,defs -Ltmpdir -lneeded1a" "" 718 {dummy.c} {} "needed1b.so"} 719 {"Build needed1a.so with --no-add-needed" 720 "-shared tmpdir/libneeded1pic.o -Wl,--no-as-needed,--no-add-needed -Ltmpdir -lneeded1a" "" 721 {dummy.c} {} "needed1c.so"} 722 {"Build needed1b.so with --no-copy-dt-needed-entries" 723 "-shared tmpdir/libneeded1pic.o -Wl,--no-as-needed,--no-copy-dt-needed-entries -Ltmpdir -lneeded1a" "" 724 {dummy.c} {} "needed1d.so"} 725 {"Build librel.so" 726 "-shared" "-fPIC" 727 {rel.c} {} "librel.so"} 728 {"Build libneeded2a.so" 729 "-shared" "-fPIC" 730 {needed2a.c} {} "libneeded2a.so"} 731 {"Build libneeded2b.so" 732 "-shared -Wl,--version-script,needed2.ver" "-fPIC" 733 {needed2b.c} {} "libneeded2b.so"} 734 {"Build libneeded2c.o" 735 "-r -nostdlib" "" 736 {needed2c.c} {} "libneeded2c.o"} 737 {"Build needed2" 738 "tmpdir/libneeded2c.o -Wl,--as-needed tmpdir/libneeded2a.so tmpdir/libneeded2b.so" "" 739 {dummy.c} {} "needed2"} 740 {"Build libneeded3a.so" 741 "-shared -Wl,--no-add-needed" "-fPIC" 742 {needed1a.c} {} "libneeded3a.so"} 743 {"Build libneeded3b.so" 744 "-shared -Wl,--no-as-needed,--add-needed -Ltmpdir -lneeded1b" "-fPIC" 745 {dummy.c} {} "libneeded3b.so"} 746 {"Build needed3.o" 747 "-r -nostdlib" "" 748 {needed3.c} {} "libneeded3.so"} 749 {"Build needed3" 750 "tmpdir/needed3.o -Wl,--as-needed -Ltmpdir -lneeded3a -lneeded3b -lneeded1b" "" 751 {dummy.c} {} "needed3"} 752 {"Build rdynamic-1" 753 "-Wl,--no-dynamic-linker,-export-dynamic,--gc-sections" "-ffunction-sections" 754 {rdynamic-1.c} {{readelf {-s} rdynamic-1.rd}} "rdynamic-1"} 755 {"Build dynamic-1" 756 "-Wl,--no-dynamic-linker,--dynamic-list,dynamic-1.syms -Wl,--gc-sections" "-ffunction-sections" 757 {dynamic-1.c} {{readelf {-s} dynamic-1.rd}} "dynamic-1"} 758 {"Build libpr16496a.so" 759 "-shared -Wl,--version-script=pr16496a.map" "-fPIC" 760 {pr16496a.c} {} "libpr16496a.so"} 761 {"Build libpr16496b.a" 762 "" "-fPIC" 763 {pr16496b.c} {} "libpr16496b.a"} 764 {"Build libpr16496b.so" 765 "-shared -Wl,--no-as-needed tmpdir/pr16496b.o tmpdir/libpr16496a.so" "" 766 {dummy.c} {{objdump {-R} pr16496b.od}} "libpr16496b.so"} 767 {"Build libpr16452a.so" 768 "-shared -Wl,-soname,libpr16452a.so,--version-script=pr16452.map" "-fPIC" 769 {pr16452a.c} {} "libpr16452a.so"} 770 {"Build libpr16452b.so" 771 "-shared -Wl,-soname,libpr16452b.so,--no-as-needed tmpdir/libpr16452a.so" "-fPIC" 772 {dummy.c} {} "libpr16452b.so"} 773 {"Build pr16452" 774 "-Wl,--no-as-needed,-rpath=tmpdir,-rpath-link=tmpdir tmpdir/libpr16452b.so" "" 775 {pr16452b.c} {{objdump {-p} pr16452.od}} "pr16452"} 776 {"Build pr16457" 777 "-Wl,--no-as-needed,-rpath=tmpdir,-rpath-link=tmpdir tmpdir/libpr16452b.so" "" 778 {pr16452b.c} {{objdump {-p} pr16457.od}} "pr16457"} 779 {"Build libpr18458a.so" 780 "-shared -Wl,-z,now" "-fPIC" 781 {pr18458a.c} {} "libpr18458a.so"} 782 {"Build libpr18458b.so" 783 "-shared -Wl,-z,now tmpdir/libpr18458a.so" "-fPIC" 784 {pr18458b.c} {} "libpr18458b.so"} 785} 786 787run_cc_link_tests [list \ 788 [list \ 789 "Build libpr2404a.so" \ 790 "-shared $NOSANITIZE_CFLAGS" \ 791 "-fPIC $NOSANITIZE_CFLAGS" \ 792 {pr2404a.c} \ 793 {} \ 794 "libpr2404a.so" \ 795 ] \ 796 [list \ 797 "Build libpr2404n.so" \ 798 "-shared -Wl,-z,now $NOSANITIZE_CFLAGS" \ 799 "-fPIC $NOSANITIZE_CFLAGS" \ 800 {pr2404a.c} \ 801 {} \ 802 "libpr2404n.so" \ 803 ] \ 804 [list \ 805 "Build libpr2404b.a" \ 806 "" \ 807 "$NOSANITIZE_CFLAGS" \ 808 {pr2404b.c} \ 809 {} \ 810 "libpr2404b.a" \ 811 ] \ 812 [list \ 813 "Build libpr26590a.so" \ 814 "-shared" \ 815 "-fPIC" \ 816 {pr26590a.c} \ 817 {} \ 818 "libpr26590a.so" \ 819 ] \ 820 [list \ 821 "Build libpr26590b.so (1)" \ 822 "-shared" \ 823 "-fPIC" \ 824 {pr26590b.c} \ 825 {} \ 826 "libpr26590b.so" \ 827 ] \ 828 [list \ 829 "Build pr26590c.o and pr26590d.o" \ 830 "" \ 831 "" \ 832 {pr26590c.c pr26590d.c} \ 833 {} \ 834 ] \ 835 [list \ 836 "Build pr26590 (1)" \ 837 "tmpdir/pr26590c.o tmpdir/pr26590d.o \ 838 -Wl,--as-needed tmpdir/libpr26590a.so tmpdir/libpr26590b.so" \ 839 "" \ 840 {dummy.c} \ 841 {{error_output pr26590.err}} \ 842 "pr26590" \ 843 ] \ 844 [list \ 845 "Build libpr26590b.so (2)" \ 846 "-shared -Wl,--no-as-needed \ 847 tmpdir/libpr26590a.so" \ 848 "-fPIC" \ 849 {pr26590b.c} \ 850 {} \ 851 "libpr26590b.so" \ 852 ] \ 853 [list \ 854 "Build pr26590 (2)" \ 855 "tmpdir/pr26590c.o tmpdir/pr26590d.o \ 856 -Wl,--as-needed tmpdir/libpr26590a.so tmpdir/libpr26590b.so" \ 857 "" \ 858 {dummy.c} \ 859 {} \ 860 "pr26590" \ 861 ] \ 862] 863 864# pr19073.s uses .set, which has a different meaning on alpha. 865if { ![istarget alpha-*-*] } { 866 append build_tests { 867 {"Build pr19073a.o" 868 "-r -nostdlib" "" 869 {pr19073.s} {} "pr19073a.o"} 870 {"Build libpr19073.so" 871 "-shared -Wl,--version-script=pr19073.map tmpdir/pr19073a.o" "-fPIC" 872 {dummy.c} {{readelf {--dyn-syms --wide} pr19073.rd}} "libpr19073.so"} 873 } 874} 875append build_tests { 876 {"Build pr21964-1a.so" 877 "-shared" "-fPIC" 878 {pr21964-1a.c} {} "pr21964-1a.so"} 879 {"Build pr21964-1b.so" 880 "-shared" "-fPIC" 881 {pr21964-1b.c} {} "pr21964-1b.so"} 882 {"Build pr21964-2a.so" 883 "-shared" "-fPIC" 884 {pr21964-2a.c} {} "pr21964-2a.so"} 885 {"Build pr21964-2b.so" 886 "-shared" "-fPIC" 887 {pr21964-2b.c} {} "pr21964-2b.so"} 888 {"Build pr21964-3a.so" 889 "-shared" "-fPIC" 890 {pr21964-3a.c} {} "pr21964-3a.so"} 891 {"Dump pr21978.so" 892 "-shared" "-fPIC -g -O2" 893 {pr21978a.c pr21978b.c} {{objdump {-Sl} pr21978.od}} "pr21978.so"} 894 {"libpr26580-2.so" 895 "-shared" "-fPIC -fcommon" 896 {pr26580-b.c} {} "libpr26580-2.so"} 897} 898 899run_cc_link_tests $build_tests 900 901run_cc_link_tests [list \ 902 [list \ 903 "Build pr26094-1.so" \ 904 "-shared -Wl,--version-script=pr26094-1.ver" \ 905 "-fPIC" \ 906 {pr26094-1a.c} \ 907 {{readelf {--dyn-syms --wide} pr26094-1a.rd}} \ 908 "pr26094-1.so" \ 909 ] \ 910 [list \ 911 "Build pr26094-1" \ 912 "-Wl,--no-as-needed tmpdir/pr26094-1.so" \ 913 "-fcommon" \ 914 {pr26094-1b.c pr26094-1c.c} \ 915 {{readelf {--dyn-syms --wide} pr26094-1b.rd}} \ 916 "pr26094-1" \ 917 ] \ 918 [list \ 919 "Build pr26302a.so" \ 920 "-shared -Wl,--version-script=pr26302.ver" \ 921 "-fPIC" \ 922 {pr26302a.c} \ 923 {} \ 924 "pr26302a.so" 925 ] \ 926 [list \ 927 "Build pr26302b.so" \ 928 "-shared -Wl,--no-as-needed tmpdir/pr26302a.so" \ 929 "-fPIC" \ 930 {pr26302b.c} \ 931 {{readelf {-sW} pr26302.rd} \ 932 {nm {-u} pr26302.nd} \ 933 {nm {-u -D} pr26302.nd} \ 934 {nm {-u -D --with-symbol-versions} pr26302.nd}} \ 935 "pr26302b.so" \ 936 ] \ 937] 938 939run_ld_link_tests [list \ 940 [list \ 941 "pr22269-1 (static pie undefined weak)" \ 942 "-pie -e _start --no-dynamic-linker -z text -z nocombreloc " \ 943 "" \ 944 "$AFLAGS_PIC" \ 945 { pr22269-1.c } \ 946 {{readelf -rW pr22269-1.rd}} \ 947 "pr22269-1" \ 948 "-fPIE -O2 $NOSANITIZE_CFLAGS" \ 949 ] \ 950] 951 952set run_tests [list \ 953 [list "Run normal with libfoo.so" \ 954 "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "" \ 955 {main.c} "normal" "normal.out" ] \ 956 [list "Run protected with libfoo.so" \ 957 "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" "" \ 958 {main.c} "protected" "normal.out" ] \ 959 [list "Run hidden with libfoo.so" \ 960 "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" "" \ 961 {main.c} "hidden" "hidden.out" ] \ 962 [list "Run normal with versioned libfoo.so" \ 963 "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" "" \ 964 {main.c} "normalv" "normal.out" ] \ 965 [list "Run warn with versioned libfoo.so" \ 966 "-Wl,--no-as-needed tmpdir/beginwarn.o tmpdir/libfoov.so" "" \ 967 {main.c} "warn" "warn.out" \ 968 "" "c" {^.*beginwarn.c:7: warning: function foo is deprecated\n?$} ] \ 969 [list "Run protected with versioned libfoo.so" \ 970 "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" "" \ 971 {main.c} "protected" "normal.out" ] \ 972 [list "Run hidden with versioned libfoo.so" \ 973 "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" "" \ 974 {main.c} "hiddenv" "hidden.out" ] \ 975 [list "Run normal libbar.so with libfoo.so" \ 976 "-Wl,--no-as-needed tmpdir/libbarfoo.so tmpdir/libfoo.so" "" \ 977 {main.c} "normal" "normal.out" ] \ 978 [list "Run protected libbar.so with libfoo.so" \ 979 "-Wl,--no-as-needed tmpdir/libbarpfoo.so tmpdir/libfoo.so" "" \ 980 {main.c} "protected" "normal.out" ] \ 981 [list "Run hidden libbar.so with libfoo.so" \ 982 "-Wl,--no-as-needed tmpdir/libbarhfoo.so tmpdir/libfoo.so" "" \ 983 {main.c} "hidden" "hidden.out" ] \ 984 [list "Run normal libbar.so with versioned libfoo.so" \ 985 "-Wl,--no-as-needed tmpdir/libbarfoov.so tmpdir/libfoov.so" "" \ 986 {main.c} "normal" "normal.out" ] \ 987 [list "Run protected libbar.so with versioned libfoo.so" \ 988 "-Wl,--no-as-needed tmpdir/libbarpfoov.so tmpdir/libfoov.so" "" \ 989 {main.c} "protected" "normal.out" ] \ 990 [list "Run hidden libbar.so with versioned libfoo.so" \ 991 "-Wl,--no-as-needed tmpdir/libbarhfoov.so tmpdir/libfoov.so" "" \ 992 {main.c} "hidden" "hidden.out" ] \ 993 [list "Run with libdl2a.so" \ 994 "-Wl,--no-as-needed tmpdir/libdl2a.so" "" \ 995 {dl2main.c} "dl2a" "dl2a.out" ] \ 996 [list "Run with libdl2b.so" \ 997 "-Wl,--no-as-needed tmpdir/libdl2b.so" "" \ 998 {dl2main.c} "dl2b" "dl2b.out" ] \ 999 [list "Run with libdl2c.so" \ 1000 "-Wl,--no-as-needed tmpdir/libdl2c.so" "" \ 1001 {dl2main.c} "dl2c" "dl2b.out" ] \ 1002 [list "Run with libdl2d.so" \ 1003 "-Wl,--no-as-needed tmpdir/libdl2d.so" "" \ 1004 {dl2main.c} "dl2d" "dl2a.out" ] \ 1005 [list "Run with libdl2e.so" \ 1006 "-Wl,--no-as-needed tmpdir/libdl2e.so" "" \ 1007 {dl2main.c} "dl2e" "dl2b.out" ] \ 1008 [list "Run with libdl2f.so" \ 1009 "-Wl,--no-as-needed tmpdir/libdl2f.so" "" \ 1010 {dl2main.c} "dl2f" "dl2a.out" ] \ 1011 [list "Run with libdl2g.so" \ 1012 "-Wl,--no-as-needed tmpdir/libdl2g.so" "" \ 1013 {dl2main.c} "dl2g" "dl2b.out" ] \ 1014 [list "Run with libdl2h.so" \ 1015 "-Wl,--no-as-needed tmpdir/libdl2h.so" "" \ 1016 {dl2main.c} "dl2h" "dl2a.out" ] \ 1017 [list "Run with libdl2i.so" \ 1018 "-Wl,--no-as-needed tmpdir/libdl2i.so" "" \ 1019 {dl2main.c} "dl2i" "dl2a.out" ] \ 1020 [list "Run with libdl2j.so" \ 1021 "-Wl,--no-as-needed tmpdir/libdl2j.so" "" \ 1022 {dl2main.c} "dl2j" "dl2a.out" ] \ 1023 [list "Run with libdl2k.so" \ 1024 "-Wl,--no-as-needed tmpdir/libdl2k.so" "" \ 1025 {dl2main.c} "dl2k" "dl2a.out" ] \ 1026 [list "Run with libdl4a.so" \ 1027 "-Wl,--no-as-needed tmpdir/libdl4a.so" "" \ 1028 {dl4main.c} "dl4a" "dl4a.out" "-fPIC"] \ 1029 [list "Run with libdl4b.so" \ 1030 "-Wl,--no-as-needed tmpdir/libdl4b.so" "" \ 1031 {dl4main.c} "dl4b" "dl4a.out" "-fPIC"] \ 1032 [list "Run with libdl4c.so" \ 1033 "-Wl,--no-as-needed tmpdir/libdl4c.so" "" \ 1034 {dl4main.c} "dl4c" "dl4b.out" "-fPIC"] \ 1035 [list "Run with libdl4d.so" \ 1036 "-Wl,--no-as-needed tmpdir/libdl4d.so" "" \ 1037 {dl4main.c} "dl4d" "dl4b.out" "-fPIC"] \ 1038 [list "Run with libdl4e.so" \ 1039 "-Wl,--no-as-needed tmpdir/libdl4e.so" "" \ 1040 {dl4main.c} "dl4e" "dl4a.out" "-fPIC"] \ 1041 [list "Run with libdl4f.so" \ 1042 "-Wl,--no-as-needed tmpdir/libdl4f.so" "" \ 1043 {dl4main.c} "dl4f" "dl4a.out" "-fPIC"] \ 1044 [list "Run with libdata1.so" \ 1045 "-Wl,--no-as-needed tmpdir/libdata1.so" "" \ 1046 {dynbss1.c} "dynbss1" "pass.out" ] \ 1047 [list "Run with libdata2.so" \ 1048 "-Wl,--no-as-needed tmpdir/libdata2.so" "" \ 1049 {weakdef1.c} "weakdef1" "pass.out" ] \ 1050 [list "Run with libfunc1.so comm1.o" \ 1051 "-Wl,--no-as-needed tmpdir/libfunc1.so tmpdir/comm1.o" "" \ 1052 {dummy.c} "comm1" "pass.out" ] \ 1053 [list "Run with comm1.o libfunc1.so" \ 1054 "-Wl,--no-as-needed tmpdir/comm1.o tmpdir/libfunc1.so" "" \ 1055 {dummy.c} "comm1" "pass.out" ] \ 1056 [list "Run with pr11138-2.c libpr11138-1.so" \ 1057 "-Wl,--no-as-needed,--version-script=pr11138-2.map tmpdir/pr11138-2.o tmpdir/libpr11138-1.so" "" \ 1058 {dummy.c} "pr11138a" "pr11138.out" ] \ 1059 [list "Run with libpr11138-1.so pr11138-2.c" \ 1060 "-Wl,--no-as-needed,--version-script=pr11138-2.map tmpdir/libpr11138-1.so tmpdir/pr11138-2.o" "" \ 1061 {dummy.c} "pr11138b" "pr11138.out" ] \ 1062 [list "Run with pr13250-3.c, libpr13250-1.so and libpr13250-2.so" \ 1063 "-Wl,--as-needed tmpdir/pr13250-3.o tmpdir/libpr13250-1.so tmpdir/libpr13250-2.so" "-fcommon" \ 1064 {dummy.c} "pr13250" "pass.out" ] \ 1065 [list "Run with pr14323-1.c pr14323-2.so" \ 1066 "-Wl,--no-as-needed tmpdir/libpr14323-2.so" "" \ 1067 {pr14323-1.c} "pr14323" "pass.out" ] \ 1068 [list "Run with pr14862-1.c libpr14862.so" \ 1069 "-Wl,--as-needed tmpdir/libpr14862-1.o tmpdir/libpr14862.so" "" \ 1070 {dummy.c} "pr14862" "pr14862.out" ] \ 1071 [list "Link with --add-needed" \ 1072 "tmpdir/libneeded1c.o -Wl,--no-as-needed,--add-needed,-rpath=tmpdir,-rpath-link=tmpdir -Ltmpdir -lneeded1a" "" \ 1073 {dummy.c} "needed1a" "needed1.out" ] \ 1074 [list "Link with --copy-dt-needed-entries" \ 1075 "tmpdir/libneeded1c.o -Wl,--no-as-needed,--copy-dt-needed-entries,-rpath=tmpdir,-rpath-link=tmpdir -Ltmpdir -lneeded1a" "" \ 1076 {dummy.c} "needed1b" "needed1.out" ] \ 1077 [list "Run relmain" \ 1078 "-Wl,--no-as-needed,-rpath=tmpdir -Ltmpdir -lrel" "" \ 1079 {relmain.c} "relmain" "relmain.out" ] \ 1080 [list "Run pr2404" \ 1081 "$NOSANITIZE_CFLAGS -Wl,--no-as-needed \ 1082 tmpdir/pr2404b.o tmpdir/libpr2404a.so" \ 1083 "" \ 1084 {dummy.c} "pr2404" "pr2404.out" \ 1085 "$NOSANITIZE_CFLAGS" ] \ 1086 [list "Run pr2404n" \ 1087 "$NOSANITIZE_CFLAGS -Wl,-z,now \ 1088 -Wl,--no-as-needed tmpdir/pr2404b.o tmpdir/libpr2404n.so" "" \ 1089 {dummy.c} "pr2404n" "pr2404.out" \ 1090 "$NOSANITIZE_CFLAGS" ] \ 1091 [list "Run pr18458" \ 1092 "-Wl,--no-as-needed,-z,now tmpdir/libpr18458a.so tmpdir/libpr18458b.so" "" \ 1093 {pr18458c.c} "pr18458" "pass.out" ] \ 1094 [list "Run pr21964-1" \ 1095 "-Wl,--no-as-needed,-rpath,tmpdir tmpdir/pr21964-1a.so tmpdir/pr21964-1b.so" "" \ 1096 {pr21964-1c.c} "pr21964-1" "pass.out" ] \ 1097 [list "Run pr21964-3" \ 1098 "-Wl,--no-as-needed,-rpath,tmpdir tmpdir/pr21964-1a.so tmpdir/pr21964-1b.so tmpdir/pr21964-3a.so" "" \ 1099 {pr21964-3c.c} "pr21964-3" "pass.out" ] \ 1100 [list "pr26580-3" \ 1101 "" "" \ 1102 {pr26580-a.c} "pr26580-3" "pr26580-3.out" "-fcommon" "c" "" \ 1103 "-Wl,--as-needed tmpdir/libpr26580-2.so" ] \ 1104 [list "pr26580-4" \ 1105 "" "" \ 1106 {pr26580-a.c} "pr26580-4" "pr26580-4.out" "-fcommon" "c" "" \ 1107 "-Wl,--no-as-needed tmpdir/libpr26580-2.so" ] \ 1108 [list "Run pr26590 (2)" \ 1109 "" "" \ 1110 {pr26590c.c pr26590d.c} "pr26590" "pass.out" "" "c" "" \ 1111 "-Wl,--as-needed tmpdir/libpr26590a.so tmpdir/libpr26590b.so" ] \ 1112] 1113 1114# NetBSD ELF systems do not currently support the .*_array sections. 1115run_ld_link_exec_tests $run_tests "*-*-netbsdelf*" 1116 1117# These tests require dlopen support. 1118set dlopen_run_tests [list \ 1119 [list "Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so" \ 1120 "-Wl,--no-as-needed,--dynamic-list=dl1.list $extralibs" "" \ 1121 {dl1main.c} "dl1a" "dl1.out" ] \ 1122 [list "Run dl1b with --dynamic-list-data and dlopen on libdl1.so" \ 1123 "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \ 1124 {dl1main.c} "dl1b" "dl1.out" ] \ 1125 [list "Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so" \ 1126 "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \ 1127 {dl6amain.c} "dl6a1" "dl6a.out" ] \ 1128 [list "Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so" \ 1129 "$NOPIE_LDFLAGS -Wl,--no-as-needed,-Bsymbolic-functions $extralibs" "" \ 1130 {dl6amain.c} "dl6a2" "dl6b.out" "$NOPIE_CFLAGS" ] \ 1131 [list "Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so" \ 1132 "-Wl,--no-as-needed,-Bsymbolic $extralibs" "" \ 1133 {dl6amain.c} "dl6a3" "dl6b.out" ] \ 1134 [list "Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so" \ 1135 "-Wl,--no-as-needed,-Bsymbolic,--dynamic-list-data $extralibs" "" \ 1136 {dl6amain.c} "dl6a4" "dl6a.out" ] \ 1137 [list "Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so" \ 1138 "$NOPIE_LDFLAGS -Wl,--no-as-needed,-Bsymbolic-functions,--dynamic-list-cpp-new $extralibs" "" \ 1139 {dl6amain.c} "dl6a5" "dl6b.out" "$NOPIE_CFLAGS" ] \ 1140 [list "Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so" \ 1141 "$NOPIE_LDFLAGS -Wl,--no-as-needed,--dynamic-list-cpp-new,-Bsymbolic-functions $extralibs" "" \ 1142 {dl6amain.c} "dl6a6" "dl6b.out" "$NOPIE_CFLAGS" ] \ 1143 [list "Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so" \ 1144 "$NOPIE_LDFLAGS -Wl,--no-as-needed,--dynamic-list-data,-Bsymbolic $extralibs" "" \ 1145 {dl6amain.c} "dl6a7" "dl6a.out" "$NOPIE_CFLAGS" ] \ 1146 [list "Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so" \ 1147 "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \ 1148 {dl6bmain.c} "dl6b1" "dl6a.out" ] \ 1149 [list "Run dl6b2 with dlopen on libdl6b.so" \ 1150 "-Wl,--no-as-needed $extralibs" "" \ 1151 {dl6bmain.c} "dl6b2" "dl6b.out" ] \ 1152 [list "Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so" \ 1153 "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \ 1154 {dl6cmain.c} "dl6c1" "dl6b.out" ] \ 1155 [list "Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so" \ 1156 "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \ 1157 {dl6dmain.c} "dl6d1" "dl6a.out" ] \ 1158 [list "Run pr21964-2" \ 1159 "-Wl,--no-as-needed,-rpath,tmpdir tmpdir/pr21964-2a.so $extralibs" "" \ 1160 {pr21964-2c.c} "pr21964-2" "pass.out" ] \ 1161 [list "Run pr21964-5" \ 1162 "-Wl,--no-as-needed,-rpath,tmpdir tmpdir/pr21964-1a.so $extralibs" "" \ 1163 {pr21964-5.c} "pr21964-5" "pass.out" ] \ 1164] 1165 1166# Only run them when libdl is available. 1167if [check_libdl_available] { 1168 # XFAIL on NetBSD ELF systems as they do not currently support the .*_array 1169 # sections. 1170 # Disable all sanitizers. 1171 set old_CFLAGS "$CFLAGS" 1172 append CFLAGS " $NOSANITIZE_CFLAGS" 1173 run_ld_link_exec_tests $dlopen_run_tests "*-*-netbsdelf*" 1174 set CFLAGS "$old_CFLAGS" 1175} 1176 1177# Check --no-add-needed and --no-copy-dt-needed-entries 1178set testname "--no-add-needed" 1179set exec_output [run_host_cmd "$CC" "tmpdir/libneeded1c.o -Wl,--no-add-needed,-rpath-link=tmpdir -Ltmpdir -lneeded1a"] 1180if { [ regexp "tmpdir/libneeded1b.so: .*: DSO missing" $exec_output ] } { 1181 pass $testname 1182} { 1183 fail $testname 1184} 1185set testname "--no-copy-dt-needed-entries" 1186set exec_output [run_host_cmd "$CC" "tmpdir/libneeded1c.o -Wl,--no-copy-dt-needed-entries,-rpath-link=tmpdir -Ltmpdir -lneeded1a"] 1187if { [ regexp "tmpdir/libneeded1b.so: .*: DSO missing" $exec_output ] } { 1188 pass $testname 1189} { 1190 fail $testname 1191} 1192set testname "--no-add-needed -shared" 1193set exec_output [run_host_cmd "$CC" "-shared tmpdir/libneeded1pic.o -Wl,--no-add-needed,-z,defs -Ltmpdir -lneeded1a"] 1194if { [ regexp "undefined reference to `\.?bar'" $exec_output ] } { 1195 pass $testname 1196} { 1197 fail $testname 1198} 1199set testname "--no-copy-dt-needed-entries -shared" 1200set exec_output [run_host_cmd "$CC" "-shared tmpdir/libneeded1pic.o -Wl,--no-copy-dt-needed-entries,-z,defs -Ltmpdir -lneeded1a"] 1201if { [ regexp "undefined reference to `\.?bar'" $exec_output ] } { 1202 pass $testname 1203} { 1204 fail $testname 1205} 1206 1207# Check to see if the C++ compiler works 1208if { [which $CXX] == 0 } { 1209 return 1210} 1211 1212set build_cxx_tests { 1213 {"Build libdl3a.so with --dynamic-list=dl3.list" 1214 "-shared -Wl,--dynamic-list=dl3.list" "-fPIC" 1215 {dl3.cc} {} "libdl3a.so" "c++"} 1216 {"Build libdl3b.so with -Bsymbolic" 1217 "-shared -Wl,-Bsymbolic" "-fPIC" 1218 {dl3.cc} {} "libdl3b.so" "c++"} 1219 {"Build libdl3a.so with --dynamic-list-cpp-typeinfo" 1220 "-shared -Wl,--dynamic-list-cpp-typeinfo" "-fPIC" 1221 {dl3.cc} {} "libdl3c.so" "c++"} 1222} 1223 1224run_cc_link_tests [list \ 1225 [list \ 1226 "Build libdnew1a.so with --Bsymbolic-functions --dynamic-list-cpp-new" \ 1227 "-shared $NOSANITIZE_CFLAGS -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" \ 1228 "-fPIC -ansi $NOSANITIZE_CFLAGS" \ 1229 {del.cc new.cc} \ 1230 {} \ 1231 "libnew1a.so" \ 1232 "c++" \ 1233 ] \ 1234 [list \ 1235 "Build libdnew1b.so with --dynamic-list-data --dynamic-list-cpp-new" \ 1236 "-shared $NOSANITIZE_CFLAGS -Wl,--dynamic-list-data,--dynamic-list-cpp-new" \ 1237 "-fPIC -ansi $NOSANITIZE_CFLAGS" \ 1238 {del.cc new.cc} \ 1239 {} \ 1240 "libnew1b.so" \ 1241 "c++" \ 1242 ] \ 1243] 1244 1245# "-shared -Bsymbolic" only works with gcc 4.5.0 and newer. 1246# {"Run with libdl3b.so" 1247# "tmpdir/libdl3b.so" "" 1248# {dl3main.cc} "dl3b" "dl3b.out" "" "c++"} 1249set run_cxx_tests { 1250 {"Run with libdl3a.so" 1251 "-Wl,--no-as-needed tmpdir/libdl3a.so" "" 1252 {dl3main.cc} "dl3a" "dl3a.out" "" "c++"} 1253 {"Run with libdl3c.so" 1254 "-Wl,--no-as-needed tmpdir/libdl3c.so" "" 1255 {dl3main.cc} "dl3c" "dl3a.out" "" "c++"} 1256} 1257 1258run_ld_link_exec_tests [list \ 1259 [list \ 1260 "Run with libnew1a.so" \ 1261 "-Wl,--no-as-needed tmpdir/libnew1a.so $NOSANITIZE_CFLAGS" \ 1262 "" \ 1263 {dl5.cc} \ 1264 "dl5a" \ 1265 "dl5.out" \ 1266 "-ansi $NOSANITIZE_CFLAGS" \ 1267 "c++" \ 1268 ] \ 1269 [list \ 1270 "Run with libnew1b.so" \ 1271 "-Wl,--no-as-needed tmpdir/libnew1b.so $NOSANITIZE_CFLAGS" \ 1272 "" \ 1273 {dl5.cc} \ 1274 "dl5b" \ 1275 "dl5.out" \ 1276 "-ansi $NOSANITIZE_CFLAGS" \ 1277 "c++" \ 1278 ] \ 1279] 1280 1281run_cc_link_tests $build_cxx_tests 1282run_ld_link_exec_tests $run_cxx_tests 1283 1284if { [istarget *-*-linux*] 1285 || [istarget *-*-nacl*] 1286 || [istarget *-*-gnu*] } { 1287 run_cc_link_tests [list \ 1288 [list \ 1289 "Build libpr2404b.a with PIE" \ 1290 "" \ 1291 "-fPIE $NOSANITIZE_CFLAGS" \ 1292 { pr2404b.c } \ 1293 {} \ 1294 "libpr2404b.a" \ 1295 ] \ 1296 [list \ 1297 "Build pr19579a.o" \ 1298 "" "-fPIE -fcommon" \ 1299 {pr19579a.c} \ 1300 {} \ 1301 "libpr19579a.a" \ 1302 ] \ 1303 [list \ 1304 "Build libpr19579.so" \ 1305 "-shared" \ 1306 "-fPIC -fcommon" \ 1307 {pr19579b.c} \ 1308 {} \ 1309 "libpr19579.so" \ 1310 ] \ 1311 [list \ 1312 "Build libpr19579now.so" \ 1313 "-shared -Wl,-z,now" \ 1314 "-fPIC -fcommon" \ 1315 {pr19579b.c} \ 1316 {} \ 1317 "libpr19579.so" \ 1318 ] \ 1319 [list \ 1320 "Build pr22393-2a.so" \ 1321 "-shared -Wl,-z,separate-code" \ 1322 "-fPIC" \ 1323 {pr22393-2a.c} \ 1324 {{readelf -lW pr22393-2a.rd} \ 1325 {readelf -lW pr22393-2b.rd}} \ 1326 "pr22393-2a.so" \ 1327 ] \ 1328 [list \ 1329 "Build pr22393-2a-now.so" \ 1330 "-shared -Wl,-z,separate-code,-z,now" \ 1331 "-fPIC" \ 1332 {pr22393-2a.c} \ 1333 {{readelf -lW pr22393-2a.rd} \ 1334 {readelf -lW pr22393-2b.rd}} \ 1335 "pr22393-2a-now.so" \ 1336 ] \ 1337 [list \ 1338 "Build pr22393-2" \ 1339 "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a.so" \ 1340 "$NOPIE_CFLAGS" \ 1341 {pr22393-2b.c} \ 1342 {{readelf -lW pr22393-2a.rd} \ 1343 {readelf -lW pr22393-2b.rd}} \ 1344 "pr22393-2" \ 1345 ] \ 1346 [list \ 1347 "Build pr22393-2 (PIE)" \ 1348 "-pie -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a-now.so" \ 1349 "-fPIE" \ 1350 {pr22393-2b.c} \ 1351 {{readelf -lW pr22393-2a.rd} \ 1352 {readelf -lW pr22393-2b.rd}} \ 1353 "pr22393-2-pie" \ 1354 ] \ 1355 [list \ 1356 "Build pr22393-2 (static)" \ 1357 "-static -Wl,-z,separate-code" \ 1358 "" \ 1359 {pr22393-2a.c pr22393-2b.c} \ 1360 {{readelf -lW pr22393-2a.rd} \ 1361 {readelf -lW pr22393-2b.rd}} \ 1362 "pr22393-2-static" \ 1363 ] \ 1364 ] 1365 run_ld_link_exec_tests [list \ 1366 [list \ 1367 "Run pr18458 with PIE" \ 1368 "-pie -Wl,--no-as-needed,-z,now tmpdir/libpr18458a.so tmpdir/libpr18458b.so" \ 1369 "" \ 1370 {pr18458c.c} \ 1371 "pr18458p" \ 1372 "pass.out" \ 1373 "-fPIE" \ 1374 ] \ 1375 [list \ 1376 "Run pr2404 with PIE" \ 1377 "-pie $NOSANITIZE_CFLAGS -Wl,--no-as-needed tmpdir/pr2404b.o tmpdir/libpr2404a.so" \ 1378 "" \ 1379 { dummy.c } \ 1380 "pr2404pie" \ 1381 "pr2404.out" \ 1382 "-fPIE $NOSANITIZE_CFLAGS" \ 1383 ] \ 1384 [list \ 1385 "Run pr2404 with PIE (-z now)" \ 1386 "-pie $NOSANITIZE_CFLAGS -Wl,-z,now -Wl,--no-as-needed tmpdir/pr2404b.o tmpdir/libpr2404n.so" \ 1387 "" \ 1388 { dummy.c } \ 1389 "pr2404pien" \ 1390 "pr2404.out" \ 1391 "-fPIE $NOSANITIZE_CFLAGS" \ 1392 ] \ 1393 [list \ 1394 "Run pr18718" \ 1395 "" \ 1396 "" \ 1397 { pr18718.c check-ptr-eq.c } \ 1398 "pr18718" \ 1399 "pass.out" \ 1400 "-O2 -I../bfd" \ 1401 ] \ 1402 [list \ 1403 "Run pr18718 (-z now)" \ 1404 "-Wl,-z,now" \ 1405 "" \ 1406 { pr18718.c check-ptr-eq.c } \ 1407 "pr18718" \ 1408 "pass.out" \ 1409 "-O2 -I../bfd" \ 1410 ] \ 1411 [list \ 1412 "Run pr18718 with PIE (1)" \ 1413 "-pie" \ 1414 "" \ 1415 { pr18718.c check-ptr-eq.c } \ 1416 "pr18718pie1" \ 1417 "pass.out" \ 1418 "-O2 -fPIE -I../bfd" \ 1419 ] \ 1420 [list \ 1421 "Run pr18718 with PIE (2)" \ 1422 "" \ 1423 "" \ 1424 { pr18718.c check-ptr-eq.c } \ 1425 "pr18718pie2" \ 1426 "pass.out" \ 1427 "-O2 -fPIE -I../bfd" \ 1428 ] \ 1429 [list \ 1430 "Run pr18718 with PIE (3)" \ 1431 "-pie -Wl,-z,now" \ 1432 "" \ 1433 { pr18718.c check-ptr-eq.c } \ 1434 "pr18718pie3" \ 1435 "pass.out" \ 1436 "-O2 -fPIE -I../bfd" \ 1437 ] \ 1438 [list \ 1439 "Run pr18718 with PIE (4)" \ 1440 "-Wl,-z,now" \ 1441 "" \ 1442 { pr18718.c check-ptr-eq.c } \ 1443 "pr18718pie4" \ 1444 "pass.out" \ 1445 "-O2 -fPIE -I../bfd" \ 1446 ] \ 1447 [list \ 1448 "Run pr18718 with PIC (1)" \ 1449 "" \ 1450 "" \ 1451 { pr18718.c check-ptr-eq.c } \ 1452 "pr18718pic1" \ 1453 "pass.out" \ 1454 "-O2 -fPIC -I../bfd" \ 1455 ] \ 1456 [list \ 1457 "Run pr18718 with PIC (2)" \ 1458 "-pie" \ 1459 "" \ 1460 { pr18718.c check-ptr-eq.c } \ 1461 "pr18718pic2" \ 1462 "pass.out" \ 1463 "-O2 -fPIC -I../bfd" \ 1464 ] \ 1465 [list \ 1466 "Run pr18718 with PIC (3)" \ 1467 "-Wl,-z,now" \ 1468 "" \ 1469 { pr18718.c check-ptr-eq.c } \ 1470 "pr18718pic3" \ 1471 "pass.out" \ 1472 "-O2 -fPIC -I../bfd" \ 1473 ] \ 1474 [list \ 1475 "Run pr18718 with PIC (4)" \ 1476 "-pie -Wl,-z,now" \ 1477 "" \ 1478 { pr18718.c check-ptr-eq.c } \ 1479 "pr18718pic4" \ 1480 "pass.out" \ 1481 "-O2 -fPIC -I../bfd" \ 1482 ] \ 1483 [list \ 1484 "Run pr19579" \ 1485 "-pie -Wl,--no-as-needed,-z,text tmpdir/pr19579a.o tmpdir/libpr19579.so" \ 1486 "" \ 1487 {dummy.c} \ 1488 "pr19579" \ 1489 "pass.out" \ 1490 "-fPIE" \ 1491 ] \ 1492 [list \ 1493 "Run pr19579 (-z now)" \ 1494 "-pie -Wl,-z,now -Wl,--no-as-needed,-z,text tmpdir/pr19579a.o tmpdir/libpr19579.so" \ 1495 "" \ 1496 {dummy.c} \ 1497 "pr19579n" \ 1498 "pass.out" \ 1499 "-fPIE" \ 1500 ] \ 1501 [list \ 1502 "Run pr22393-2" \ 1503 "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a.so" \ 1504 "" \ 1505 {pr22393-2b.c} \ 1506 "pr22393-2" \ 1507 "pass.out" \ 1508 "$NOPIE_CFLAGS" \ 1509 ] \ 1510 [list \ 1511 "Run pr22393-2 (PIE)" \ 1512 "-pie -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a-now.so" \ 1513 "" \ 1514 {pr22393-2b.c} \ 1515 "pr22393-2-pie" \ 1516 "pass.out" \ 1517 "-fPIE" \ 1518 ] \ 1519 [list \ 1520 "Run pr22393-2 (static)" \ 1521 "-static -Wl,-z,separate-code" \ 1522 "" \ 1523 {pr22393-2a.c pr22393-2b.c} \ 1524 "pr22393-2-static" \ 1525 "pass.out" \ 1526 ] \ 1527 [list \ 1528 "Run pr21964-4" \ 1529 "" \ 1530 "" \ 1531 {pr21964-4.c} \ 1532 "pr21964-4" \ 1533 "pass.out" \ 1534 "" \ 1535 "" \ 1536 "" \ 1537 "-ldl" \ 1538 ] \ 1539 ] 1540} 1541 1542proc mix_pic_and_non_pic {xfails cflags ldflags exe} { 1543 run_cc_link_tests [list \ 1544 [list \ 1545 "Build libpr19719a.so" \ 1546 "-shared -Wl,-soname,libpr19719.so" \ 1547 "-fPIC" \ 1548 { pr19719d.c } \ 1549 {} \ 1550 "libpr19719a.so" \ 1551 ] \ 1552 [list \ 1553 "Build libpr19719b.so" \ 1554 "-shared -Wl,-soname,libpr19719.so" \ 1555 "-fPIC" \ 1556 { dummy.c } \ 1557 {} \ 1558 "libpr19719b.so" \ 1559 ] \ 1560 [list \ 1561 "Build libpr19719b.o" \ 1562 "-r -nostdlib" \ 1563 "-fPIC" \ 1564 { pr19719b.c } \ 1565 {} \ 1566 "libpr19719b.o" \ 1567 ] \ 1568 ] 1569 1570 send_log "cp tmpdir/libpr19719b.so tmpdir/libpr19719.so\n" 1571 exec cp tmpdir/libpr19719b.so tmpdir/libpr19719.so 1572 1573 run_ld_link_exec_tests [list \ 1574 [list \ 1575 "Run $exe fun defined" \ 1576 "-Wl,--no-as-needed,-rpath,tmpdir $ldflags tmpdir/libpr19719b.o tmpdir/libpr19719.so" \ 1577 "" \ 1578 { pr19719a.c pr19719c.c } \ 1579 $exe \ 1580 "pass.out" \ 1581 "$cflags" \ 1582 ] \ 1583 ] 1584 1585 send_log "cp tmpdir/libpr19719a.so tmpdir/libpr19719.so\n" 1586 exec cp tmpdir/libpr19719a.so tmpdir/libpr19719.so 1587 1588 foreach targ $xfails { 1589 setup_xfail $targ 1590 } 1591 1592 if ![isnative] { 1593 unsupported "Run $exe fun undefined" 1594 return 1595 } 1596 1597 set exec_output [run_host_cmd "tmpdir/$exe" ""] 1598 if {![string match "PASS" $exec_output]} { 1599 fail "Run $exe fun undefined" 1600 } else { 1601 pass "Run $exe fun undefined" 1602 } 1603} 1604 1605mix_pic_and_non_pic [list "arm*-*-*" "aarch64*-*-*"] "" "" "pr19719" 1606mix_pic_and_non_pic [] "-fPIE" "-pie" "pr19719pie" 1607 1608set AFLAGS_PIE "" 1609if { [istarget "i?86-*-*"] 1610 || [istarget "x86_64-*-*"] } { 1611 set AFLAGS_PIE "-mrelax-relocations=yes" 1612} 1613 1614if { ([istarget "*-*-linux*"] 1615 || [istarget "*-*-nacl*"] 1616 || [istarget "*-*-gnu*"]) 1617 && ![istarget "mips*-*-*"] } { 1618 run_ld_link_tests [list \ 1619 [list \ 1620 "Build libpr23162a.so" \ 1621 "-shared" \ 1622 "" \ 1623 "$AFLAGS_PIC" \ 1624 { pr23162a.c } \ 1625 "" \ 1626 "libpr23162a.so" \ 1627 "-fPIC -O2 $NOSANITIZE_CFLAGS" \ 1628 ] \ 1629 [list \ 1630 "Build pr23162a" \ 1631 "-pie --no-as-needed tmpdir/libpr23162a.so" \ 1632 "" \ 1633 $AFLAGS_PIE \ 1634 { pr23162b.c } \ 1635 {{readelf {-rW} pr23162.rd}} \ 1636 "pr23162a" \ 1637 "-fPIC -O0 $NOSANITIZE_CFLAGS" \ 1638 ] \ 1639 [list \ 1640 "Build libpr23162b.so" \ 1641 "-shared --version-script=pr23162.map" \ 1642 "" \ 1643 "$AFLAGS_PIC" \ 1644 { pr23162a.c } \ 1645 "" \ 1646 "libpr23162b.so" \ 1647 "-fPIC -O2 $NOSANITIZE_CFLAGS" \ 1648 ] \ 1649 [list \ 1650 "Build pr23162b" \ 1651 "-pie --no-as-needed tmpdir/libpr23162b.so" \ 1652 "" \ 1653 $AFLAGS_PIE \ 1654 { pr23162b.c } \ 1655 {{readelf {-rW} pr23162.rd}} \ 1656 "pr23162b" \ 1657 "-fPIC -O0 $NOSANITIZE_CFLAGS" \ 1658 ] \ 1659 [list \ 1660 "Build libpr23161a.so" \ 1661 "-shared" \ 1662 "" \ 1663 "$AFLAGS_PIC" \ 1664 { pr23161a.c } \ 1665 {{readelf {--dyn-syms -rW} pr23161a.rd}} \ 1666 "libpr23161a.so" \ 1667 "-fPIC -O2 $NOSANITIZE_CFLAGS" \ 1668 ] \ 1669 [list \ 1670 "Build pr23161a" \ 1671 "-pie --no-as-needed tmpdir/libpr23161a.so" \ 1672 "" \ 1673 $AFLAGS_PIE \ 1674 { pr23161b.c } \ 1675 {{readelf {--dyn-syms -rW} pr23161b.rd}} \ 1676 "pr23161a" \ 1677 "-fPIC -O0 $NOSANITIZE_CFLAGS" \ 1678 ] \ 1679 [list \ 1680 "Build libpr23161b.so" \ 1681 "-shared --version-script=pr23161.map" \ 1682 "" \ 1683 "$AFLAGS_PIC" \ 1684 { pr23161a.c } \ 1685 {{readelf {--dyn-syms -rW} pr23161a.rd}} \ 1686 "libpr23161b.so" \ 1687 "-fPIC -O2 $NOSANITIZE_CFLAGS" \ 1688 ] \ 1689 [list \ 1690 "Build pr23161b" \ 1691 "-pie --no-as-needed tmpdir/libpr23161b.so" \ 1692 "" \ 1693 $AFLAGS_PIE \ 1694 { pr23161b.c } \ 1695 {{readelf {--dyn-syms -rW} pr23161b.rd}} \ 1696 "pr23161b" \ 1697 "-fPIC -O0 $NOSANITIZE_CFLAGS" \ 1698 ] \ 1699 ] 1700} 1701 1702if { [istarget "i?86-*-*"] 1703 || [istarget "x86_64-*-*"] } { 1704 run_ld_link_tests [list \ 1705 [list \ 1706 "Build libpr23161c.so" \ 1707 "-shared" \ 1708 "" \ 1709 "$AFLAGS_PIC" \ 1710 { pr23161c.c } \ 1711 {{readelf {--dyn-syms -rW} pr23161c.rd}} \ 1712 "libpr23161c.so" \ 1713 "-fPIC -O2 $NOSANITIZE_CFLAGS" \ 1714 ] \ 1715 [list \ 1716 "Build pr23161c" \ 1717 "-pie --no-as-needed tmpdir/libpr23161c.so" \ 1718 "" \ 1719 $AFLAGS_PIE \ 1720 { pr23161b.c } \ 1721 {{readelf {--dyn-syms -rW} pr23161d.rd}} \ 1722 "pr23161c" \ 1723 "-fPIC -O0 $NOSANITIZE_CFLAGS" \ 1724 ] \ 1725 ] 1726} 1727 1728run_ld_link_tests [list \ 1729 [list "Build pr23658.so" \ 1730 "-shared" "" "$AFLAGS_PIC" \ 1731 {pr23658-1a.s} {} "pr23658.so"] \ 1732 [list \ 1733 "Build pr23658-2" \ 1734 "--dynamic-linker tmpdir/pr23658.so --no-as-needed tmpdir/pr23658.so" \ 1735 "" \ 1736 $AFLAGS_NOTE \ 1737 { pr23658-1a.s pr23658-1b.s pr23658-1c.s pr23658-1d.s start.s } \ 1738 {{readelf {-lW} pr23658-2.rd}} \ 1739 "pr23658-2" \ 1740 ] \ 1741] 1742