1# Expect script for MIPS ELF linker 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 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 -T} 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 55# run_dump_test_abi ABI NAME ARGS 56# 57# Invoke "run_dump_test" for test NAME using ABI if supported by the 58# target used, passing predefined ABI-specific arguments. ARGS are 59# as with "run_dump_test" and are appended to ABI-specific arguments, 60# except for the special "noarch" keyword, which, if present, must 61# appear first and is consumed causing any "-march=" option to be 62# removed from ABI-specific GAS arguments. 63proc run_dump_test_abi { abi name args } { 64 global abi_asflags 65 global abi_ldflags 66 global has_abi 67 68 set args [lindex $args 0] 69 set asflags $abi_asflags($abi) 70 set ldflags $abi_ldflags($abi) 71 if { [lindex $args 0] == "noarch" } { 72 set asflags [regsub -- {-march=[^[:blank:]]*} $asflags {}] 73 set args [lreplace $args 0 0] 74 } 75 if !$has_abi($abi) { 76 lappend args {notarget *-*-*} 77 } 78 if { [llength $args] > 0 } { 79 run_dump_test $name [concat [list [list as $asflags] \ 80 [list ld $ldflags]] \ 81 $args] 82 } else { 83 run_dump_test $name [list [list as $asflags] [list ld $ldflags]] 84 } 85} 86 87# run_dump_test_o32 NAME ARGS 88# 89# Invoke "run_dump_test_abi" for test NAME using the o32 ABI and 90# passing ARGS. 91proc run_dump_test_o32 { name args } { 92 run_dump_test_abi o32 $name [lindex $args 0] 93} 94 95# run_dump_test_n32 NAME ARGS 96# 97# Invoke "run_dump_test_abi" for test NAME using the n32 ABI and 98# passing ARGS. 99proc run_dump_test_n32 { name args } { 100 run_dump_test_abi n32 $name [lindex $args 0] 101} 102 103# run_dump_test_n64 NAME ARGS 104# 105# Invoke "run_dump_test_abi" for test NAME using the n64 ABI and 106# passing ARGS. 107proc run_dump_test_n64 { name args } { 108 run_dump_test_abi n64 $name [lindex $args 0] 109} 110 111# run_dump_test_eabi NAME ARGS 112# 113# Invoke "run_dump_test_abi" for test NAME using the eabi ABI and 114# passing ARGS. 115proc run_dump_test_eabi { name args } { 116 run_dump_test_abi eabi $name [lindex $args 0] 117} 118 119set has_abi(o32) [expr ![istarget *-*-openbsd*] \ 120 && ![istarget mips64*el-ps2-elf*]] 121set has_abi(n32) [expr [istarget *-img-elf*] \ 122 || [istarget *-mti-elf*] \ 123 || [istarget mips64*el-ps2-elf*] \ 124 || [istarget *-sde-elf*] \ 125 || [istarget *-*-freebsd*] \ 126 || [istarget *-*-irix6*] \ 127 || [istarget *-*-kfreebsd*-gnu] \ 128 || [istarget *-*-linux*]] 129set has_abi(n64) [expr [istarget *-*-freebsd*] \ 130 || [istarget *-*-irix6*] \ 131 || [istarget *-*-kfreebsd*-gnu] \ 132 || [istarget *-*-linux*] \ 133 || [istarget *-*-netbsd*] \ 134 || [istarget *-*-openbsd*]] 135set has_abi(eabi) [expr [istarget *-*-elf] \ 136 && $has_abi(o32)] 137set irix [expr [istarget *-*-irix*]] 138set linux_gnu [expr [istarget mips*-*-linux*]] 139set embedded_elf [expr [istarget mips*-*-elf]] 140 141# Set defaults. 142set abi_asflags(o32) "" 143set abi_asflags(n32) "" 144set abi_asflags(n64) "" 145set abi_asflags(eabi) "" 146set abi_ldflags(o32) "" 147set abi_ldflags(n32) "" 148set abi_ldflags(n64) "" 149set abi_ldflags(eabi) "" 150 151# Override as needed. 152if {[istarget *-*-openbsd*] } { 153 set irixemul 0 154} elseif { [istarget mips64*-*-linux*] } { 155 if [istarget *el-*-*] { 156 set abi_asflags(o32) -32 157 set abi_ldflags(o32) -melf32ltsmip 158 set abi_asflags(n64) "-march=from-abi -64" 159 set abi_ldflags(n64) -melf64ltsmip 160 } else { 161 set abi_asflags(o32) -32 162 set abi_ldflags(o32) -melf32btsmip 163 set abi_asflags(n64) "-march=from-abi -64" 164 set abi_ldflags(n64) -melf64btsmip 165 } 166 set irixemul 0 167} elseif {[istarget *-*-linux*] } { 168 if [istarget *el-*-*] { 169 set abi_asflags(n32) "-march=from-abi -n32" 170 set abi_ldflags(n32) -melf32ltsmipn32 171 set abi_asflags(n64) "-march=from-abi -64" 172 set abi_ldflags(n64) -melf64ltsmip 173 } else { 174 set abi_asflags(n32) "-march=from-abi -n32" 175 set abi_ldflags(n32) -melf32btsmipn32 176 set abi_asflags(n64) "-march=from-abi -64" 177 set abi_ldflags(n64) -melf64btsmip 178 } 179 set irixemul 0 180} elseif {[istarget *-img-elf*] \ 181 || [istarget *-mti-elf*] \ 182 || [istarget *-sde-elf*] \ 183 || [istarget *-*-netbsd*] \ 184 || [istarget *-*-linux*] \ 185 || [istarget *-*-sysv4*] } { 186 if [istarget *el-*-*] { 187 set abi_asflags(o32) -32 188 set abi_asflags(n32) "-march=from-abi -n32" 189 set abi_ldflags(n32) -melf32ltsmipn32 190 set abi_asflags(n64) "-march=from-abi -64" 191 set abi_ldflags(n64) -melf64ltsmip 192 } else { 193 set abi_asflags(o32) -32 194 set abi_asflags(n32) "-march=from-abi -n32" 195 set abi_ldflags(n32) -melf32btsmipn32 196 set abi_asflags(n64) "-march=from-abi -64" 197 set abi_ldflags(n64) -melf64btsmip 198 } 199 set irixemul 0 200} elseif { [istarget mips64*-*-freebsd*] \ 201 || [istarget mips64*-*-kfreebsd*-gnu] } { 202 if [istarget *el-*-*] { 203 set abi_asflags(o32) -32 204 set abi_ldflags(o32) -melf32ltsmip_fbsd 205 set abi_asflags(n64) "-march=from-abi -64" 206 set abi_ldflags(n64) -melf64ltsmip_fbsd 207 } else { 208 set abi_asflags(o32) -32 209 set abi_ldflags(o32) -melf32btsmip_fbsd 210 set abi_asflags(n64) "-march=from-abi -64" 211 set abi_ldflags(n64) -melf64btsmip_fbsd 212 } 213 set irixemul 0 214} elseif { [istarget *-*-freebsd*] \ 215 || [istarget *-*-kfreebsd*-gnu] } { 216 if [istarget *el-*-*] { 217 set abi_asflags(n32) "-march=from-abi -n32" 218 set abi_ldflags(n32) -melf32ltsmipn32_fbsd 219 set abi_asflags(n64) "-march=from-abi -64" 220 set abi_ldflags(n64) -melf64ltsmip_fbsd 221 } else { 222 set abi_asflags(n32) "-march=from-abi -n32" 223 set abi_ldflags(n32) -melf32btsmipn32_fbsd 224 set abi_asflags(n64) "-march=from-abi -64" 225 set abi_ldflags(n64) -melf64btsmip_fbsd 226 } 227 set irixemul 0 228} elseif { [istarget *vr4100*-*-elf*] \ 229 || [istarget *vr4300*-*-elf*] \ 230 || [istarget *vr5000*-*-elf*] } { 231 set abi_asflags(o32) -32 232 set irixemul 1 233} elseif { [istarget mips64*el-ps2-elf*] } { 234 set abi_asflags(o32) -32 235 set abi_ldflags(o32) -melf32lr5900 236 set irixemul 1 237} elseif { [istarget *-*-elf*] \ 238 || [istarget *-*-rtems*] } { 239 set abi_asflags(o32) -32 240 set irixemul 1 241} elseif { [istarget *-*-irix6*] } { 242 set abi_asflags(o32) -32 243 set abi_asflags(n64) "-march=from-abi -64" 244 set abi_ldflags(o32) -melf32bsmip 245 set abi_ldflags(n64) -melf64bmip 246 set irixemul 1 247} else { 248 set abi_asflags(o32) -32 249 set irixemul 1 250} 251set tmips [expr $irixemul ? {""} : {"t"}] 252 253if { $linux_gnu } { 254 run_ld_link_tests [list \ 255 [list "Dummy shared library for MIPS16 PIC test 1" \ 256 "-shared -melf32btsmip" "" \ 257 "-EB -32 -mips1" \ 258 { mips16-pic-1-dummy.s } \ 259 {} \ 260 "mips16-pic-1-dummy.so"] \ 261 [list "MIPS16 PIC test 1" \ 262 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \ 263 "-EB -32 -mips1 -I $srcdir/$subdir" \ 264 { mips16-pic-1a.s mips16-pic-1b.s } \ 265 { { objdump { -dr -j.text } mips16-pic-1.dd } 266 { readelf -A mips16-pic-1.gd } } \ 267 "mips16-pic-1"] \ 268 [list "MIPS16 PIC test 2" \ 269 "-melf32btsmip -T mips16-pic-1.ld -shared" "" \ 270 "-EB -32 -mips1 -I $srcdir/$subdir" \ 271 { mips16-pic-2a.s mips16-pic-2b.s } \ 272 { { objdump { -dr -j.text } mips16-pic-2.dd } \ 273 { readelf -A mips16-pic-2.gd } \ 274 { readelf --symbols mips16-pic-2.nd } \ 275 { readelf --relocs mips16-pic-2.rd } \ 276 { readelf -d mips16-pic-2.ad } } \ 277 "mips16-pic-2"] \ 278 [list "MIPS16 PIC test 3" \ 279 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \ 280 "-EB -32 -mips1 -I $srcdir/$subdir" \ 281 { mips16-pic-3a.s mips16-pic-3b.s } \ 282 { { objdump -dr mips16-pic-3.dd } \ 283 { readelf --relocs mips16-pic-3.rd } \ 284 { readelf -A mips16-pic-3.gd } } \ 285 "mips16-pic-3"] \ 286 [list "MIPS16 PIC test 4 (shared library)" \ 287 "-shared -melf32btsmip -T mips16-pic-1.ld --version-script mips16-pic-4.ver" "" \ 288 "-EB -32 -mips1" \ 289 { mips16-pic-4a.s mips16-pic-4b.s } \ 290 { { objdump -dr mips16-pic-4a.dd } \ 291 { readelf --symbols mips16-pic-4a.nd } \ 292 { readelf -A mips16-pic-4a.gd } } \ 293 "mips16-pic-4.so"] \ 294 [list "MIPS16 PIC test 4 (executable)" \ 295 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-4.so" "" \ 296 "-EB -32 -mips1" \ 297 { mips16-pic-4c.s } \ 298 { { objdump -dr mips16-pic-4b.dd } } \ 299 "mips16-pic-4"]] 300} 301 302# Check MIPS16 markings being passed through link. 303run_dump_test "mips16-1" 304 305# MIPS branch offset final link checking. 306run_dump_test "branch-misc-1" 307run_dump_test "branch-misc-2" 308run_dump_test_o32 "branch-absolute" 309run_dump_test_o32 "branch-absolute-addend" 310run_dump_test_n32 "branch-absolute-n32" 311run_dump_test_n32 "branch-absolute-addend-n32" 312run_dump_test_n64 "branch-absolute-n64" 313run_dump_test_n64 "branch-absolute-addend-n64" 314 315run_dump_test_o32 "mips16-pcrel-0" 316run_dump_test_o32 "mips16-pcrel-1" noarch 317run_dump_test_o32 "mips16e2-pcrel-0" noarch 318run_dump_test_o32 "mips16e2-pcrel-1" noarch 319run_dump_test_o32 "mips16-pcrel-addend-2" 320run_dump_test_o32 "mips16-pcrel-addend-6" 321run_dump_test_o32 "mips16e2-pcrel-addend-2" noarch 322run_dump_test_o32 "mips16e2-pcrel-addend-6" noarch 323run_dump_test_n32 "mips16-pcrel-n32-0" 324run_dump_test_n32 "mips16-pcrel-n32-1" 325run_dump_test_n64 "mips16-pcrel-n64-sym32-0" 326run_dump_test_n64 "mips16-pcrel-n64-sym32-1" 327run_dump_test_n32 "mips16e2-pcrel-n32-0" noarch 328run_dump_test_n32 "mips16e2-pcrel-n32-1" noarch 329run_dump_test_n64 "mips16e2-pcrel-n64-sym32-0" noarch 330run_dump_test_n64 "mips16e2-pcrel-n64-sym32-1" noarch 331 332run_dump_test_o32 "mips16-branch-2" 333run_dump_test_o32 "mips16-branch-3" 334run_dump_test_o32 "mips16-branch-addend-2" 335run_dump_test_o32 "mips16-branch-addend-3" 336run_dump_test_o32 "mips16-branch-absolute" 337run_dump_test_o32 "mips16-branch-absolute-1" 338run_dump_test_o32 "mips16-branch-absolute-2" 339run_dump_test_o32 "mips16-branch-absolute-addend" 340run_dump_test_o32 "mips16-branch-absolute-addend-1" 341run_dump_test_n32 "mips16-branch-absolute-n32" 342run_dump_test_n32 "mips16-branch-absolute-n32-1" 343run_dump_test_n32 "mips16-branch-absolute-n32-2" 344run_dump_test_n32 "mips16-branch-absolute-addend-n32" 345run_dump_test_n32 "mips16-branch-absolute-addend-n32-1" 346run_dump_test_n64 "mips16-branch-absolute-n64" 347run_dump_test_n64 "mips16-branch-absolute-n64-1" 348run_dump_test_n64 "mips16-branch-absolute-n64-2" 349run_dump_test_n64 "mips16-branch-absolute-addend-n64" 350run_dump_test_n64 "mips16-branch-absolute-addend-n64-1" 351 352run_dump_test_o32 "micromips-branch-absolute" 353run_dump_test_o32 "micromips-branch-absolute-addend" 354run_dump_test_n32 "micromips-branch-absolute-n32" 355run_dump_test_n32 "micromips-branch-absolute-addend-n32" 356run_dump_test_n64 "micromips-branch-absolute-n64" 357run_dump_test_n64 "micromips-branch-absolute-addend-n64" 358 359# Jalx test 360run_dump_test "jalx-1" 361 362if { $linux_gnu } { 363 run_ld_link_tests [list \ 364 [list "Dummy shared library for JALX test 2" \ 365 "-shared -nostdlib -melf32btsmip" "" \ 366 "-G0 -EB -mmicromips -no-mdebug -mabi=32 -march=mips32r2 -KPIC" \ 367 { jalx-2-printf.s } \ 368 {} \ 369 "libjalx-2.so"] \ 370 [list "Dummy external function for JALX test 2" \ 371 "-r -melf32btsmip" "" \ 372 "-G0 -EB -no-mdebug -mabi=32 -march=mips32r2 -mno-shared -call_nonpic" \ 373 { jalx-2-ex.s } \ 374 {} \ 375 "jalx-2-ex.o.r"] \ 376 [list "MIPS JALX test 2" \ 377 "-nostdlib -T jalx-2.ld tmpdir/libjalx-2.so tmpdir/jalx-2-ex.o.r -melf32btsmip" "" \ 378 "-G0 -EB -mmicromips -no-mdebug -mabi=32 -march=mips32r2 -mno-shared -call_nonpic" \ 379 { jalx-2-main.s } \ 380 { { objdump -d jalx-2.dd } } \ 381 "jalx-2"]] 382} 383 384run_dump_test_o32 "jalx-addend" 385run_dump_test_o32 "jalx-local" 386run_dump_test_o32 "bal-jalx-addend" 387run_dump_test_o32 "bal-jalx-addend-micromips" 388run_dump_test_o32 "bal-jalx-local" 389run_dump_test_o32 "bal-jalx-local-micromips" 390run_dump_test_o32 "bal-jalx-pic" 391run_dump_test_o32 "bal-jalx-pic-micromips" 392run_dump_test_o32 "bal-jalx-pic-ignore" 393run_dump_test_o32 "bal-jalx-pic-ignore-micromips" 394run_dump_test_n32 "jalx-addend-n32" 395run_dump_test_n32 "jalx-local-n32" 396run_dump_test_n32 "bal-jalx-addend-n32" 397run_dump_test_n32 "bal-jalx-addend-micromips-n32" 398run_dump_test_n32 "bal-jalx-local-n32" 399run_dump_test_n32 "bal-jalx-local-micromips-n32" 400run_dump_test_n32 "bal-jalx-pic-n32" 401run_dump_test_n32 "bal-jalx-pic-micromips-n32" 402run_dump_test_n32 "bal-jalx-pic-ignore-n32" 403run_dump_test_n32 "bal-jalx-pic-ignore-micromips-n32" 404run_dump_test_n64 "jalx-addend-n64" 405run_dump_test_n64 "jalx-local-n64" 406run_dump_test_n64 "bal-jalx-addend-n64" 407run_dump_test_n64 "bal-jalx-addend-micromips-n64" 408run_dump_test_n64 "bal-jalx-local-n64" 409run_dump_test_n64 "bal-jalx-local-micromips-n64" 410run_dump_test_n64 "bal-jalx-pic-n64" 411run_dump_test_n64 "bal-jalx-pic-micromips-n64" 412run_dump_test_n64 "bal-jalx-pic-ignore-n64" 413run_dump_test_n64 "bal-jalx-pic-ignore-micromips-n64" 414 415run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]] 416run_dump_test "unaligned-jalx-1" [list [list ld $abi_ldflags(o32)]] 417run_dump_test "unaligned-jalx-2" [list [list ld $abi_ldflags(o32)]] 418run_dump_test "unaligned-jalx-3" [list [list ld $abi_ldflags(o32)]] 419run_dump_test "unaligned-jalx-mips16-0" [list [list ld $abi_ldflags(o32)]] 420run_dump_test "unaligned-jalx-mips16-1" [list [list ld $abi_ldflags(o32)]] 421run_dump_test "unaligned-jalx-micromips-0" [list [list ld $abi_ldflags(o32)]] 422run_dump_test "unaligned-jalx-micromips-1" [list [list ld $abi_ldflags(o32)]] 423 424run_dump_test_n32 "unaligned-jalx-addend-0" 425run_dump_test_n32 "unaligned-jalx-addend-1" 426run_dump_test_n32 "unaligned-jalx-addend-2" 427run_dump_test_n32 "unaligned-jalx-addend-3" 428run_dump_test_n32 "unaligned-jalx-addend-mips16-0" 429run_dump_test_n32 "unaligned-jalx-addend-mips16-1" 430run_dump_test_n32 "unaligned-jalx-addend-micromips-0" 431run_dump_test_n32 "unaligned-jalx-addend-micromips-1" 432 433run_dump_test_o32 "unaligned-branch" noarch 434 435run_dump_test_n32 "unaligned-branch-2" 436run_dump_test_n32 "unaligned-branch-ignore-2" 437run_dump_test_n32 "unaligned-branch-r6-1" 438run_dump_test_n32 "unaligned-branch-ignore-r6-1" 439run_dump_test_n32 "unaligned-branch-r6-2" noarch 440run_dump_test_n32 "unaligned-branch-mips16" 441run_dump_test_n32 "unaligned-branch-ignore-mips16" 442run_dump_test_n32 "unaligned-branch-micromips" 443run_dump_test_n32 "unaligned-branch-ignore-micromips" 444run_dump_test_n32 "unaligned-jump" 445run_dump_test_n32 "unaligned-jump-mips16" 446run_dump_test_n32 "unaligned-jump-micromips" 447 448run_dump_test_o32 "unaligned-lwpc-0" noarch 449run_dump_test_o32 "unaligned-lwpc-1" noarch 450run_dump_test_o32 "unaligned-ldpc-0" noarch 451run_dump_test_o32 "unaligned-ldpc-1" noarch 452 453# Test multi-got link. We only do this on GNU/Linux because it requires 454# the "traditional" emulations. 455if { $linux_gnu } { 456 run_dump_test_o32 "multi-got-1" 457 run_dump_test_o32 "multi-got-no-shared" 458 run_dump_test_o32 "multi-got-hidden-1" 459 run_dump_test_o32 "multi-got-hidden-2" 460} 461 462# Test __gnu_local_gp accesses 463if { $linux_gnu } { 464 run_dump_test_o32 "no-shared-1-o32" 465 run_dump_test_n32 "no-shared-1-n32" 466 run_dump_test_n64 "no-shared-1-n64" {{as -EB} {ld -EB}} 467} 468 469# Test PIE debug dynamic tags 470if { $linux_gnu } { 471 run_dump_test_o32 "pie-o32" 472 run_dump_test_n32 "pie-n32" 473 run_dump_test_n64 "pie-n64" 474} 475 476if { $embedded_elf } { 477 run_dump_test_n32 "elf-rel-got-n32-embed" {{as -EB} {ld -EB}} 478 run_dump_test_n32 "elf-rel-xgot-n32-embed" {{as -EB} {ld -EB}} 479} else { 480 run_dump_test_n32 "elf-rel-got-n32" {{as -EB} {ld -EB}} 481 run_dump_test_n32 "elf-rel-xgot-n32" {{as -EB} {ld -EB}} 482} 483if { $irix } { 484 run_dump_test_n64 "elf-rel-got-n64-irix" 485 run_dump_test_n64 "elf-rel-xgot-n64-irix" 486} elseif { $embedded_elf } { 487 run_dump_test_n64 "elf-rel-got-n64-embed" {{as -EB} {ld -EB}} 488 run_dump_test_n64 "elf-rel-xgot-n64-embed" {{as -EB} {ld -EB}} 489} else { 490 run_dump_test_n64 "elf-rel-got-n64" {{as -EB} {ld -EB}} 491 run_dump_test_n64 "elf-rel-xgot-n64" {{as -EB} {ld -EB}} 492} 493 494run_dump_test_n32 "relax-jalr-n32" {{as -EB} {ld -EB}} 495run_dump_test_n32 "relax-jalr-n32-shared" {{as -EB} {ld -EB}} 496run_dump_test_n64 "relax-jalr-n64" {{as -EB} {ld -EB}} 497run_dump_test_n64 "relax-jalr-n64-shared" {{as -EB} {ld -EB}} 498 499if { $linux_gnu } { 500 run_dump_test_o32 "rel32-o32" {{as -EB} {ld -EB}} 501 run_dump_test_n32 "rel32-n32" {{as -EB} {ld -EB}} 502 run_dump_test_n64 "rel64" {{as -EB} {ld -EB}} 503 # The first test checks that a mixed PIC/non-PIC relocatable link 504 # will not introduce any stubs itself, but will flag PIC functions 505 # for the final link. 506 # 507 # The second test checks that we insert stubs for calls from 508 # non-PIC functions to PIC functions when linking the original 509 # two objects together. 510 # 511 # The third test checks that we do the same when linking the 512 # result of the first link (with no other source files). 513 # 514 # We then repeat the same three tests for microMIPS stubs. 515 run_ld_link_tests { 516 {"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip" "" 517 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s} 518 {{objdump -dr pic-and-nonpic-1-rel.dd} 519 {readelf --symbols pic-and-nonpic-1-rel.nd}} 520 "pic-and-nonpic-1-rel.o"} 521 {"PIC and non-PIC test 1 (static 1)" 522 "-melf32btsmip -Tpic-and-nonpic-1.ld" "" 523 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s} 524 {{objdump -dr pic-and-nonpic-1.dd} 525 {readelf --symbols pic-and-nonpic-1.nd}} 526 "pic-and-nonpic-1-static1.o"} 527 {"PIC and non-PIC test 1 R6 compact branches (static 1)" 528 "-melf32btsmip -Tpic-and-nonpic-1.ld --compact-branches" "" 529 "-32 -EB -mips32r6" {pic-and-nonpic-1a-r6.s pic-and-nonpic-1b.s} 530 {{objdump -dr pic-and-nonpic-1-r6.dd} 531 {readelf --symbols pic-and-nonpic-1-r6.nd}} 532 "pic-and-nonpic-1-r6-static1.o"} 533 {"PIC and non-PIC test 1 (static 2)" 534 "-melf32btsmip -Tpic-and-nonpic-1.ld tmpdir/pic-and-nonpic-1-rel.o" "" 535 "" {} 536 {{objdump -dr pic-and-nonpic-1.dd} 537 {readelf --symbols pic-and-nonpic-1.nd}} 538 "pic-and-nonpic-1-static2.o"} 539 {"PIC and non-PIC test 1, microMIPS (relocatable)" 540 "-r -melf32btsmip" "" 541 "-32 -EB -mips2" 542 {pic-and-nonpic-1a-micromips.s pic-and-nonpic-1b-micromips.s} 543 {{objdump -dr pic-and-nonpic-1-micromips-rel.dd} 544 {readelf --symbols pic-and-nonpic-1-micromips-rel.nd}} 545 "pic-and-nonpic-1-micromips-rel.o"} 546 {"PIC and non-PIC test 1, microMIPS (static 1)" 547 "-melf32btsmip -Tpic-and-nonpic-1.ld" "" 548 "-32 -EB -mips2" 549 {pic-and-nonpic-1a-micromips.s pic-and-nonpic-1b-micromips.s} 550 {{objdump -dr pic-and-nonpic-1-micromips.dd} 551 {readelf --symbols pic-and-nonpic-1-micromips.nd}} 552 "pic-and-nonpic-1-micromips-static1.o"} 553 } 554 # The final executable produced with the following test is supposed 555 # to be the same as one produced with the preceding test, however 556 # as noted in PR ld/20453 it is not. Consequently output from 557 # `objdump -dr' is not the same either. Expect: 558 # 559 # regexp_diff match failure 560 # regexp "^ 4103c: f001 0415 jalx 41054 <f3>$" 561 # line " 4103c: f001 0400 jalx 41000 <.pic.f3>" 562 # 563 # from the test below due to this problem. 564 setup_kfail "mips*-*-*" "ld/20453" 565 # The final check below should be folded into the `run_ld_link_tests' 566 # call above once `setup_kfail' has been removed. 567 run_ld_link_tests { 568 {"PIC and non-PIC test 1, microMIPS (static 2)" 569 "-melf32btsmip -Tpic-and-nonpic-1.ld \ 570 tmpdir/pic-and-nonpic-1-micromips-rel.o" "" 571 "" {} 572 {{objdump -dr pic-and-nonpic-1-micromips.dd} 573 {readelf --symbols pic-and-nonpic-1-micromips.nd}} 574 "pic-and-nonpic-1-micromips-static2.o"} 575 } 576 run_dump_test_o32 "pic-and-nonpic-2" 577 run_ld_link_tests { 578 {"PIC and non-PIC test 3 (shared library)" 579 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" "" 580 "-32 -EB -mips2" {pic-and-nonpic-3a.s} 581 {{readelf --segments pic-and-nonpic-3a.sd} 582 {readelf -A pic-and-nonpic-3a.gd} 583 {objdump -dr pic-and-nonpic-3a.dd}} 584 "pic-and-nonpic-3a.so"} 585 {"PIC and non-PIC test 3 (executable)" 586 "-melf32btsmip -Tpic-and-nonpic-3b.ld tmpdir/pic-and-nonpic-3a.so" "" 587 "-32 -EB -mips2" {pic-and-nonpic-3b.s} 588 {{readelf --segments pic-and-nonpic-3b.sd} 589 {objdump -dr pic-and-nonpic-3b.dd} 590 {objdump {-s -j.got.plt} pic-and-nonpic-3b.pd} 591 {readelf -A pic-and-nonpic-3b.gd} 592 {readelf --relocs pic-and-nonpic-3b.rd} 593 {readelf --symbols pic-and-nonpic-3b.nd} 594 {readelf -d pic-and-nonpic-3b.ad}} 595 "pic-and-nonpic-3b"} 596 {"PIC and non-PIC test 3 R6 compact branches (shared library)" 597 "-melf32btsmip -shared --compact-branches -Tpic-and-nonpic-3a.ld" "" 598 "-32 -EB -mips32r6" {pic-and-nonpic-3a-r6.s} 599 {{readelf --segments pic-and-nonpic-3a.sd} 600 {readelf -A pic-and-nonpic-3a-r6.gd} 601 {objdump -dr pic-and-nonpic-3a-r6.dd}} 602 "pic-and-nonpic-3a-r6.so"} 603 } 604 run_dump_test_o32 "pic-and-nonpic-3-error" {noarch {as -EB} {ld -EB}} 605 run_ld_link_tests { 606 {"PIC and non-PIC test 4 (shared library)" 607 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" "" 608 "-32 -EB -mips2" {pic-and-nonpic-4a.s} 609 {} 610 "pic-and-nonpic-4a.so"} 611 {"PIC and non-PIC test 4 (executable)" 612 "-melf32btsmip -Tpic-and-nonpic-4b.ld tmpdir/pic-and-nonpic-4a.so" "" 613 "-32 -EB -mips2" {pic-and-nonpic-4b.s} 614 {{readelf --segments pic-and-nonpic-4b.sd} 615 {objdump -dr pic-and-nonpic-4b.dd} 616 {objdump {-s -j.got -j.data} pic-and-nonpic-4b.gd} 617 {readelf --relocs pic-and-nonpic-4b.rd} 618 {readelf --symbols pic-and-nonpic-4b.nd} 619 {readelf -d pic-and-nonpic-4b.ad}} 620 "pic-and-nonpic-4b"} 621 } 622 run_dump_test_o32 "pic-and-nonpic-4-error" {noarch {as -EB} {ld -EB}} 623 run_ld_link_tests { 624 {"PIC and non-PIC test 5 (executable)" 625 "-melf32btsmip -Tpic-and-nonpic-5b.ld tmpdir/pic-and-nonpic-3a.so tmpdir/pic-and-nonpic-4a.so" "" 626 "-32 -EB -mips2" {pic-and-nonpic-5a.s pic-and-nonpic-5b.s} 627 {{readelf --segments pic-and-nonpic-5b.sd} 628 {objdump -dr pic-and-nonpic-5b.dd} 629 {objdump {-s -j.got.plt -j.data} pic-and-nonpic-5b.pd} 630 {readelf -A pic-and-nonpic-5b.gd} 631 {readelf --relocs pic-and-nonpic-5b.rd} 632 {readelf --symbols pic-and-nonpic-5b.nd} 633 {readelf -d pic-and-nonpic-5b.ad}} 634 "pic-and-nonpic-5b"} 635 } 636 set abis {} 637 if $has_abi(o32) { 638 lappend abis o32 -32 elf32btsmip 639 } 640 if $has_abi(n32) { 641 lappend abis n32 -n32 elf32btsmipn32 642 } 643 if $has_abi(n64) { 644 lappend abis n64 -64 elf64btsmip 645 } 646 foreach { abi flag emul } $abis { 647 run_ld_link_tests [list \ 648 [list "PIC and non-PIC test 6 ($abi shared library)" \ 649 "-m$emul -shared -Tpic-and-nonpic-3a.ld" "" \ 650 "$flag -EB -mips3" \ 651 [list "pic-and-nonpic-6-${abi}a.s"] {} \ 652 "pic-and-nonpic-6-${abi}.so"] \ 653 [list "PIC and non-PIC test 6 ($abi executable)" \ 654 "-m$emul -Tpic-and-nonpic-6.ld tmpdir/pic-and-nonpic-6-${abi}.so" "" \ 655 "$flag -EB -mips3" \ 656 [list "pic-and-nonpic-6-${abi}b.s" \ 657 "pic-and-nonpic-6-${abi}c.s"] \ 658 [list "readelf {--wide --segments} pic-and-nonpic-6-${abi}.sd" \ 659 "objdump -dr pic-and-nonpic-6-${abi}.dd" \ 660 "objdump {-s -j.got.plt} pic-and-nonpic-6-${abi}.pd" \ 661 "readelf -A pic-and-nonpic-6-${abi}.gd" \ 662 "readelf --relocs pic-and-nonpic-6-${abi}.rd" \ 663 "readelf --symbols pic-and-nonpic-6-${abi}.nd" \ 664 "readelf -d pic-and-nonpic-6-${abi}.ad"] \ 665 "pic-and-nonpic-6-${abi}"]] 666 667 # This checks whether our linker scripts get the scope of _gp right, 668 # and must therefore use default scripts. If they don't, then -- in 669 # addition to dumps failing to match -- the final link fails with: 670 # 671 # ld: gp-hidden.o: undefined reference to symbol '_gp' 672 # ld: note: '_gp' is defined in DSO ./tmpdir/gp-hidden-lib-${abi}.so 673 # so try adding it to the linker command line 674 # 675 set suff64 [string map {o32 "" n32 "" n64 -64} $abi] 676 run_ld_link_tests [list \ 677 [list \ 678 "_gp scope test ($abi shared library)" \ 679 "$abi_ldflags($abi) -shared" "" \ 680 "$abi_asflags($abi) -KPIC" \ 681 { gp-hidden-lib.s } \ 682 [list \ 683 "readelf --relocs gp-hidden-lib${suff64}.rd" \ 684 "readelf --syms gp-hidden.sd"] \ 685 "gp-hidden-lib-${abi}.so"] \ 686 [list \ 687 "_gp scope test ($abi versioned library)" \ 688 "$abi_ldflags($abi) -shared -version-script gp-hidden-ver.ver tmpdir/gp-hidden-lib-${abi}.so" "" \ 689 "$abi_asflags($abi) -KPIC" \ 690 { gp-hidden-ver.s } \ 691 [list \ 692 "readelf --relocs gp-hidden-ver${suff64}.rd" \ 693 "readelf --syms gp-hidden.sd"] \ 694 "gp-hidden-ver-${abi}.so"] \ 695 [list \ 696 "_gp scope test ($abi executable)" \ 697 "$abi_ldflags($abi) -e 0 -rpath-link . tmpdir/gp-hidden-ver-${abi}.so" "" \ 698 "$abi_asflags($abi) -call_nonpic" \ 699 { gp-hidden.s } \ 700 [list \ 701 "readelf --relocs gp-hidden${suff64}.rd" \ 702 "readelf --syms gp-hidden.sd"] \ 703 "gp-hidden-${abi}"]] 704 } 705} 706 707run_dump_test_eabi "region1" 708 709run_dump_test_o32 "reloc-1-rel" 710run_dump_test_n32 "reloc-1-n32" 711run_dump_test_n64 "reloc-1-n64" 712run_dump_test_o32 "reloc-2" [list [list objdump [expr { [istarget *el-*-*] \ 713 ? "--endian=little" \ 714 : "--endian=big" }]]] 715run_dump_test "reloc-merge-lo16" 716run_dump_test "reloc-3" 717run_dump_test_n32 "reloc-3-n32" noarch 718run_dump_test "reloc-4" 719run_dump_test "reloc-5" 720if { $has_abi(n32) && [check_shared_lib_support] } { 721 run_ld_link_tests [list \ 722 [list \ 723 "reloc test 6a" \ 724 "-shared $abi_ldflags(n32)" "" \ 725 "$abi_asflags(n32)" \ 726 "reloc-6a.s" \ 727 {} \ 728 "reloc-6a.so"] \ 729 [list \ 730 "reloc test 6b" \ 731 "$abi_ldflags(n32) tmpdir/reloc-6a.so" "" \ 732 "$abi_asflags(n32)" \ 733 "reloc-6b.s" \ 734 {} \ 735 "reloc-6b"]] 736} 737 738run_dump_test_o32 "reloc-local-overflow" 739if { $has_abi(o32) } { 740 run_ld_link_tests [list \ 741 [list \ 742 "MIPS link ELF o32 PIC comdat GOT16/LO16 relocation pairing" \ 743 "$abi_ldflags(o32) -e bar" "" "$abi_asflags(o32) -mno-pdr" \ 744 "../../../gas/testsuite/gas/mips/comdat-reloc.s" \ 745 {} \ 746 "comdat-reloc"]] 747} 748 749if {$linux_gnu} { 750 run_dump_test_n32 "eh-frame1-n32" 751 run_dump_test_n64 "eh-frame1-n64" 752 run_dump_test_n32 "eh-frame2-n32" 753 run_dump_test_n64 "eh-frame2-n64" 754} 755run_dump_test_eabi "eh-frame3" 756run_dump_test_eabi "eh-frame4" 757if {$linux_gnu} { 758 set eh_frame5_test { 759 {"MIPS eh-frame 5" 760 "-melf32btsmip -shared -Teh-frame5.ld" "" 761 "-32 -EB" 762 {eh-frame5.s} 763 {{readelf {--relocs -wf} eh-frame5.d}} 764 "eh-frame5.so"} 765 } 766 run_ld_link_tests $eh_frame5_test 767} 768 769if {$embedded_elf} { 770 run_dump_test "compact-eh1" 771 run_dump_test "compact-eh2" 772 run_dump_test "compact-eh3" 773} 774 775if {$linux_gnu} { 776 run_dump_test "compact-eh4" 777 run_dump_test "compact-eh5" 778 run_dump_test "compact-eh6" 779} 780 781run_dump_test "jaloverflow" 782run_dump_test "jaloverflow-2" 783 784run_dump_test_o32 "jal-global-overflow-0" 785run_dump_test_o32 "jal-global-overflow-1" 786run_dump_test_o32 "jal-local-overflow-0" 787run_dump_test_o32 "jal-local-overflow-1" 788 789run_dump_test_o32 "undefweak-overflow" 790 791run_dump_test_n32 "undefweak-overflow" [list [list name (n32)]] 792run_dump_test_n64 "undefweak-overflow" [list [list name (n64)]] 793 794run_dump_test_n32 "jalbal" noarch 795 796run_dump_test "mode-change-error-1" 797 798run_dump_test_o32 "mips16-hilo" 799run_dump_test_n32 "mips16-hilo-n32" 800 801if { $linux_gnu } { 802 run_dump_test_n32 "textrel-1" 803 run_dump_test "got-page-1" 804 run_dump_test_n32 "got-page-2" 805 run_dump_test_n64 "dyn-sec64" noarch 806 run_dump_test "got-page-3" 807 if $has_abi(o32) { 808 run_ld_link_tests [subst { 809 {"GOT page 4 (one file)" 810 "-shared $abi_ldflags(o32) -T got-page-1.ld" 811 "" "$abi_asflags(o32) -mips2" {got-page-4b.s} 812 {{objdump -dr got-page-4a.d} 813 {readelf -A got-page-4a.got}} 814 "got-page-4a.so"} 815 {"GOT page 4 (two files)" 816 "-shared $abi_ldflags(o32) -T got-page-1.ld" 817 "" "$abi_asflags(o32) -mips2" {got-page-4a.s got-page-4b.s} 818 {{objdump -dr got-page-4b.d} 819 {readelf -A got-page-4b.got}} 820 "got-page-4b.so"} 821 }] 822 } 823 if $has_abi(n32) { 824 run_ld_link_tests [subst { 825 {"GOT page 5" "-shared $abi_ldflags(n32) -T got-page-1.ld" 826 "" "$abi_asflags(n32)" {got-page-5.s} 827 {{objdump -dr got-page-5.d} 828 {readelf -A got-page-5.got}} 829 "got-page-5.so"} 830 {"GOT page 6" "-shared $abi_ldflags(n32) -T got-page-1.ld" 831 "" "$abi_asflags(n32)" {got-page-6.s} 832 {{objdump -dr got-page-6.d} 833 {readelf -A got-page-6.got}} 834 "got-page-6.so"} 835 {"GOT page 7 (order 1)" "-shared $abi_ldflags(n32) -T got-page-1.ld" 836 "" "$abi_asflags(n32)" 837 {got-page-7a.s got-page-7b.s got-page-7c.s got-page-7d.s 838 got-page-7e.s} 839 {{objdump -dr got-page-7.d} 840 {readelf -A got-page-7.got}} 841 "got-page-7a.so"} 842 {"GOT page 7 (order 2)" "-shared $abi_ldflags(n32) -T got-page-1.ld" 843 "" "$abi_asflags(n32)" 844 {got-page-7e.s got-page-7a.s got-page-7b.s got-page-7c.s 845 got-page-7d.s} 846 {{objdump -dr got-page-7.d} 847 {readelf -A got-page-7.got}} 848 "got-page-7b.so"} 849 }] 850 } 851 run_dump_test "got-dump-1" 852 run_dump_test_n64 "got-dump-2" noarch 853 run_dump_test "reloc-estimate-1" 854} 855 856run_dump_test_n32 "emit-relocs-1" {{as -EB} {ld -EB}} 857 858run_dump_test "hash1" 859run_dump_test "hash2" 860 861if { $linux_gnu && $has_abi(o32) } { 862 # The number of symbols that are always included in the symbol table 863 # for these tests. 864 # the null symbol entry 865 set base_syms 1 866 foreach { isa aflag lflag suffix } \ 867 { MIPS -march=mips1 "" "" \ 868 microMIPS -mmicromips "" -micromips \ 869 "microMIPS insn32" "-mmicromips -minsn32" --insn32 \ 870 -micromips-insn32 } { 871 foreach dynsym { 7fff 8000 fff0 10000 2fe80 } { 872 run_ld_link_tests \ 873 [list [list \ 874 "Stub for dynsym 0x$dynsym ($isa)" \ 875 "-shared -melf32btsmip -T stub-dynsym-1.ld $lflag" \ 876 "" \ 877 [concat \ 878 "-EB $aflag -32 -KPIC" \ 879 "--defsym base_syms=$base_syms" \ 880 "--defsym dynsym=0x$dynsym"] \ 881 [list "stub-dynsym-1.s"] \ 882 [list [list \ 883 "objdump" "-dz" \ 884 "stub-dynsym$suffix-1-$dynsym.d"]] \ 885 "stub-dynsym$suffix-1-$dynsym"]] 886 } 887 run_ld_link_tests [list \ 888 [list \ 889 "Retained stubs for dynsyms ($isa)" \ 890 "-shared -melf32btsmip -T stub-dynsym-2.ld $lflag" "" \ 891 "-EB $aflag -32 -KPIC" \ 892 [list "stub-dynsym-2.s"] \ 893 [list \ 894 [list \ 895 "objdump" \ 896 "-dz -j .MIPS.stubs" \ 897 "stub-dynsym$suffix-2.dd"] \ 898 [list \ 899 "readelf" \ 900 "--dyn-syms" \ 901 "stub-dynsym$suffix-2.sd"] \ 902 [list \ 903 "readelf" \ 904 "-A" \ 905 "stub-dynsym$suffix-2.gd"]] \ 906 "stub-dynsym$suffix-2"] \ 907 [list \ 908 "Discarded stubs for dynsyms ($isa)" \ 909 "-shared -melf32btsmip -T stub-dynsym-discard-2.ld $lflag" \ 910 "" \ 911 "-EB $aflag -32 -KPIC" \ 912 [list "stub-dynsym-2.s"] \ 913 [list \ 914 [list \ 915 "readelf" \ 916 "--dyn-syms" \ 917 "stub-dynsym-discard-2.sd"] \ 918 [list \ 919 "readelf" \ 920 "-A" \ 921 "stub-dynsym-discard-2.gd"]] \ 922 "stub-dynsym-discard$suffix-2"]] 923 } 924} 925 926# For tests which may involve multiple files, use run_ld_link_tests. 927 928# List contains test-items with 3 items followed by 2 lists: 929# 0:name 1:ld early options 2:ld late options 3:assembler options 930# 4:filenames of assembler files 5: action and options. 6: name of output file 931 932# Actions: 933# objdump: Apply objdump options on result. Compare with regex (last arg). 934# nm: Apply nm options on result. Compare with regex (last arg). 935# readelf: Apply readelf options on result. Compare with regex (last arg). 936 937set mips_tls_tests { 938 {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld" "" 939 "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s} 940 {{objdump {-dr -m mips:isa32r2} tlsbin-o32.d} {objdump -srj.got tlsbin-o32.got}} 941 "tls-static-o32"} 942 {"Static PIE executable with TLS" 943 "-static -pie -melf32btsmip -T mips-dyn.ld" "" 944 "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s} 945 {{objdump {-dr -m mips:isa32r2} tlsbin-pie-o32.d} 946 {objdump -Rsj.got tlsbin-pie-o32.got}} 947 "tls-static-pie-o32"} 948 {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld" "" 949 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s} 950 {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32.got}} 951 "tlslib-o32.so"} 952 {"Dynamic executable with TLS" 953 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so" "" 954 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s} 955 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32.d} {objdump -Rsj.got tlsdyn-o32.got}} 956 "tls-dynamic-o32"} 957 {"Dynamic PIE executable with TLS" 958 "-pie -melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so" "" 959 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s} 960 {{objdump {-dr -m mips:isa32r2} tlsdyn-pie-o32.d} 961 {objdump -Rsj.got tlsdyn-pie-o32.got}} 962 "tls-dynamic-pie-o32"} 963 {"Shared library with multiple GOTs and TLS" 964 "-shared -melf32btsmip -T mips-lib.ld" "" 965 "-EB -march=mips1 -32 -KPIC" {tls-multi-got-1-1.s tls-multi-got-1-2.s} 966 {{readelf {-d -r} tls-multi-got-1.r} 967 {objdump {-dr -m mips:isa32r2} tls-multi-got-1.d} 968 {objdump -Rsj.got tls-multi-got-1.got}} 969 "tlslib-multi.so"} 970 {"Shared library with TLS and versioning" 971 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver" "" 972 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s} 973 {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-ver.got}} 974 "tlslib-o32-ver.so"} 975 {"Dynamic executable with TLS and versioning" 976 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so" "" 977 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s tlsdyn-o32-2.s} 978 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-1.d} {objdump -Rsj.got tlsdyn-o32-1.got}} 979 "tls-dynamic-o32-ver"} 980 {"Dynamic executable with TLS and versioning (order 2)" 981 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o" "" 982 "-EB -march=mips1 -32 -KPIC" {} 983 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-2.d} {objdump -Rsj.got tlsdyn-o32-2.got}} 984 "tls-dynamic-o32-ver-2"} 985 {"Dynamic executable with TLS and versioning (order 3)" 986 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o" "" 987 "-EB -march=mips1 -32 -KPIC" {} 988 {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-3.d} {objdump -Rsj.got tlsdyn-o32-3.got}} 989 "tls-dynamic-o32-ver-3"} 990 {"Shared library with TLS and hidden symbols" 991 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver" "" 992 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s} 993 {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-hidden.got}} 994 "tlslib-o32-hidden.so"} 995 {"Shared library with TLS and hidden symbols (2)" 996 "-shared -melf32btsmip -T mips-lib.ld" "" 997 "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s} 998 {{objdump -drj.text tls-hidden2.d} {objdump -sj.got tls-hidden2-got.d}} 999 "tls-hidden2.so"} 1000 {"Shared library with TLS and hidden symbols (3)" 1001 "-shared -melf32btsmip -T tls-hidden3.ld" "" 1002 "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s} 1003 {{objdump -dj.text tls-hidden3.d} {objdump -sj.got tls-hidden3.got} 1004 {readelf --relocs tls-hidden3.r}} 1005 "tls-hidden3.so"} 1006 {"Shared library with TLS and hidden symbols (4)" 1007 "-shared -melf32btsmip -T tls-hidden3.ld" "" 1008 "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s} 1009 {{objdump -sj.got tls-hidden4.got} {readelf --relocs tls-hidden4.r}} 1010 "tls-hidden4.so"} 1011} 1012 1013if { $linux_gnu && $has_abi(o32) } { 1014 run_ld_link_tests $mips_tls_tests 1015} 1016 1017set mips16_call_global_test [list \ 1018 [list "Global calls from mips16" \ 1019 "$abi_ldflags(o32) -T no-shared-1.ld" "" \ 1020 "$abi_asflags(o32) -mips32r2" \ 1021 {mips16-call-global-1.s mips16-call-global-2.s mips16-call-global-3.s} \ 1022 {{objdump -dr mips16-call-global.d}} \ 1023 "mips16-call-global"]] 1024 1025if { $has_abi(o32) } { 1026 run_ld_link_tests $mips16_call_global_test 1027} 1028 1029set mips16_intermix_test [list \ 1030 [list "Intermixing mips32 and mips16 functions" \ 1031 "$abi_ldflags(o32)" "" \ 1032 "$abi_asflags(o32) -mips32r2" \ 1033 {mips16-intermix-1.s mips16-intermix-2.s} \ 1034 {{objdump -t mips16-intermix.d}} \ 1035 "mips16-intermix"]] 1036 1037if { $has_abi(o32) } { 1038 run_ld_link_tests $mips16_intermix_test 1039} 1040 1041run_dump_test "mips16-local-stubs-1" 1042 1043set mips16_fp_stub_test [list \ 1044 [list "Floating-point stub for mips16 functions" \ 1045 "$abi_ldflags(o32)" "" \ 1046 "$abi_asflags(o32) -mips32r2" \ 1047 {mips16-fp-stub-1.s mips16-fp-stub-2.s} \ 1048 {{readelf --debug-dump=frames mips16-fp-stub.d}} \ 1049 "mips16-fp-stub"]] 1050 1051if { $has_abi(o32) } { 1052 run_ld_link_tests $mips16_fp_stub_test 1053} 1054 1055foreach firstfpabi [list 0 1 2 3 4 5 6 7 ] { 1056 foreach secondfpabi [list 4 5 6 7 ] { 1057 run_dump_test_o32 "attr-gnu-4-${firstfpabi}${secondfpabi}" 1058 } 1059} 1060foreach firstfpabi [list 4 5 6 7 ] { 1061 foreach secondfpabi [list 0 1 2 3 8 9] { 1062 run_dump_test_o32 "attr-gnu-4-${firstfpabi}${secondfpabi}" 1063 } 1064} 1065foreach firstfpabi [list 0 1 2 3 ] { 1066 foreach secondfpabi [list 0 1 2 3 8 9] { 1067 run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" 1068 } 1069} 1070 1071run_dump_test "attr-gnu-4-81" 1072 1073run_dump_test "attr-gnu-8-00" 1074run_dump_test "attr-gnu-8-01" 1075run_dump_test "attr-gnu-8-02" 1076run_dump_test "attr-gnu-8-10" 1077run_dump_test "attr-gnu-8-11" 1078run_dump_test "attr-gnu-8-12" 1079run_dump_test "attr-gnu-8-20" 1080run_dump_test "attr-gnu-8-21" 1081run_dump_test "attr-gnu-8-22" 1082 1083run_dump_test_o32 "attr-gnu-4-0-ph" 1084run_dump_test_o32 "attr-gnu-4-1-ph" 1085run_dump_test_o32 "attr-gnu-4-2-ph" 1086run_dump_test_o32 "attr-gnu-4-3-ph" 1087run_dump_test_o32 "attr-gnu-4-4-ph" 1088run_dump_test_o32 "attr-gnu-4-5-ph" 1089run_dump_test_o32 "attr-gnu-4-6-ph" 1090run_dump_test_o32 "attr-gnu-4-7-ph" 1091 1092run_dump_test_n32 "attr-gnu-4-0-n32-ph" noarch 1093run_dump_test_n32 "attr-gnu-4-1-n32-ph" noarch 1094run_dump_test_n32 "attr-gnu-4-2-n32-ph" noarch 1095run_dump_test_n32 "attr-gnu-4-3-n32-ph" noarch 1096run_dump_test_n64 "attr-gnu-4-0-n64-ph" noarch 1097run_dump_test_n64 "attr-gnu-4-1-n64-ph" noarch 1098run_dump_test_n64 "attr-gnu-4-2-n64-ph" noarch 1099run_dump_test_n64 "attr-gnu-4-3-n64-ph" noarch 1100 1101run_dump_test_o32 "abiflags-strip1-ph" 1102run_dump_test_o32 "abiflags-strip2-ph" 1103run_dump_test_o32 "abiflags-strip3-ph" 1104run_dump_test_o32 "abiflags-strip4-ph" 1105run_dump_test_o32 "abiflags-strip5-ph" 1106run_dump_test_o32 "abiflags-strip6-ph" 1107run_dump_test_o32 "abiflags-strip7-ph" 1108run_dump_test_o32 "abiflags-strip8-ph" 1109run_dump_test_o32 "abiflags-strip9-ph" 1110run_dump_test_o32 "abiflags-strip10-ph" 1111 1112run_dump_test "nan-legacy" 1113run_dump_test "nan-2008" 1114run_dump_test "nan-mixed-1" 1115run_dump_test "nan-mixed-2" 1116 1117if { $linux_gnu && $has_abi(o32) } { 1118 run_ld_link_tests { 1119 {"GOT and versioning 1" 1120 "-shared -melf32btsmip --version-script got-vers-1.ver" "" 1121 "-EB -mips2 -32" {got-vers-1a.s got-vers-1b.s} 1122 {{readelf -d got-vers-1.dd} 1123 {readelf --symbols got-vers-1.sd} 1124 {readelf --relocs got-vers-1.rd}} 1125 "got-vers-1.so"} 1126 } 1127} 1128 1129run_dump_test "undefined" 1130run_dump_test "undefined-warn" 1131 1132# Test the conversion from jr to b 1133if { $linux_gnu } { 1134 run_dump_test_o32 "jr-to-b-1" noarch 1135 run_dump_test_o32 "jr-to-b-2" noarch 1136} 1137 1138# MIPS16 and microMIPS interlinking test. 1139run_dump_test "mips16-and-micromips" 1140 1141set abis {} 1142if $has_abi(o32) { 1143 lappend abis o32 1144} 1145if $has_abi(n32) { 1146 lappend abis n32 1147} 1148if $has_abi(n64) { 1149 lappend abis n64 1150} 1151 1152# Export class call relocation tests. 1153if [check_shared_lib_support] { 1154 foreach { abi } $abis { 1155 set loadaddr [string map \ 1156 {o32 0x12340000 n32 0x12340000 n64 0x123456789abc0000} $abi] 1157 set suff [subst \ 1158 [expr { $irix \ 1159 ? [string map {o32 o32-irix n32 n32 n64 n64} $abi] \ 1160 : $abi }]] 1161 run_ld_link_tests [list \ 1162 [list \ 1163 "MIPS export class call relocation test ($abi)" \ 1164 "$abi_ldflags($abi) -shared -Ttext $loadaddr\ 1165 -T export-class-call16.ld" \ 1166 "" \ 1167 "$abi_asflags($abi) -mips3 -KPIC" \ 1168 [list export-class-call16-${abi}.s export-class-call16-def.s] \ 1169 [list \ 1170 "objdump -d export-class-call16-${suff}.dd" \ 1171 "readelf -A export-class-call16-${abi}.gd"] \ 1172 "export-class-call16-${abi}.so"]] 1173 } 1174} 1175 1176# Magic __ehdr_start symbol tests. 1177foreach { abi } $abis { 1178 set suff [string map {o32 o32 n32 new n64 new} $abi] 1179 run_ld_link_tests [list \ 1180 [list \ 1181 "MIPS magic __ehdr_start symbol test 1 ($abi)" \ 1182 "$abi_ldflags($abi) -T ehdr_start-1.ld" "" \ 1183 "$abi_asflags($abi)" \ 1184 [list ehdr_start-${suff}.s] \ 1185 [list "readelf -s ehdr_start-1.nd"] \ 1186 "ehdr_start-1-${abi}"] \ 1187 [list \ 1188 "MIPS magic __ehdr_start symbol test 2 ($abi)" \ 1189 "$abi_ldflags($abi) -T ehdr_start-2.ld" "" \ 1190 "$abi_asflags($abi)" \ 1191 [list ehdr_start-${suff}.s] \ 1192 [list "readelf -s ehdr_start-2.nd"] \ 1193 "ehdr_start-2-${abi}"]] 1194} 1195 1196# R_MIPS_JALR reloc tests. 1197foreach { abi } $abis { 1198 run_ld_link_tests [list \ 1199 [list \ 1200 "MIPS JALR reloc test ($abi)" \ 1201 "$abi_ldflags($abi) -T jalr3.ld" "" \ 1202 "$abi_asflags($abi)" \ 1203 [list ../../../gas/testsuite/gas/mips/jalr3.s] \ 1204 [list "objdump -d jalr3.dd"] \ 1205 "jalr3-${abi}"] \ 1206 [list \ 1207 "MIPS JALR reloc unaligned/cross-mode link test ($abi)" \ 1208 "$abi_ldflags($abi) -T jalr3.ld" "" \ 1209 "$abi_asflags($abi)" \ 1210 [list ../../../gas/testsuite/gas/mips/jalr4.s] \ 1211 [list "objdump {-d --prefix-addresses --show-raw-insn} jalr4.dd"] \ 1212 "jalr4-${abi}"] \ 1213 [list \ 1214 "MIPSr6 JALR reloc unaligned/cross-mode link test ($abi)" \ 1215 "$abi_ldflags($abi) -T jalr3.ld" "" \ 1216 "[string map\ 1217 [list o32 -mips32r6\ 1218 n32 -mips64r6\ 1219 n64 -mips64r6] $abi ]\ 1220 [regsub -- {-march=[^[:blank:]]*} $abi_asflags($abi) {}]" \ 1221 {../../../gas/testsuite/gas/mips/jalr4.s} \ 1222 {{objdump {-d --prefix-addresses --show-raw-insn} jalr4-r6.dd}} \ 1223 "jalr4-${abi}"]] 1224} 1225 1226proc build_mips_plt_lib { abi } { 1227 global abi_asflags 1228 global abi_ldflags 1229 1230 run_ld_link_tests [list \ 1231 [list "Shared $abi library for compressed PLT tests" \ 1232 "-shared $abi_ldflags($abi)" "" \ 1233 "$abi_asflags($abi)" \ 1234 { compressed-plt-1-dyn.s } \ 1235 {} \ 1236 "compressed-plt-1-${abi}-dyn.so"]] 1237} 1238 1239proc run_mips_plt_test { name abi filter micromips suffix {extra {}} } { 1240 global abi_asflags 1241 global abi_ldflags 1242 1243 set as_flags "$abi_asflags($abi) --defsym filter=$filter" 1244 append as_flags " --defsym micromips=$micromips --defsym $abi=1" 1245 if {[string equal $abi o32]} { 1246 append as_flags " -march=mips2" 1247 } 1248 set ld_flags "$abi_ldflags($abi) -T compressed-plt-1.ld" 1249 set dynobj "tmpdir/compressed-plt-1-${abi}-dyn.so" 1250 set files [list] 1251 if { $filter & 7 } { 1252 lappend files compressed-plt-1a.s 1253 } 1254 if { $filter & 56 } { 1255 lappend files compressed-plt-1b.s 1256 } 1257 if { $filter & 64 } { 1258 lappend files compressed-plt-1c.s 1259 } 1260 eval [list lappend files] $extra 1261 set readelf_flags "-A --syms --relocs -d" 1262 if { [string match "*word*" $suffix] } { 1263 append readelf_flags " -x.data" 1264 } 1265 set objdump_flags "-d -Mgpr-names=numeric" 1266 set basename "compressed-plt-1-${abi}-${suffix}" 1267 run_ld_link_tests [list \ 1268 [list "$name" $ld_flags $dynobj \ 1269 "$as_flags" $files \ 1270 [list [list readelf $readelf_flags ${basename}.rd] \ 1271 [list objdump $objdump_flags ${basename}.od]] \ 1272 $basename]] 1273} 1274 1275if { $linux_gnu && $has_abi(o32) } { 1276 build_mips_plt_lib o32 1277 run_mips_plt_test "o32 PLTs for standard encoding" o32 104 0 se 1278 run_mips_plt_test "o32 PLTs for standard branches" o32 16 0 branch 1279 run_mips_plt_test "o32 PLTs for MIPS16 encoding" o32 69 0 mips16-only 1280 run_mips_plt_test "o32 PLTs for MIPS16 branches" o32 2 0 mips16-bronly 1281 run_mips_plt_test "o32 PLTs for microMIPS encoding" o32 69 1 umips-only 1282 run_mips_plt_test "o32 PLTs for microMIPS branches" o32 2 1 umips-bronly 1283 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16" \ 1284 o32 109 0 mips16 1285 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 branches" \ 1286 o32 18 0 mips16-branch 1287 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with %got" \ 1288 o32 109 0 mips16-got compressed-plt-1d.s 1289 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with .word" \ 1290 o32 109 0 mips16-word compressed-plt-1e.s 1291 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS" \ 1292 o32 109 1 umips 1293 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS branches" \ 1294 o32 18 1 umips-branch 1295 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with %got" \ 1296 o32 109 1 umips-got compressed-plt-1d.s 1297 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with .word" \ 1298 o32 109 1 umips-word compressed-plt-1e.s 1299} 1300 1301if { $linux_gnu && $has_abi(n32) } { 1302 build_mips_plt_lib n32 1303 run_mips_plt_test "n32 PLTs for mixed MIPS and MIPS16" \ 1304 n32 109 0 mips16 1305 run_mips_plt_test "n32 PLTs for mixed MIPS and microMIPS" \ 1306 n32 109 1 umips 1307} 1308 1309# Verify graceful handling of n64 PLT 32-bit range overflows. Given 1310# that the alignment of `.got.plt' is 8 the highest usable positive 1311# address is 0x7fff7ff8 and the lowest usable negative address is 1312# 0xffffffff7fff8000. 1313if { $linux_gnu && $has_abi(n64) } { 1314 run_ld_link_tests [list \ 1315 [list "Shared library for MIPS n64 PLT 32-bit range tests" \ 1316 "-shared $abi_ldflags(n64)" "" \ 1317 "$abi_asflags(n64)" \ 1318 { n64-plt-lib.s } \ 1319 {} \ 1320 "n64-plt-lib.so"] \ 1321 [list "MIPS n64 PLT 32-bit range test 1" \ 1322 "$abi_ldflags(n64) -T n64-plt-1.ld -e foo" \ 1323 "tmpdir/n64-plt-lib.so" \ 1324 "$abi_asflags(n64)" \ 1325 { n64-plt.s } \ 1326 { { objdump -d n64-plt-1.dd } \ 1327 { readelf -A n64-plt-1.gd } } \ 1328 "n64-plt-1"] \ 1329 [list "MIPS n64 PLT 32-bit range test 2" \ 1330 "$abi_ldflags(n64) -T n64-plt-2.ld -e foo" \ 1331 "tmpdir/n64-plt-lib.so" \ 1332 "$abi_asflags(n64)" \ 1333 { n64-plt.s } \ 1334 { { ld n64-plt-2.ed } } \ 1335 "n64-plt-2"] \ 1336 [list "MIPS n64 PLT 32-bit range test 3" \ 1337 "$abi_ldflags(n64) -T n64-plt-3.ld -e foo" \ 1338 "tmpdir/n64-plt-lib.so" \ 1339 "$abi_asflags(n64)" \ 1340 { n64-plt.s } \ 1341 { { ld n64-plt-3.ed } } \ 1342 "n64-plt-3"] \ 1343 [list "MIPS n64 PLT 32-bit range test 4" \ 1344 "$abi_ldflags(n64) -T n64-plt-4.ld -e foo" \ 1345 "tmpdir/n64-plt-lib.so" \ 1346 "$abi_asflags(n64)" \ 1347 { n64-plt.s } \ 1348 { { objdump -d n64-plt-4.dd } \ 1349 { readelf -A n64-plt-4.gd } } \ 1350 "n64-plt-4"]] 1351} 1352 1353# PR ld/19908 export class tests. 1354if { $linux_gnu && $has_abi(o32) } { 1355 run_ld_link_tests [list \ 1356 [list "Shared library for MIPS export class symbol reference tests" \ 1357 "$abi_ldflags(o32) -shared" "" \ 1358 "$abi_asflags(o32)" \ 1359 { export-class-ref-f2.s } \ 1360 { { readelf --dyn-syms export-class-ref-lib.sd } } \ 1361 "export-class-ref-lib.so"]] 1362 foreach { class flag } { internal 1 hidden 2 protected 3 } { 1363 run_ld_link_tests [list \ 1364 [list "MIPS $class symbol reference test 1" \ 1365 "$abi_ldflags(o32) -e f0" "tmpdir/export-class-ref-lib.so" \ 1366 "$abi_asflags(o32) --defsym defv=$flag" \ 1367 { export-class-ref-f0.s export-class-ref-f1.s } \ 1368 [list [list readelf --dyn-syms export-$class-ref.sd] \ 1369 [list readelf --dyn-syms export-local-ref.sd]] \ 1370 "export-$class-ref"] \ 1371 [list "MIPS $class symbol reference test 2" \ 1372 "$abi_ldflags(o32) -e f0" "tmpdir/export-class-ref-lib.so" \ 1373 "$abi_asflags(o32) --defsym defv=$flag --defsym refv=$flag" \ 1374 { export-class-ref-f0.s export-class-ref-f1.s } \ 1375 [list [list readelf --dyn-syms export-$class-ref.sd] \ 1376 [list readelf --dyn-syms export-local-ref.sd]] \ 1377 "export-$class-ref"]] 1378 } 1379} 1380 1381# PR ld/21334 GOT relocation in static binary test. 1382if { $has_abi(o32) } { 1383 run_ld_link_tests [list \ 1384 [list \ 1385 "PR ld/21334 MIPS GOT16 relocation in static binary" \ 1386 "$abi_ldflags(o32) -e foo -T pr21334.ld" "" "$abi_asflags(o32)" \ 1387 {pr21334.s} \ 1388 {{objdump {-d --prefix-addresses} pr21334.dd} \ 1389 {readelf -A pr21334.gd}} \ 1390 "pr21334"]] 1391} 1392 1393# Check that the ISA level is consistently II for the LSI 4010. 1394run_dump_test_o32 "lsi-4010-isa" noarch 1395 1396# PIC branch relaxation with offset tests. We need to use our version 1397# of `prune_warnings' to get rid of GAS branch relaxation noise. 1398if { $has_abi(o32) } { 1399 rename prune_warnings mips_old_prune_warnings 1400 proc prune_warnings { msg } { 1401 set msg1 "Assembler messages:" 1402 set msg2 "Warning: relaxed out-of-range branch into a jump" 1403 set msgx "(?:$msg1|$msg2)" 1404 regsub -all "(^|\[\n\r\]*)\[^\n\r\]*: $msgx\[\n\r\]*" $msg "\\1" msg 1405 return [mips_old_prune_warnings $msg] 1406 } 1407 run_ld_link_tests [list \ 1408 [list \ 1409 "MIPS link PIC branch relaxation with offset" \ 1410 "$abi_ldflags(o32) -shared -T relax-offset.ld" "" \ 1411 "$abi_asflags(o32) -relax-branch -mips2" \ 1412 {../../../gas/testsuite/gas/mips/relax-offset.s} \ 1413 {{objdump \ 1414 {-d --prefix-addresses --show-raw-insn} \ 1415 relax-offset.dd} \ 1416 {readelf -A relax-offset.gd}} \ 1417 "relax-offset"] \ 1418 [list \ 1419 "microMIPS link PIC branch relaxation with offset" \ 1420 "$abi_ldflags(o32) -shared -T relax-offset.ld" "" \ 1421 "$abi_asflags(o32) -relax-branch -mmicromips" \ 1422 {../../../gas/testsuite/gas/mips/relax-offset.s} \ 1423 {{objdump \ 1424 {-d --prefix-addresses --show-raw-insn} \ 1425 relax-offset-umips.dd} \ 1426 {readelf -A relax-offset-umips.gd}} \ 1427 "relax-offset-umips"]] 1428 rename prune_warnings "" 1429 rename mips_old_prune_warnings prune_warnings 1430} 1431 1432# Verify that we can link ELF input into the `binary' output format. 1433run_dump_test "binary" 1434 1435# Verify special section processing. 1436if { $has_abi(o32) || $has_abi(n32) } { 1437 run_dump_test "reginfo-0" 1438 run_dump_test "reginfo-0r" 1439 run_dump_test "reginfo-1" 1440 run_dump_test "reginfo-1r" 1441 run_dump_test "reginfo-2" 1442 run_dump_test "reginfo-2r" 1443} 1444run_dump_test "mips-abiflags-0" 1445run_dump_test "mips-abiflags-0r" 1446run_dump_test "mips-abiflags-1" 1447run_dump_test "mips-abiflags-1r" 1448run_dump_test "mips-abiflags-2" 1449run_dump_test "mips-abiflags-2r" 1450 1451# Test that _gp_disp symbol is not present in symbol tables. 1452run_dump_test_o32 "gp-disp-sym" 1453 1454# PR ld/21375 undefined weak PIC references. 1455proc run_mips_undefweak_test { name abi args } { 1456 global abi_asflags 1457 global abi_ldflags 1458 global irixemul 1459 1460 set name "PR ld/21375 in $name" 1461 1462 set pic 0 1463 set abisuf -noabi 1464 set srcsuf "" 1465 set scrsuf "" 1466 set binsuf "" 1467 set dsosuf "" 1468 set objsuf "" 1469 set rdesuf "" 1470 set asxtra "" 1471 set ldxtra "" 1472 foreach arg $args { 1473 switch -- $arg { 1474 dso { 1475 set pic 1 1476 set dsosuf .so 1477 append objsuf s 1478 append rdesuf s 1479 append ldxtra " -shared" 1480 } 1481 gc { 1482 set abisuf -noabi 1483 append binsuf g 1484 append objsuf g 1485 append rdesuf g 1486 append ldxtra " --gc-sections" 1487 } 1488 hidden { 1489 if { $pic && [istarget "*-*-*gnu*"] } { set abisuf -abi } 1490 append binsuf h 1491 append objsuf h 1492 append rdesuf h 1493 append asxtra " --defsym hidn=1" 1494 } 1495 internal { 1496 if { $pic && [istarget "*-*-*gnu*"] } { set abisuf -abi } 1497 append binsuf h 1498 append objsuf h 1499 append rdesuf h 1500 append asxtra " --defsym intr=1" 1501 } 1502 local { 1503 append binsuf l 1504 append rdesuf l 1505 append ldxtra " --version-script pr21375.ver" 1506 } 1507 mips16 { 1508 set srcsuf -mips16 1509 append binsuf m16 1510 append objsuf m16 1511 append asxtra " -mips16" 1512 } 1513 pie { 1514 set pic 1 1515 set dsosuf -pie 1516 append objsuf p 1517 append rdesuf p 1518 append ldxtra " -pie" 1519 } 1520 protected { 1521 if { $pic && [istarget "*-*-*gnu*"] } { set abisuf -abi } 1522 append binsuf h 1523 append objsuf h 1524 append rdesuf h 1525 append asxtra " --defsym prot=1" 1526 } 1527 umips { 1528 append binsuf u 1529 append objsuf u 1530 append asxtra " -mmicromips" 1531 } 1532 version { 1533 append binsuf v 1534 append rdesuf v 1535 append ldxtra " --version-script pr21375v.ver" 1536 } 1537 xgot { 1538 set srcsuf -xgot 1539 set scrsuf -xgot 1540 append binsuf x 1541 append objsuf x 1542 append rdesuf x 1543 } 1544 } 1545 } 1546 switch -- $abi { 1547 n32 { 1548 set srcsuf -n32 1549 append binsuf -n32 1550 append objsuf -n32 1551 append rdesuf -n32 1552 } 1553 n64 { 1554 set srcsuf -n64 1555 append binsuf -n64 1556 append objsuf -n64 1557 append rdesuf -n64 1558 } 1559 } 1560 if $irixemul { 1561 set irixsuf -irix 1562 } else { 1563 set irixsuf "" 1564 } 1565 1566 if { $pic && ![check_shared_lib_support] } { 1567 unsupported "$name" 1568 } else { 1569 run_ld_link_tests [list \ 1570 [list \ 1571 "$name" \ 1572 "$abi_ldflags($abi) -e foo -T pr21375${scrsuf}.ld ${ldxtra}" \ 1573 "" \ 1574 "$abi_asflags($abi) ${asxtra}" \ 1575 [list pr21375${srcsuf}.s] \ 1576 [list \ 1577 [list objdump -d pr21375${objsuf}.dd] \ 1578 [list readelf -A pr21375${rdesuf}.gd] \ 1579 [list readelf {--dyn-syms --wide} pr21375${rdesuf}${irixsuf}.sd] \ 1580 [list readelf -h pr21375${abisuf}.hd]] \ 1581 "pr21375${binsuf}${dsosuf}"]] 1582 } 1583} 1584 1585if $has_abi(o32) { 1586 run_mips_undefweak_test "SVR4 executable" \ 1587 o32 1588 run_mips_undefweak_test "SVR4 executable (hidden)" \ 1589 o32 hidden 1590 run_mips_undefweak_test "PIE executable" \ 1591 o32 pie 1592 run_mips_undefweak_test "PIE executable (hidden)" \ 1593 o32 pie hidden 1594 run_mips_undefweak_test "shared library" \ 1595 o32 dso 1596 run_mips_undefweak_test "shared library (hidden)" \ 1597 o32 dso hidden 1598 run_mips_undefweak_test "shared library (hidden, forced local)" \ 1599 o32 dso hidden local 1600 run_mips_undefweak_test "shared library (hidden, versioned)" \ 1601 o32 dso hidden version 1602 run_mips_undefweak_test "shared library (hidden, section GC)" \ 1603 o32 dso hidden gc 1604 run_mips_undefweak_test "shared library (protected)" \ 1605 o32 dso protected 1606 run_mips_undefweak_test "shared library (internal)" \ 1607 o32 dso internal 1608 run_mips_undefweak_test "shared library (large GOT)" \ 1609 o32 dso xgot 1610 run_mips_undefweak_test "shared library (large GOT, hidden)" \ 1611 o32 dso xgot hidden 1612 run_mips_undefweak_test "shared library (MIPS16)" \ 1613 o32 dso mips16 1614 run_mips_undefweak_test "shared library (MIPS16, hidden)" \ 1615 o32 dso mips16 hidden 1616 run_mips_undefweak_test "shared library (microMIPS)" \ 1617 o32 dso umips 1618 run_mips_undefweak_test "shared library (microMIPS, hidden)" \ 1619 o32 dso umips hidden 1620 run_mips_undefweak_test "shared library (microMIPS, large GOT)" \ 1621 o32 dso umips xgot 1622 run_mips_undefweak_test "shared library (microMIPS, large GOT, hidden)" \ 1623 o32 dso umips xgot hidden 1624} 1625if $has_abi(n32) { 1626 run_mips_undefweak_test "shared library (n32)" \ 1627 n32 dso 1628 run_mips_undefweak_test "shared library (n32, hidden)" \ 1629 n32 dso hidden 1630 run_mips_undefweak_test "shared library (n32, microMIPS)" \ 1631 n32 dso umips 1632 run_mips_undefweak_test "shared library (n32, microMIPS, hidden)" \ 1633 n32 dso umips hidden 1634} 1635if $has_abi(n64) { 1636 run_mips_undefweak_test "shared library (n64)" \ 1637 n64 dso 1638 run_mips_undefweak_test "shared library (n64, hidden)" \ 1639 n64 dso hidden 1640 run_mips_undefweak_test "shared library (n64, microMIPS)" \ 1641 n64 dso umips 1642 run_mips_undefweak_test "shared library (n64, microMIPS, hidden)" \ 1643 n64 dso umips hidden 1644} 1645 1646# PIC relocation acceptance tests. 1647run_dump_test "pic-reloc-0" 1648run_dump_test "pic-reloc-1" 1649run_dump_test "pic-reloc-2" 1650run_dump_test "pic-reloc-3" 1651run_dump_test "pic-reloc-4" 1652run_dump_test_o32 "pic-reloc-5" 1653run_dump_test_o32 "pic-reloc-5" [list [list name (microMIPS)] \ 1654 [list as "-mmicromips"]] 1655run_dump_test_o32 "pic-reloc-6" 1656run_dump_test_n64 "pic-reloc-7" 1657run_dump_test_n64 "pic-reloc-7" [list [list name (microMIPS)] \ 1658 [list as "-mmicromips"]] 1659 1660run_dump_test_o32 "reloc-pcrel-r6" 1661 1662# Global/local symbol table split tests. 1663run_dump_test_o32 "global-local-symtab-o32${tmips}" 1664run_dump_test_n32 "global-local-symtab-n32${tmips}" 1665run_dump_test_n64 "global-local-symtab-n64" 1666run_dump_test_o32 "global-local-symtab-sort-o32${tmips}" 1667run_dump_test_n32 "global-local-symtab-sort-n32${tmips}" 1668run_dump_test_n64 "global-local-symtab-sort-n64${tmips}" 1669run_dump_test_o32 "global-local-symtab-final-o32" 1670run_dump_test_n32 "global-local-symtab-final-n32" 1671run_dump_test_n64 "global-local-symtab-final-n64" 1672