1# Expect script for MIPS ELF linker tests 2# Copyright (C) 2002-2017 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 22if {[istarget "mips*-*-vxworks"]} { 23 set mipsvxtests { 24 {"VxWorks shared library test 1" "-shared -Tvxworks1.ld" "" 25 "-mips2" {vxworks1-lib.s} 26 {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd} 27 {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}} 28 "libvxworks1.so"} 29 {"VxWorks executable test 1 (dynamic)" \ 30 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic" "" 31 "-mips2" {vxworks1.s} 32 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}} 33 "vxworks1"} 34 {"VxWorks executable test 2 (dynamic)" \ 35 "-Tvxworks1.ld -q --force-dynamic" "" 36 "-mips2" {vxworks2.s} 37 {{readelf --segments vxworks2.sd}} 38 "vxworks2"} 39 {"VxWorks executable test 2 (static)" 40 "-Tvxworks1.ld" "" 41 "-mips2" {vxworks2.s} 42 {{readelf --segments vxworks2-static.sd}} 43 "vxworks2"} 44 } 45 run_ld_link_tests $mipsvxtests 46 run_dump_test "vxworks1-static" 47 run_dump_test "vxworks-forced-local-1" 48 return 49} 50 51if {![istarget mips*-*-*] || ![is_elf_format]} { 52 return 53} 54 55set has_newabi [expr [istarget *-*-irix6*] \ 56 || [istarget mips*-*-linux*] \ 57 || [istarget mips*-sde-elf*] \ 58 || [istarget mips*-mti-elf*] \ 59 || [istarget mips*-img-elf*]] 60set linux_gnu [expr [istarget mips*-*-linux*]] 61set embedded_elf [expr [istarget mips*-*-elf]] 62 63# Set defaults. 64set abi_asflags(o32) "-32" 65set abi_asflags(n32) "-march=from-abi -n32 -EB" 66set abi_asflags(n64) "-march=from-abi -64 -EB" 67set abi_ldflags(o32) "" 68set abi_ldflags(n32) -melf32bmipn32 69set abi_ldflags(n64) -melf64bmip 70 71# Override as needed. 72if { [istarget *-*-irix6*] } { 73 set abi_asflags(o32) "-32 -EB" 74 set abi_ldflags(o32) -melf32bsmip 75} elseif { [istarget mips64*-linux*] } { 76 set abi_asflags(o32) "-32 -EB" 77 set abi_ldflags(o32) -melf32btsmip 78} elseif { [istarget mips64*-*freebsd*] } { 79 set abi_asflags(o32) "-32 -EB" 80 set abi_ldflags(o32) -melf32btsmip_fbsd 81} 82if { [istarget mips*-*-linux*] || [istarget mips*-sde-elf*] 83 || [istarget mips*-mti-elf*] || [istarget mips*-img-elf*]} { 84 set abi_ldflags(n32) -melf32btsmipn32 85 set abi_ldflags(n64) -melf64btsmip 86} elseif { [istarget mips64*-*freebsd*] } { 87 set abi_ldflags(n32) -melf32btsmipn32_fbsd 88 set abi_ldflags(n64) -melf64btsmip_fbsd 89} 90 91if { $linux_gnu } { 92 run_ld_link_tests [list \ 93 [list "Dummy shared library for MIPS16 PIC test 1" \ 94 "-shared -melf32btsmip" "" \ 95 "-EB -32 -mips1" \ 96 { mips16-pic-1-dummy.s } \ 97 {} \ 98 "mips16-pic-1-dummy.so"] \ 99 [list "MIPS16 PIC test 1" \ 100 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \ 101 "-EB -32 -mips1 -I $srcdir/$subdir" \ 102 { mips16-pic-1a.s mips16-pic-1b.s } \ 103 { { objdump { -dr -j.text } mips16-pic-1.dd } 104 { readelf -A mips16-pic-1.gd } } \ 105 "mips16-pic-1"] \ 106 [list "MIPS16 PIC test 2" \ 107 "-melf32btsmip -T mips16-pic-1.ld -shared" "" \ 108 "-EB -32 -mips1 -I $srcdir/$subdir" \ 109 { mips16-pic-2a.s mips16-pic-2b.s } \ 110 { { objdump { -dr -j.text } mips16-pic-2.dd } \ 111 { readelf -A mips16-pic-2.gd } \ 112 { readelf --symbols mips16-pic-2.nd } \ 113 { readelf --relocs mips16-pic-2.rd } \ 114 { readelf -d mips16-pic-2.ad } } \ 115 "mips16-pic-2"] \ 116 [list "MIPS16 PIC test 3" \ 117 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \ 118 "-EB -32 -mips1 -I $srcdir/$subdir" \ 119 { mips16-pic-3a.s mips16-pic-3b.s } \ 120 { { objdump -dr mips16-pic-3.dd } \ 121 { readelf --relocs mips16-pic-3.rd } \ 122 { readelf -A mips16-pic-3.gd } } \ 123 "mips16-pic-3"] \ 124 [list "MIPS16 PIC test 4 (shared library)" \ 125 "-shared -melf32btsmip -T mips16-pic-1.ld --version-script mips16-pic-4.ver" "" \ 126 "-EB -32 -mips1" \ 127 { mips16-pic-4a.s mips16-pic-4b.s } \ 128 { { objdump -dr mips16-pic-4a.dd } \ 129 { readelf --symbols mips16-pic-4a.nd } \ 130 { readelf -A mips16-pic-4a.gd } } \ 131 "mips16-pic-4.so"] \ 132 [list "MIPS16 PIC test 4 (executable)" \ 133 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-4.so" "" \ 134 "-EB -32 -mips1" \ 135 { mips16-pic-4c.s } \ 136 { { objdump -dr mips16-pic-4b.dd } } \ 137 "mips16-pic-4"]] 138} 139 140# Check MIPS16 markings being passed through link. 141run_dump_test "mips16-1" 142 143# MIPS branch offset final link checking. 144run_dump_test "branch-misc-1" 145run_dump_test "branch-misc-2" 146run_dump_test "branch-absolute" [list [list ld $abi_ldflags(o32)]] 147run_dump_test "branch-absolute-addend" [list [list ld $abi_ldflags(o32)]] 148if $has_newabi { 149 run_dump_test "branch-absolute-n32" [list [list ld $abi_ldflags(n32)]] 150 run_dump_test "branch-absolute-addend-n32" \ 151 [list [list ld $abi_ldflags(n32)]] 152 run_dump_test "branch-absolute-n64" [list [list ld $abi_ldflags(n64)]] 153 run_dump_test "branch-absolute-addend-n64" \ 154 [list [list ld $abi_ldflags(n64)]] 155} 156 157run_dump_test "mips16-branch-2" [list [list ld $abi_ldflags(o32)]] 158run_dump_test "mips16-branch-3" [list [list ld $abi_ldflags(o32)]] 159run_dump_test "mips16-branch-addend-2" [list [list ld $abi_ldflags(o32)]] 160run_dump_test "mips16-branch-addend-3" [list [list ld $abi_ldflags(o32)]] 161run_dump_test "mips16-branch-absolute" [list [list ld $abi_ldflags(o32)]] 162run_dump_test "mips16-branch-absolute-addend" \ 163 [list [list ld $abi_ldflags(o32)]] 164if $has_newabi { 165 run_dump_test "mips16-branch-absolute-n32" \ 166 [list [list ld $abi_ldflags(n32)]] 167 run_dump_test "mips16-branch-absolute-addend-n32" \ 168 [list [list ld $abi_ldflags(n32)]] 169 run_dump_test "mips16-branch-absolute-n64" \ 170 [list [list ld $abi_ldflags(n64)]] 171 run_dump_test "mips16-branch-absolute-addend-n64" \ 172 [list [list ld $abi_ldflags(n64)]] 173} 174 175run_dump_test "micromips-branch-absolute" [list [list ld $abi_ldflags(o32)]] 176run_dump_test "micromips-branch-absolute-addend" \ 177 [list [list ld $abi_ldflags(o32)]] 178if $has_newabi { 179 run_dump_test "micromips-branch-absolute-n32" \ 180 [list [list ld $abi_ldflags(n32)]] 181 run_dump_test "micromips-branch-absolute-addend-n32" \ 182 [list [list ld $abi_ldflags(n32)]] 183 run_dump_test "micromips-branch-absolute-n64" \ 184 [list [list ld $abi_ldflags(n64)]] 185 run_dump_test "micromips-branch-absolute-addend-n64" \ 186 [list [list ld $abi_ldflags(n64)]] 187} 188 189# Jalx test 190run_dump_test "jalx-1" 191 192if { $linux_gnu } { 193 run_ld_link_tests [list \ 194 [list "Dummy shared library for JALX test 2" \ 195 "-shared -nostdlib -melf32btsmip" "" \ 196 "-G0 -EB -mmicromips -no-mdebug -mabi=32 -march=mips32r2 -KPIC" \ 197 { jalx-2-printf.s } \ 198 {} \ 199 "libjalx-2.so"] \ 200 [list "Dummy external function for JALX test 2" \ 201 "-r -melf32btsmip" "" \ 202 "-G0 -EB -no-mdebug -mabi=32 -march=mips32r2 -mno-shared -call_nonpic" \ 203 { jalx-2-ex.s } \ 204 {} \ 205 "jalx-2-ex.o.r"] \ 206 [list "MIPS JALX test 2" \ 207 "-nostdlib -T jalx-2.ld tmpdir/libjalx-2.so tmpdir/jalx-2-ex.o.r -melf32btsmip" "" \ 208 "-G0 -EB -mmicromips -no-mdebug -mabi=32 -march=mips32r2 -mno-shared -call_nonpic" \ 209 { jalx-2-main.s } \ 210 { { objdump -d jalx-2.dd } } \ 211 "jalx-2"]] 212} 213 214run_dump_test "jalx-addend" [list [list ld $abi_ldflags(o32)]] 215run_dump_test "jalx-local" [list [list ld $abi_ldflags(o32)]] 216run_dump_test "bal-jalx-addend" [list [list ld $abi_ldflags(o32)]] 217run_dump_test "bal-jalx-local" [list [list ld $abi_ldflags(o32)]] 218run_dump_test "bal-jalx-pic" [list [list ld $abi_ldflags(o32)]] 219run_dump_test "bal-jalx-pic-ignore" [list [list ld $abi_ldflags(o32)]] 220if $has_newabi { 221 run_dump_test "jalx-addend-n32" [list [list ld $abi_ldflags(n32)]] 222 run_dump_test "jalx-local-n32" [list [list ld $abi_ldflags(n32)]] 223 run_dump_test "bal-jalx-addend-n32" [list [list ld $abi_ldflags(n32)]] 224 run_dump_test "bal-jalx-local-n32" [list [list ld $abi_ldflags(n32)]] 225 run_dump_test "bal-jalx-pic-n32" [list [list ld $abi_ldflags(n32)]] 226 run_dump_test "bal-jalx-pic-ignore-n32" [list [list ld $abi_ldflags(n32)]] 227 run_dump_test "jalx-addend-n64" [list [list ld $abi_ldflags(n64)]] 228 run_dump_test "jalx-local-n64" [list [list ld $abi_ldflags(n64)]] 229 run_dump_test "bal-jalx-addend-n64" [list [list ld $abi_ldflags(n64)]] 230 run_dump_test "bal-jalx-local-n64" [list [list ld $abi_ldflags(n64)]] 231 run_dump_test "bal-jalx-pic-n64" [list [list ld $abi_ldflags(n64)]] 232 run_dump_test "bal-jalx-pic-ignore-n64" [list [list ld $abi_ldflags(n64)]] 233} 234 235run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]] 236run_dump_test "unaligned-jalx-1" [list [list ld $abi_ldflags(o32)]] 237run_dump_test "unaligned-jalx-2" [list [list ld $abi_ldflags(o32)]] 238run_dump_test "unaligned-jalx-3" [list [list ld $abi_ldflags(o32)]] 239run_dump_test "unaligned-jalx-mips16-0" [list [list ld $abi_ldflags(o32)]] 240run_dump_test "unaligned-jalx-mips16-1" [list [list ld $abi_ldflags(o32)]] 241run_dump_test "unaligned-jalx-micromips-0" [list [list ld $abi_ldflags(o32)]] 242run_dump_test "unaligned-jalx-micromips-1" [list [list ld $abi_ldflags(o32)]] 243 244if $has_newabi { 245 run_dump_test "unaligned-jalx-addend-0" \ 246 [list [list ld $abi_ldflags(n32)]] 247 run_dump_test "unaligned-jalx-addend-1" \ 248 [list [list ld $abi_ldflags(n32)]] 249 run_dump_test "unaligned-jalx-addend-2" \ 250 [list [list ld $abi_ldflags(n32)]] 251 run_dump_test "unaligned-jalx-addend-3" \ 252 [list [list ld $abi_ldflags(n32)]] 253 run_dump_test "unaligned-jalx-addend-mips16-0" \ 254 [list [list ld $abi_ldflags(n32)]] 255 run_dump_test "unaligned-jalx-addend-mips16-1" \ 256 [list [list ld $abi_ldflags(n32)]] 257 run_dump_test "unaligned-jalx-addend-micromips-0" \ 258 [list [list ld $abi_ldflags(n32)]] 259 run_dump_test "unaligned-jalx-addend-micromips-1" \ 260 [list [list ld $abi_ldflags(n32)]] 261} 262 263run_dump_test "unaligned-branch" [list [list ld $abi_ldflags(o32)]] 264 265if $has_newabi { 266 run_dump_test "unaligned-branch-2" \ 267 [list [list ld $abi_ldflags(n32)]] 268 run_dump_test "unaligned-branch-ignore-2" \ 269 [list [list ld $abi_ldflags(n32)]] 270 run_dump_test "unaligned-branch-r6-1" \ 271 [list [list ld $abi_ldflags(n32)]] 272 run_dump_test "unaligned-branch-ignore-r6-1" \ 273 [list [list ld $abi_ldflags(n32)]] 274 run_dump_test "unaligned-branch-r6-2" \ 275 [list [list ld $abi_ldflags(n32)]] 276 run_dump_test "unaligned-branch-mips16" \ 277 [list [list ld $abi_ldflags(n32)]] 278 run_dump_test "unaligned-branch-ignore-mips16" \ 279 [list [list ld $abi_ldflags(n32)]] 280 run_dump_test "unaligned-branch-micromips" \ 281 [list [list ld $abi_ldflags(n32)]] 282 run_dump_test "unaligned-branch-ignore-micromips" \ 283 [list [list ld $abi_ldflags(n32)]] 284 run_dump_test "unaligned-jump" \ 285 [list [list ld $abi_ldflags(n32)]] 286 run_dump_test "unaligned-jump-mips16" \ 287 [list [list ld $abi_ldflags(n32)]] 288 run_dump_test "unaligned-jump-micromips" \ 289 [list [list ld $abi_ldflags(n32)]] 290} 291 292run_dump_test "unaligned-lwpc-0" [list [list ld $abi_ldflags(o32)]] 293run_dump_test "unaligned-lwpc-1" [list [list ld $abi_ldflags(o32)]] 294run_dump_test "unaligned-ldpc-0" [list [list ld $abi_ldflags(o32)]] 295run_dump_test "unaligned-ldpc-1" [list [list ld $abi_ldflags(o32)]] 296 297# Test multi-got link. We only do this on GNU/Linux because it requires 298# the "traditional" emulations. 299if { $linux_gnu } { 300 run_dump_test "multi-got-1" 301 run_dump_test "multi-got-no-shared" 302 run_dump_test "multi-got-hidden-1" 303 run_dump_test "multi-got-hidden-2" 304} 305 306# Test __gnu_local_gp accesses 307if { $linux_gnu } { 308 run_dump_test "no-shared-1-o32" 309 if { $has_newabi } { 310 run_dump_test "no-shared-1-n32" 311 run_dump_test "no-shared-1-n64" 312 } 313} 314 315# Test PIE debug dynamic tags 316if { $linux_gnu } { 317 run_dump_test "pie-o32" 318 if { $has_newabi } { 319 run_dump_test "pie-n32" 320 run_dump_test "pie-n64" 321 } 322} 323 324if $has_newabi { 325 if { $embedded_elf } { 326 run_dump_test "elf-rel-got-n32-embed" \ 327 [list [list ld $abi_ldflags(n32)]] 328 run_dump_test "elf-rel-xgot-n32-embed" \ 329 [list [list ld $abi_ldflags(n32)]] 330 } else { 331 run_dump_test "elf-rel-got-n32" [list [list ld $abi_ldflags(n32)]] 332 run_dump_test "elf-rel-xgot-n32" [list [list ld $abi_ldflags(n32)]] 333 } 334 if { $linux_gnu } { 335 run_dump_test "elf-rel-got-n64-linux" \ 336 [list [list ld $abi_ldflags(n64)]] 337 run_dump_test "elf-rel-xgot-n64-linux" \ 338 [list [list ld $abi_ldflags(n64)]] 339 } elseif { $embedded_elf } { 340 run_dump_test "elf-rel-got-n64-embed" \ 341 [list [list ld $abi_ldflags(n64)]] 342 run_dump_test "elf-rel-xgot-n64-embed" \ 343 [list [list ld $abi_ldflags(n64)]] 344 } else { 345 run_dump_test "elf-rel-got-n64" [list [list ld $abi_ldflags(n64)]] 346 run_dump_test "elf-rel-xgot-n64" [list [list ld $abi_ldflags(n64)]] 347 } 348 349 run_dump_test "relax-jalr-n32" 350 run_dump_test "relax-jalr-n32-shared" 351 run_dump_test "relax-jalr-n64" 352 run_dump_test "relax-jalr-n64-shared" 353} 354 355if { $linux_gnu } { 356 run_dump_test "rel32-o32" 357 if { $has_newabi } { 358 run_dump_test "rel32-n32" 359 run_dump_test "rel64" 360 } 361 # The first test checks that a mixed PIC/non-PIC relocatable link 362 # will not introduce any stubs itself, but will flag PIC functions 363 # for the final link. 364 # 365 # The second test checks that we insert stubs for calls from 366 # non-PIC functions to PIC functions when linking the original 367 # two objects together. 368 # 369 # The third test checks that we do the same when linking the 370 # result of the first link (with no other source files). 371 # 372 # We then repeat the same three tests for microMIPS stubs. 373 run_ld_link_tests { 374 {"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip" "" 375 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s} 376 {{objdump -dr pic-and-nonpic-1-rel.dd} 377 {readelf --symbols pic-and-nonpic-1-rel.nd}} 378 "pic-and-nonpic-1-rel.o"} 379 {"PIC and non-PIC test 1 (static 1)" 380 "-melf32btsmip -Tpic-and-nonpic-1.ld" "" 381 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s} 382 {{objdump -dr pic-and-nonpic-1.dd} 383 {readelf --symbols pic-and-nonpic-1.nd}} 384 "pic-and-nonpic-1-static1.o"} 385 {"PIC and non-PIC test 1 (static 2)" 386 "-melf32btsmip -Tpic-and-nonpic-1.ld tmpdir/pic-and-nonpic-1-rel.o" "" 387 "" {} 388 {{objdump -dr pic-and-nonpic-1.dd} 389 {readelf --symbols pic-and-nonpic-1.nd}} 390 "pic-and-nonpic-1-static2.o"} 391 {"PIC and non-PIC test 1, microMIPS (relocatable)" 392 "-r -melf32btsmip" "" 393 "-32 -EB -mips2" 394 {pic-and-nonpic-1a-micromips.s pic-and-nonpic-1b-micromips.s} 395 {{objdump -dr pic-and-nonpic-1-micromips-rel.dd} 396 {readelf --symbols pic-and-nonpic-1-micromips-rel.nd}} 397 "pic-and-nonpic-1-micromips-rel.o"} 398 {"PIC and non-PIC test 1, microMIPS (static 1)" 399 "-melf32btsmip -Tpic-and-nonpic-1.ld" "" 400 "-32 -EB -mips2" 401 {pic-and-nonpic-1a-micromips.s pic-and-nonpic-1b-micromips.s} 402 {{objdump -dr pic-and-nonpic-1-micromips.dd} 403 {readelf --symbols pic-and-nonpic-1-micromips.nd}} 404 "pic-and-nonpic-1-micromips-static1.o"} 405 } 406 # The final executable produced with the following test is supposed 407 # to be the same as one produced with the preceding test, however 408 # as noted in PR ld/20453 it is not. Consequently output from 409 # `objdump -dr' is not the same either. Expect: 410 # 411 # regexp_diff match failure 412 # regexp "^ 4103c: f001 0415 jalx 41054 <f3>$" 413 # line " 4103c: f001 0400 jalx 41000 <.pic.f3>" 414 # 415 # from the test below due to this problem. 416 setup_kfail "mips*-*-*" "ld/20453" 417 # The final check below should be folded into the `run_ld_link_tests' 418 # call above once `setup_kfail' has been removed. 419 run_ld_link_tests { 420 {"PIC and non-PIC test 1, microMIPS (static 2)" 421 "-melf32btsmip -Tpic-and-nonpic-1.ld \ 422 tmpdir/pic-and-nonpic-1-micromips-rel.o" "" 423 "" {} 424 {{objdump -dr pic-and-nonpic-1-micromips.dd} 425 {readelf --symbols pic-and-nonpic-1-micromips.nd}} 426 "pic-and-nonpic-1-micromips-static2.o"} 427 } 428 run_dump_test "pic-and-nonpic-2" 429 run_ld_link_tests { 430 {"PIC and non-PIC test 3 (shared library)" 431 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" "" 432 "-32 -EB -mips2" {pic-and-nonpic-3a.s} 433 {{readelf --segments pic-and-nonpic-3a.sd} 434 {readelf -A pic-and-nonpic-3a.gd} 435 {objdump -dr pic-and-nonpic-3a.dd}} 436 "pic-and-nonpic-3a.so"} 437 {"PIC and non-PIC test 3 (executable)" 438 "-melf32btsmip -Tpic-and-nonpic-3b.ld tmpdir/pic-and-nonpic-3a.so" "" 439 "-32 -EB -mips2" {pic-and-nonpic-3b.s} 440 {{readelf --segments pic-and-nonpic-3b.sd} 441 {objdump -dr pic-and-nonpic-3b.dd} 442 {objdump {-s -j.got.plt} pic-and-nonpic-3b.pd} 443 {readelf -A pic-and-nonpic-3b.gd} 444 {readelf --relocs pic-and-nonpic-3b.rd} 445 {readelf --symbols pic-and-nonpic-3b.nd} 446 {readelf -d pic-and-nonpic-3b.ad}} 447 "pic-and-nonpic-3b"} 448 } 449 run_dump_test "pic-and-nonpic-3-error" 450 run_ld_link_tests { 451 {"PIC and non-PIC test 4 (shared library)" 452 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" "" 453 "-32 -EB -mips2" {pic-and-nonpic-4a.s} 454 {} 455 "pic-and-nonpic-4a.so"} 456 {"PIC and non-PIC test 4 (executable)" 457 "-melf32btsmip -Tpic-and-nonpic-4b.ld tmpdir/pic-and-nonpic-4a.so" "" 458 "-32 -EB -mips2" {pic-and-nonpic-4b.s} 459 {{readelf --segments pic-and-nonpic-4b.sd} 460 {objdump -dr pic-and-nonpic-4b.dd} 461 {objdump {-s -j.got -j.data} pic-and-nonpic-4b.gd} 462 {readelf --relocs pic-and-nonpic-4b.rd} 463 {readelf --symbols pic-and-nonpic-4b.nd} 464 {readelf -d pic-and-nonpic-4b.ad}} 465 "pic-and-nonpic-4b"} 466 } 467 run_dump_test "pic-and-nonpic-4-error" 468 run_ld_link_tests { 469 {"PIC and non-PIC test 5 (executable)" 470 "-melf32btsmip -Tpic-and-nonpic-5b.ld tmpdir/pic-and-nonpic-3a.so tmpdir/pic-and-nonpic-4a.so" "" 471 "-32 -EB -mips2" {pic-and-nonpic-5a.s pic-and-nonpic-5b.s} 472 {{readelf --segments pic-and-nonpic-5b.sd} 473 {objdump -dr pic-and-nonpic-5b.dd} 474 {objdump {-s -j.got.plt -j.data} pic-and-nonpic-5b.pd} 475 {readelf -A pic-and-nonpic-5b.gd} 476 {readelf --relocs pic-and-nonpic-5b.rd} 477 {readelf --symbols pic-and-nonpic-5b.nd} 478 {readelf -d pic-and-nonpic-5b.ad}} 479 "pic-and-nonpic-5b"} 480 } 481 set abis { o32 -32 elf32btsmip } 482 if $has_newabi { 483 lappend abis n32 -n32 elf32btsmipn32 484 lappend abis n64 -64 elf64btsmip 485 } 486 foreach { abi flag emul } $abis { 487 run_ld_link_tests [list \ 488 [list "PIC and non-PIC test 6 ($abi shared library)" \ 489 "-m$emul -shared -Tpic-and-nonpic-3a.ld" "" \ 490 "$flag -EB -mips3" \ 491 [list "pic-and-nonpic-6-${abi}a.s"] {} \ 492 "pic-and-nonpic-6-${abi}.so"] \ 493 [list "PIC and non-PIC test 6 ($abi executable)" \ 494 "-m$emul -Tpic-and-nonpic-6.ld tmpdir/pic-and-nonpic-6-${abi}.so" "" \ 495 "$flag -EB -mips3" \ 496 [list "pic-and-nonpic-6-${abi}b.s" \ 497 "pic-and-nonpic-6-${abi}c.s"] \ 498 [list "readelf {--wide --segments} pic-and-nonpic-6-${abi}.sd" \ 499 "objdump -dr pic-and-nonpic-6-${abi}.dd" \ 500 "objdump {-s -j.got.plt} pic-and-nonpic-6-${abi}.pd" \ 501 "readelf -A pic-and-nonpic-6-${abi}.gd" \ 502 "readelf --relocs pic-and-nonpic-6-${abi}.rd" \ 503 "readelf --symbols pic-and-nonpic-6-${abi}.nd" \ 504 "readelf -d pic-and-nonpic-6-${abi}.ad"] \ 505 "pic-and-nonpic-6-${abi}"]] 506 507 # This checks whether our linker scripts get the scope of _gp right, 508 # and must therefore use default scripts. If they don't, then -- in 509 # addition to dumps failing to match -- the final link fails with: 510 # 511 # ld: gp-hidden.o: undefined reference to symbol '_gp' 512 # ld: note: '_gp' is defined in DSO ./tmpdir/gp-hidden-lib-${abi}.so 513 # so try adding it to the linker command line 514 # 515 set suff64 [string map {o32 "" n32 "" n64 -64} $abi] 516 run_ld_link_tests [list \ 517 [list \ 518 "_gp scope test ($abi shared library)" \ 519 "$abi_ldflags($abi) -shared" "" \ 520 "$abi_asflags($abi) -KPIC" \ 521 { gp-hidden-lib.s } \ 522 [list \ 523 "readelf --relocs gp-hidden-lib${suff64}.rd" \ 524 "readelf --syms gp-hidden.sd"] \ 525 "gp-hidden-lib-${abi}.so"] \ 526 [list \ 527 "_gp scope test ($abi versioned library)" \ 528 "$abi_ldflags($abi) -shared -version-script gp-hidden-ver.ver tmpdir/gp-hidden-lib-${abi}.so" "" \ 529 "$abi_asflags($abi) -KPIC" \ 530 { gp-hidden-ver.s } \ 531 [list \ 532 "readelf --relocs gp-hidden-ver${suff64}.rd" \ 533 "readelf --syms gp-hidden.sd"] \ 534 "gp-hidden-ver-${abi}.so"] \ 535 [list \ 536 "_gp scope test ($abi executable)" \ 537 "$abi_ldflags($abi) -e 0 -rpath-link . tmpdir/gp-hidden-ver-${abi}.so" "" \ 538 "$abi_asflags($abi) -call_nonpic" \ 539 { gp-hidden.s } \ 540 [list \ 541 "readelf --relocs gp-hidden${suff64}.rd" \ 542 "readelf --syms gp-hidden.sd"] \ 543 "gp-hidden-${abi}"]] 544 } 545} 546 547if { $embedded_elf } { 548 run_dump_test "region1" 549} 550 551if $embedded_elf { 552 # This could work on other targets too, but would need the appropriate 553 # ld -m switch. 554 run_dump_test "reloc-1-rel" 555} 556if $has_newabi { 557 run_dump_test "reloc-1-n32" [list [list ld $abi_ldflags(n32)]] 558 run_dump_test "reloc-1-n64" [list [list ld $abi_ldflags(n64)]] 559} 560run_dump_test "reloc-2" 561run_dump_test "reloc-merge-lo16" 562run_dump_test "reloc-3" 563if {$has_newabi} { 564 run_dump_test "reloc-3-n32" 565} 566run_dump_test "reloc-4" 567run_dump_test "reloc-5" 568if { $has_newabi } { 569 run_ld_link_tests [list \ 570 [list \ 571 "reloc test 6a" \ 572 "-shared $abi_ldflags(n32)" "" \ 573 "$abi_asflags(n32)" \ 574 "reloc-6a.s" \ 575 {} \ 576 "reloc-6a.so"] \ 577 [list \ 578 "reloc test 6b" \ 579 "$abi_ldflags(n32) tmpdir/reloc-6a.so" "" \ 580 "$abi_asflags(n32)" \ 581 "reloc-6b.s" \ 582 {} \ 583 "reloc-6b"]] 584} 585 586run_dump_test "reloc-local-overflow" [list [list ld $abi_ldflags(o32)]] 587run_ld_link_tests [list \ 588 [list \ 589 "MIPS link ELF o32 PIC comdat GOT16/LO16 relocation pairing" \ 590 "$abi_ldflags(o32) -e bar" "" "$abi_asflags(o32) -mno-pdr" \ 591 "../../../gas/testsuite/gas/mips/comdat-reloc.s" \ 592 {} \ 593 "comdat-reloc"]] 594 595if {$has_newabi && $linux_gnu} { 596 run_dump_test "eh-frame1-n32" 597 run_dump_test "eh-frame1-n64" 598 run_dump_test "eh-frame2-n32" 599 run_dump_test "eh-frame2-n64" 600} 601if {$embedded_elf} { 602 run_dump_test "eh-frame3" 603 run_dump_test "eh-frame4" 604} 605if {$linux_gnu} { 606 set eh_frame5_test { 607 {"MIPS eh-frame 5" 608 "-melf32btsmip -shared -Teh-frame5.ld" "" 609 "-32 -EB" 610 {eh-frame5.s} 611 {{readelf {--relocs -wf} eh-frame5.d}} 612 "eh-frame5.so"} 613 } 614 run_ld_link_tests $eh_frame5_test 615} 616 617if {$embedded_elf} { 618 run_dump_test "compact-eh1" 619 run_dump_test "compact-eh2" 620 run_dump_test "compact-eh3" 621} 622 623if {$linux_gnu} { 624 run_dump_test "compact-eh4" 625 run_dump_test "compact-eh5" 626 run_dump_test "compact-eh6" 627} 628 629run_dump_test "jaloverflow" 630run_dump_test "jaloverflow-2" 631 632run_dump_test "jal-global-overflow-0" [list [list ld $abi_ldflags(o32)]] 633run_dump_test "jal-global-overflow-1" [list [list ld $abi_ldflags(o32)]] 634run_dump_test "jal-local-overflow-0" [list [list ld $abi_ldflags(o32)]] 635run_dump_test "jal-local-overflow-1" [list [list ld $abi_ldflags(o32)]] 636 637run_dump_test "undefweak-overflow" [list [list as $abi_asflags(o32)] \ 638 [list ld $abi_ldflags(o32)]] 639 640if {$has_newabi} { 641 run_dump_test "undefweak-overflow" [list [list name (n32)] \ 642 [list as $abi_asflags(n32)] \ 643 [list ld $abi_ldflags(n32)]] 644 run_dump_test "undefweak-overflow" [list [list name (n64)] \ 645 [list as $abi_asflags(n64)] \ 646 [list ld $abi_ldflags(n64)]] 647} 648 649if {$has_newabi} { 650 run_dump_test "jalbal" [list [list ld $abi_ldflags(n32)]] 651} 652 653run_dump_test "mode-change-error-1" 654 655run_dump_test "mips16-hilo" 656if {$has_newabi} { 657 run_dump_test "mips16-hilo-n32" 658} 659 660if { $linux_gnu } { 661 if { $has_newabi } { 662 run_dump_test "textrel-1" 663 } 664 run_dump_test "got-page-1" 665 if $has_newabi { 666 run_dump_test "got-page-2" 667 run_dump_test "dyn-sec64" 668 } 669 run_dump_test "got-page-3" 670 run_ld_link_tests [subst { 671 {"GOT page 4 (one file)" "-shared $abi_ldflags(o32) -T got-page-1.ld" 672 "" "$abi_asflags(o32) -mips2" {got-page-4b.s} 673 {{objdump -dr got-page-4a.d} 674 {readelf -A got-page-4a.got}} 675 "got-page-4a.so"} 676 {"GOT page 4 (two files)" "-shared $abi_ldflags(o32) -T got-page-1.ld" 677 "" "$abi_asflags(o32) -mips2" {got-page-4a.s got-page-4b.s} 678 {{objdump -dr got-page-4b.d} 679 {readelf -A got-page-4b.got}} 680 "got-page-4b.so"} 681 }] 682 if $has_newabi { 683 run_ld_link_tests [subst { 684 {"GOT page 5" "-shared $abi_ldflags(n32) -T got-page-1.ld" 685 "" "$abi_asflags(n32)" {got-page-5.s} 686 {{objdump -dr got-page-5.d} 687 {readelf -A got-page-5.got}} 688 "got-page-5.so"} 689 {"GOT page 6" "-shared $abi_ldflags(n32) -T got-page-1.ld" 690 "" "$abi_asflags(n32)" {got-page-6.s} 691 {{objdump -dr got-page-6.d} 692 {readelf -A got-page-6.got}} 693 "got-page-6.so"} 694 {"GOT page 7 (order 1)" "-shared $abi_ldflags(n32) -T got-page-1.ld" 695 "" "$abi_asflags(n32)" 696 {got-page-7a.s got-page-7b.s got-page-7c.s got-page-7d.s 697 got-page-7e.s} 698 {{objdump -dr got-page-7.d} 699 {readelf -A got-page-7.got}} 700 "got-page-7a.so"} 701 {"GOT page 7 (order 2)" "-shared $abi_ldflags(n32) -T got-page-1.ld" 702 "" "$abi_asflags(n32)" 703 {got-page-7e.s got-page-7a.s got-page-7b.s got-page-7c.s 704 got-page-7d.s} 705 {{objdump -dr got-page-7.d} 706 {readelf -A got-page-7.got}} 707 "got-page-7b.so"} 708 }] 709 } 710 run_dump_test "got-dump-1" 711 if $has_newabi { 712 run_dump_test "got-dump-2" 713 } 714 run_dump_test "reloc-estimate-1" 715} 716 717if $has_newabi { 718 run_dump_test "emit-relocs-1" 719} 720 721run_dump_test "hash1a" 722run_dump_test "hash1b" 723run_dump_test "hash1c" 724 725if {[istarget mips*-*-linux*]} { 726 # The number of symbols that are always included in the symbol table 727 # for these tests. The 4 are: 728 # 729 # the null symbol entry 730 # the .MIPS.stubs section symbol 731 set base_syms 2 732 foreach dynsym { 7fff 8000 fff0 10000 2fe80 } { 733 run_ld_link_tests \ 734 [list [list \ 735 "Stub for dynsym 0x$dynsym" \ 736 "-shared -melf32btsmip -T stub-dynsym-1.ld" "" \ 737 [concat \ 738 "-EB -march=mips1 -32 -KPIC" \ 739 "--defsym base_syms=$base_syms" \ 740 "--defsym dynsym=0x$dynsym"] \ 741 [list "stub-dynsym-1.s"] \ 742 [list [list \ 743 "objdump" "-dz" \ 744 "stub-dynsym-1-$dynsym.d"]] \ 745 "stub-dynsym-1-$dynsym"]] 746 } 747 } 748 749# For tests which may involve multiple files, use run_ld_link_tests. 750 751# List contains test-items with 3 items followed by 2 lists: 752# 0:name 1:ld early options 2:ld late options 3:assembler options 753# 4:filenames of assembler files 5: action and options. 6: name of output file 754 755# Actions: 756# objdump: Apply objdump options on result. Compare with regex (last arg). 757# nm: Apply nm options on result. Compare with regex (last arg). 758# readelf: Apply readelf options on result. Compare with regex (last arg). 759 760set mips_tls_tests { 761 {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld" "" 762 "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s} 763 {{objdump {-dr -m mips:isa32r2} tlsbin-o32.d} {objdump -srj.got tlsbin-o32.got}} 764 "tls-static-o32"} 765 {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld" "" 766 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s} 767 {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32.got}} 768 "tlslib-o32.so"} 769 {"Dynamic executable with TLS" 770 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so" "" 771 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s} 772 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32.d} {objdump -Rsj.got tlsdyn-o32.got}} 773 "tls-dynamic-o32"} 774 {"Shared library with multiple GOTs and TLS" 775 "-shared -melf32btsmip -T mips-lib.ld" "" 776 "-EB -march=mips1 -32 -KPIC" {tls-multi-got-1-1.s tls-multi-got-1-2.s} 777 {{readelf {-d -r} tls-multi-got-1.r} 778 {objdump {-dr -m mips:isa32r2} tls-multi-got-1.d} 779 {objdump -Rsj.got tls-multi-got-1.got}} 780 "tlslib-multi.so"} 781 {"Shared library with TLS and versioning" 782 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver" "" 783 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s} 784 {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-ver.got}} 785 "tlslib-o32-ver.so"} 786 {"Dynamic executable with TLS and versioning" 787 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so" "" 788 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s tlsdyn-o32-2.s} 789 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-1.d} {objdump -Rsj.got tlsdyn-o32-1.got}} 790 "tls-dynamic-o32-ver"} 791 {"Dynamic executable with TLS and versioning (order 2)" 792 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o" "" 793 "-EB -march=mips1 -32 -KPIC" {} 794 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-2.d} {objdump -Rsj.got tlsdyn-o32-2.got}} 795 "tls-dynamic-o32-ver-2"} 796 {"Dynamic executable with TLS and versioning (order 3)" 797 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o" "" 798 "-EB -march=mips1 -32 -KPIC" {} 799 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-3.d} {objdump -Rsj.got tlsdyn-o32-3.got}} 800 "tls-dynamic-o32-ver-3"} 801 {"Shared library with TLS and hidden symbols" 802 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver" "" 803 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s} 804 {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-hidden.got}} 805 "tlslib-o32-hidden.so"} 806 {"Shared library with TLS and hidden symbols (2)" 807 "-shared -melf32btsmip -T mips-lib.ld" "" 808 "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s} 809 {{objdump -drj.text tls-hidden2.d} {objdump -sj.got tls-hidden2-got.d}} 810 "tls-hidden2.so"} 811 {"Shared library with TLS and hidden symbols (3)" 812 "-shared -melf32btsmip -T tls-hidden3.ld" "" 813 "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s} 814 {{objdump -dj.text tls-hidden3.d} {objdump -sj.got tls-hidden3.got} 815 {readelf --relocs tls-hidden3.r}} 816 "tls-hidden3.so"} 817 {"Shared library with TLS and hidden symbols (4)" 818 "-shared -melf32btsmip -T tls-hidden3.ld" "" 819 "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s} 820 {{objdump -sj.got tls-hidden4.got} {readelf --relocs tls-hidden4.r}} 821 "tls-hidden4.so"} 822} 823 824if {[istarget mips*-*-linux*]} { 825 run_ld_link_tests $mips_tls_tests 826} 827 828set mips16_call_global_test [list \ 829 [list "Global calls from mips16" \ 830 "$abi_ldflags(o32) -T no-shared-1.ld" "" \ 831 "$abi_asflags(o32) -mips32r2" \ 832 {mips16-call-global-1.s mips16-call-global-2.s mips16-call-global-3.s} \ 833 {{objdump -dr mips16-call-global.d}} \ 834 "mips16-call-global"]] 835 836run_ld_link_tests $mips16_call_global_test 837 838set mips16_intermix_test [list \ 839 [list "Intermixing mips32 and mips16 functions" \ 840 "$abi_ldflags(o32)" "" \ 841 "$abi_asflags(o32) -mips32r2" \ 842 {mips16-intermix-1.s mips16-intermix-2.s} \ 843 {{objdump -t mips16-intermix.d}} \ 844 "mips16-intermix"]] 845 846run_ld_link_tests $mips16_intermix_test 847 848run_dump_test "mips16-local-stubs-1" 849 850set mips16_fp_stub_test [list \ 851 [list "Floating-point stub for mips16 functions" \ 852 "$abi_ldflags(o32)" "" \ 853 "$abi_asflags(o32) -mips32r2" \ 854 {mips16-fp-stub-1.s mips16-fp-stub-2.s} \ 855 {{readelf --debug-dump=frames mips16-fp-stub.d}} \ 856 "mips16-fp-stub"]] 857 858run_ld_link_tests $mips16_fp_stub_test 859 860set o32flagslist [list [list as $abi_asflags(o32)] [list ld $abi_ldflags(o32)]] 861 862foreach firstfpabi [list 0 1 2 3 4 5 6 7 ] { 863 foreach secondfpabi [list 4 5 6 7 ] { 864 run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" $o32flagslist 865 } 866} 867foreach firstfpabi [list 4 5 6 7 ] { 868 foreach secondfpabi [list 0 1 2 3 8 9] { 869 run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" $o32flagslist 870 } 871} 872foreach firstfpabi [list 0 1 2 3 ] { 873 foreach secondfpabi [list 0 1 2 3 8 9] { 874 run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" 875 } 876} 877 878run_dump_test "attr-gnu-4-81" 879 880run_dump_test "attr-gnu-8-00" 881run_dump_test "attr-gnu-8-01" 882run_dump_test "attr-gnu-8-02" 883run_dump_test "attr-gnu-8-10" 884run_dump_test "attr-gnu-8-11" 885run_dump_test "attr-gnu-8-12" 886run_dump_test "attr-gnu-8-20" 887run_dump_test "attr-gnu-8-21" 888run_dump_test "attr-gnu-8-22" 889 890run_dump_test "attr-gnu-4-0-ph" $o32flagslist 891run_dump_test "attr-gnu-4-1-ph" $o32flagslist 892run_dump_test "attr-gnu-4-2-ph" $o32flagslist 893run_dump_test "attr-gnu-4-3-ph" $o32flagslist 894run_dump_test "attr-gnu-4-4-ph" $o32flagslist 895run_dump_test "attr-gnu-4-5-ph" $o32flagslist 896run_dump_test "attr-gnu-4-6-ph" $o32flagslist 897run_dump_test "attr-gnu-4-7-ph" $o32flagslist 898 899if $has_newabi { 900 run_dump_test "attr-gnu-4-0-n32-ph" 901 run_dump_test "attr-gnu-4-1-n32-ph" 902 run_dump_test "attr-gnu-4-2-n32-ph" 903 run_dump_test "attr-gnu-4-3-n32-ph" 904 run_dump_test "attr-gnu-4-0-n64-ph" 905 run_dump_test "attr-gnu-4-1-n64-ph" 906 run_dump_test "attr-gnu-4-2-n64-ph" 907 run_dump_test "attr-gnu-4-3-n64-ph" 908} 909 910run_dump_test "abiflags-strip1-ph" $o32flagslist 911run_dump_test "abiflags-strip2-ph" $o32flagslist 912run_dump_test "abiflags-strip3-ph" $o32flagslist 913run_dump_test "abiflags-strip4-ph" $o32flagslist 914run_dump_test "abiflags-strip5-ph" $o32flagslist 915run_dump_test "abiflags-strip6-ph" $o32flagslist 916run_dump_test "abiflags-strip7-ph" $o32flagslist 917run_dump_test "abiflags-strip8-ph" $o32flagslist 918run_dump_test "abiflags-strip9-ph" $o32flagslist 919run_dump_test "abiflags-strip10-ph" $o32flagslist 920 921run_dump_test "nan-legacy" 922run_dump_test "nan-2008" 923run_dump_test "nan-mixed-1" 924run_dump_test "nan-mixed-2" 925 926if { $linux_gnu } { 927 run_ld_link_tests { 928 {"GOT and versioning 1" 929 "-shared -melf32btsmip --version-script got-vers-1.ver" "" 930 "-EB -mips2 -32" {got-vers-1a.s got-vers-1b.s} 931 {{readelf -d got-vers-1.dd} 932 {readelf --symbols got-vers-1.sd} 933 {readelf --relocs got-vers-1.rd}} 934 "got-vers-1.so"} 935 } 936} 937 938run_dump_test "undefined" 939 940# Test the conversion from jr to b 941if { $linux_gnu } { 942 run_dump_test "jr-to-b-1" 943 run_dump_test "jr-to-b-2" 944} 945 946# MIPS16 and microMIPS interlinking test. 947run_dump_test "mips16-and-micromips" 948 949# Export class call relocation tests. 950set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]] 951foreach { abi } $abis { 952 set loadaddr [string map \ 953 {o32 0x12340000 n32 0x12340000 n64 0x123456789abc0000} $abi] 954 set suff [subst \ 955 [expr { [istarget *-*-irix*] \ 956 ? [string map {o32 o32-irix n32 n32 n64 n64} $abi] \ 957 : $abi }]] 958 run_ld_link_tests [list \ 959 [list \ 960 "MIPS export class call relocation test ($abi)" \ 961 "$abi_ldflags($abi) -shared -Ttext $loadaddr -T export-class-call16.ld" "" \ 962 "$abi_asflags($abi) -mips3 -KPIC" \ 963 [list export-class-call16-${abi}.s export-class-call16-def.s] \ 964 [list \ 965 "objdump -d export-class-call16-${suff}.dd" \ 966 "readelf -A export-class-call16-${abi}.gd"] \ 967 "export-class-call16-${abi}.so"]] 968} 969 970# Magic __ehdr_start symbol tests. 971set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]] 972foreach { abi } $abis { 973 set suff [string map {o32 o32 n32 new n64 new} $abi] 974 run_ld_link_tests [list \ 975 [list \ 976 "MIPS magic __ehdr_start symbol test 1 ($abi)" \ 977 "$abi_ldflags($abi) -T ehdr_start-1.ld" "" \ 978 "$abi_asflags($abi)" \ 979 [list ehdr_start-${suff}.s] \ 980 [list "readelf -s ehdr_start-1.nd"] \ 981 "ehdr_start-1-${abi}"]] 982 run_ld_link_tests [list \ 983 [list \ 984 "MIPS magic __ehdr_start symbol test 2 ($abi)" \ 985 "$abi_ldflags($abi) -T ehdr_start-2.ld" "" \ 986 "$abi_asflags($abi)" \ 987 [list ehdr_start-${suff}.s] \ 988 [list "readelf -s ehdr_start-2.nd"] \ 989 "ehdr_start-2-${abi}"]] 990} 991 992# R_MIPS_JALR reloc tests. 993set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]] 994foreach { abi } $abis { 995 run_ld_link_tests [list \ 996 [list \ 997 "MIPS JALR reloc test ($abi)" \ 998 "$abi_ldflags($abi) -T jalr3.ld" "" \ 999 "$abi_asflags($abi)" \ 1000 [list ../../../gas/testsuite/gas/mips/jalr3.s] \ 1001 [list "objdump -d jalr3.dd"] \ 1002 "jalr3-${abi}"]] 1003} 1004 1005proc build_mips_plt_lib { abi } { 1006 global abi_asflags 1007 global abi_ldflags 1008 1009 run_ld_link_tests [list \ 1010 [list "Shared $abi library for compressed PLT tests" \ 1011 "-shared $abi_ldflags($abi)" "" \ 1012 "$abi_asflags($abi)" \ 1013 { compressed-plt-1-dyn.s } \ 1014 {} \ 1015 "compressed-plt-1-${abi}-dyn.so"]] 1016} 1017 1018proc run_mips_plt_test { name abi filter micromips suffix {extra {}} } { 1019 global abi_asflags 1020 global abi_ldflags 1021 1022 set as_flags "$abi_asflags($abi) --defsym filter=$filter" 1023 append as_flags " --defsym micromips=$micromips --defsym $abi=1" 1024 if {[string equal $abi o32]} { 1025 append as_flags " -march=mips2" 1026 } 1027 set ld_flags "$abi_ldflags($abi) -T compressed-plt-1.ld" 1028 set dynobj "tmpdir/compressed-plt-1-${abi}-dyn.so" 1029 set files [list] 1030 if { $filter & 7 } { 1031 lappend files compressed-plt-1a.s 1032 } 1033 if { $filter & 56 } { 1034 lappend files compressed-plt-1b.s 1035 } 1036 if { $filter & 64 } { 1037 lappend files compressed-plt-1c.s 1038 } 1039 eval [list lappend files] $extra 1040 set readelf_flags "-A --syms --relocs -d" 1041 if { [string match "*word*" $suffix] } { 1042 append readelf_flags " -x.data" 1043 } 1044 set objdump_flags "-d -Mgpr-names=numeric" 1045 set basename "compressed-plt-1-${abi}-${suffix}" 1046 run_ld_link_tests [list \ 1047 [list "$name" $ld_flags $dynobj \ 1048 "$as_flags" $files \ 1049 [list [list readelf $readelf_flags ${basename}.rd] \ 1050 [list objdump $objdump_flags ${basename}.od]] \ 1051 $basename]] 1052} 1053 1054if { $linux_gnu } { 1055 build_mips_plt_lib o32 1056 run_mips_plt_test "o32 PLTs for standard encoding" o32 104 0 se 1057 run_mips_plt_test "o32 PLTs for standard branches" o32 16 0 branch 1058 run_mips_plt_test "o32 PLTs for MIPS16 encoding" o32 69 0 mips16-only 1059 run_mips_plt_test "o32 PLTs for MIPS16 branches" o32 2 0 mips16-bronly 1060 run_mips_plt_test "o32 PLTs for microMIPS encoding" o32 69 1 umips-only 1061 run_mips_plt_test "o32 PLTs for microMIPS branches" o32 2 1 umips-bronly 1062 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16" \ 1063 o32 109 0 mips16 1064 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 branches" \ 1065 o32 18 0 mips16-branch 1066 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with %got" \ 1067 o32 109 0 mips16-got compressed-plt-1d.s 1068 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with .word" \ 1069 o32 109 0 mips16-word compressed-plt-1e.s 1070 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS" \ 1071 o32 109 1 umips 1072 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS branches" \ 1073 o32 18 1 umips-branch 1074 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with %got" \ 1075 o32 109 1 umips-got compressed-plt-1d.s 1076 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with .word" \ 1077 o32 109 1 umips-word compressed-plt-1e.s 1078 1079 if $has_newabi { 1080 build_mips_plt_lib n32 1081 run_mips_plt_test "n32 PLTs for mixed MIPS and MIPS16" \ 1082 n32 109 0 mips16 1083 run_mips_plt_test "n32 PLTs for mixed MIPS and microMIPS" \ 1084 n32 109 1 umips 1085 } 1086} 1087 1088# PR ld/19908 export class tests. 1089if { $linux_gnu } { 1090 run_ld_link_tests [list \ 1091 [list "Shared library for MIPS export class symbol reference tests" \ 1092 "$abi_ldflags(o32) -shared" "" \ 1093 "$abi_asflags(o32)" \ 1094 { export-class-ref-f2.s } \ 1095 { { readelf --dyn-syms export-class-ref-lib.sd } } \ 1096 "export-class-ref-lib.so"]] 1097 foreach { class flag } { internal 1 hidden 2 protected 3 } { 1098 run_ld_link_tests [list \ 1099 [list "MIPS $class symbol reference test 1" \ 1100 "$abi_ldflags(o32) -e f0" "tmpdir/export-class-ref-lib.so" \ 1101 "$abi_asflags(o32) --defsym defv=$flag" \ 1102 { export-class-ref-f0.s export-class-ref-f1.s } \ 1103 [list [list readelf --dyn-syms export-$class-ref.sd] \ 1104 [list readelf --dyn-syms export-local-ref.sd]] \ 1105 "export-$class-ref"] \ 1106 [list "MIPS $class symbol reference test 2" \ 1107 "$abi_ldflags(o32) -e f0" "tmpdir/export-class-ref-lib.so" \ 1108 "$abi_asflags(o32) --defsym defv=$flag --defsym refv=$flag" \ 1109 { export-class-ref-f0.s export-class-ref-f1.s } \ 1110 [list [list readelf --dyn-syms export-$class-ref.sd] \ 1111 [list readelf --dyn-syms export-local-ref.sd]] \ 1112 "export-$class-ref"]] 1113 } 1114} 1115