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