]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/testsuite/ld-mips-elf/mips-elf.exp
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / ld / testsuite / ld-mips-elf / mips-elf.exp
CommitLineData
a657e7c1 1# Expect script for MIPS ELF linker tests
250d07de 2# Copyright (C) 2002-2021 Free Software Foundation, Inc.
a657e7c1 3#
f96b4a7b
NC
4# This file is part of the GNU Binutils.
5#
6# This program is free software; you can redistribute it and/or modify
a657e7c1 7# it under the terms of the GNU General Public License as published by
f96b4a7b 8# the Free Software Foundation; either version 3 of the License, or
a657e7c1
CD
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
f96b4a7b
NC
18# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19# MA 02110-1301, USA.
a657e7c1
CD
20#
21
0a44bf69
RS
22if {[istarget "mips*-*-vxworks"]} {
23 set mipsvxtests {
897aea50 24 {"VxWorks shared library test 1" "-shared -Tvxworks1.ld" ""
0a44bf69
RS
25 "-mips2" {vxworks1-lib.s}
26 {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
9e3313ae 27 {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
0a44bf69
RS
28 "libvxworks1.so"}
29 {"VxWorks executable test 1 (dynamic)" \
897aea50 30 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic" ""
0a44bf69 31 "-mips2" {vxworks1.s}
0942c7ab 32 {{readelf {--relocs -T} vxworks1.rd} {objdump -dr vxworks1.dd}}
0a44bf69
RS
33 "vxworks1"}
34 {"VxWorks executable test 2 (dynamic)" \
897aea50 35 "-Tvxworks1.ld -q --force-dynamic" ""
0a44bf69
RS
36 "-mips2" {vxworks2.s}
37 {{readelf --segments vxworks2.sd}}
38 "vxworks2"}
39 {"VxWorks executable test 2 (static)"
897aea50 40 "-Tvxworks1.ld" ""
0a44bf69
RS
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"
8275b357 47 run_dump_test "vxworks-forced-local-1"
0a44bf69
RS
48 return
49}
50
fbf18a5c
TS
51if {![istarget mips*-*-*] || ![is_elf_format]} {
52 return
53}
30a2f863 54
78da84f9
MR
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)]
7153abac 137set irix [expr [istarget *-*-irix*]]
fbf18a5c
TS
138set linux_gnu [expr [istarget mips*-*-linux*]]
139set embedded_elf [expr [istarget mips*-*-elf]]
30a2f863 140
ef2b5578 141# Set defaults.
78da84f9
MR
142set abi_asflags(o32) ""
143set abi_asflags(n32) ""
144set abi_asflags(n64) ""
145set abi_asflags(eabi) ""
ef2b5578 146set abi_ldflags(o32) ""
78da84f9
MR
147set abi_ldflags(n32) ""
148set abi_ldflags(n64) ""
149set abi_ldflags(eabi) ""
ef2b5578
MR
150
151# Override as needed.
78da84f9
MR
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"
ef2b5578 244 set abi_ldflags(o32) -melf32bsmip
78da84f9
MR
245 set abi_ldflags(n64) -melf64bmip
246 set irixemul 1
247} else {
248 set abi_asflags(o32) -32
249 set irixemul 1
ef2b5578 250}
3f1b17bb 251set tmips [expr $irixemul ? {""} : {"t"}]
ef2b5578 252
738e5348
RS
253if { $linux_gnu } {
254 run_ld_link_tests [list \
255 [list "Dummy shared library for MIPS16 PIC test 1" \
897aea50 256 "-shared -melf32btsmip" "" \
3c0bfb2a
RS
257 "-EB -32 -mips1" \
258 { mips16-pic-1-dummy.s } \
738e5348
RS
259 {} \
260 "mips16-pic-1-dummy.so"] \
261 [list "MIPS16 PIC test 1" \
897aea50 262 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \
3c0bfb2a
RS
263 "-EB -32 -mips1 -I $srcdir/$subdir" \
264 { mips16-pic-1a.s mips16-pic-1b.s } \
738e5348
RS
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" \
897aea50 269 "-melf32btsmip -T mips16-pic-1.ld -shared" "" \
3c0bfb2a
RS
270 "-EB -32 -mips1 -I $srcdir/$subdir" \
271 { mips16-pic-2a.s mips16-pic-2b.s } \
738e5348
RS
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 } } \
861fb55a
DJ
277 "mips16-pic-2"] \
278 [list "MIPS16 PIC test 3" \
897aea50 279 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" "" \
3c0bfb2a
RS
280 "-EB -32 -mips1 -I $srcdir/$subdir" \
281 { mips16-pic-3a.s mips16-pic-3b.s } \
861fb55a
DJ
282 { { objdump -dr mips16-pic-3.dd } \
283 { readelf --relocs mips16-pic-3.rd } \
284 { readelf -A mips16-pic-3.gd } } \
61b0a4af
RS
285 "mips16-pic-3"] \
286 [list "MIPS16 PIC test 4 (shared library)" \
897aea50 287 "-shared -melf32btsmip -T mips16-pic-1.ld --version-script mips16-pic-4.ver" "" \
3c0bfb2a
RS
288 "-EB -32 -mips1" \
289 { mips16-pic-4a.s mips16-pic-4b.s } \
61b0a4af
RS
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)" \
897aea50 295 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-4.so" "" \
3c0bfb2a
RS
296 "-EB -32 -mips1" \
297 { mips16-pic-4c.s } \
61b0a4af
RS
298 { { objdump -dr mips16-pic-4b.dd } } \
299 "mips16-pic-4"]]
738e5348
RS
300}
301
fbf18a5c
TS
302# Check MIPS16 markings being passed through link.
303run_dump_test "mips16-1"
8914585c 304
fbf18a5c
TS
305# MIPS branch offset final link checking.
306run_dump_test "branch-misc-1"
6f50d611 307run_dump_test "branch-misc-2"
78da84f9
MR
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"
0c117286 358
df58fc94
RS
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" \
897aea50 365 "-shared -nostdlib -melf32btsmip" "" \
df58fc94
RS
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" \
897aea50 371 "-r -melf32btsmip" "" \
df58fc94
RS
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" \
897aea50 377 "-nostdlib -T jalx-2.ld tmpdir/libjalx-2.so tmpdir/jalx-2-ex.o.r -melf32btsmip" "" \
df58fc94
RS
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
78da84f9
MR
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"
17c6c9d9 414
de341542
MR
415run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]]
416run_dump_test "unaligned-jalx-1" [list [list ld $abi_ldflags(o32)]]
a6ebf616
MR
417run_dump_test "unaligned-jalx-2" [list [list ld $abi_ldflags(o32)]]
418run_dump_test "unaligned-jalx-3" [list [list ld $abi_ldflags(o32)]]
de341542
MR
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)]]
de341542
MR
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)]]
de341542 423
78da84f9
MR
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
de341542 452
732be173
DJ
453# Test multi-got link. We only do this on GNU/Linux because it requires
454# the "traditional" emulations.
455if { $linux_gnu } {
78da84f9
MR
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"
732be173 460}
30a2f863 461
0a61c8c2
RS
462# Test __gnu_local_gp accesses
463if { $linux_gnu } {
78da84f9
MR
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}}
0a61c8c2
RS
467}
468
a5499fa4
MF
469# Test PIE debug dynamic tags
470if { $linux_gnu } {
78da84f9
MR
471 run_dump_test_o32 "pie-o32"
472 run_dump_test_n32 "pie-n32"
473 run_dump_test_n64 "pie-n64"
a5499fa4
MF
474}
475
78da84f9
MR
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}}
fbf18a5c 482}
78da84f9
MR
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}}
48fe7bda 498
fbf18a5c 499if { $linux_gnu } {
78da84f9
MR
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}}
861fb55a
DJ
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).
0375b0a5
MR
513 #
514 # We then repeat the same three tests for microMIPS stubs.
861fb55a 515 run_ld_link_tests {
897aea50 516 {"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip" ""
861fb55a
DJ
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)"
897aea50 522 "-melf32btsmip -Tpic-and-nonpic-1.ld" ""
861fb55a
DJ
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"}
3734320d
MF
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"}
861fb55a 533 {"PIC and non-PIC test 1 (static 2)"
897aea50 534 "-melf32btsmip -Tpic-and-nonpic-1.ld tmpdir/pic-and-nonpic-1-rel.o" ""
861fb55a
DJ
535 "" {}
536 {{objdump -dr pic-and-nonpic-1.dd}
537 {readelf --symbols pic-and-nonpic-1.nd}}
538 "pic-and-nonpic-1-static2.o"}
0375b0a5
MR
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"}
861fb55a 575 }
78da84f9 576 run_dump_test_o32 "pic-and-nonpic-2"
861fb55a
DJ
577 run_ld_link_tests {
578 {"PIC and non-PIC test 3 (shared library)"
897aea50 579 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" ""
861fb55a
DJ
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)"
897aea50 586 "-melf32btsmip -Tpic-and-nonpic-3b.ld tmpdir/pic-and-nonpic-3a.so" ""
861fb55a
DJ
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"}
3734320d
MF
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"}
861fb55a 603 }
78da84f9 604 run_dump_test_o32 "pic-and-nonpic-3-error" {noarch {as -EB} {ld -EB}}
861fb55a
DJ
605 run_ld_link_tests {
606 {"PIC and non-PIC test 4 (shared library)"
897aea50 607 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld" ""
861fb55a
DJ
608 "-32 -EB -mips2" {pic-and-nonpic-4a.s}
609 {}
610 "pic-and-nonpic-4a.so"}
611 {"PIC and non-PIC test 4 (executable)"
897aea50 612 "-melf32btsmip -Tpic-and-nonpic-4b.ld tmpdir/pic-and-nonpic-4a.so" ""
861fb55a
DJ
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 }
78da84f9 622 run_dump_test_o32 "pic-and-nonpic-4-error" {noarch {as -EB} {ld -EB}}
861fb55a
DJ
623 run_ld_link_tests {
624 {"PIC and non-PIC test 5 (executable)"
897aea50 625 "-melf32btsmip -Tpic-and-nonpic-5b.ld tmpdir/pic-and-nonpic-3a.so tmpdir/pic-and-nonpic-4a.so" ""
861fb55a
DJ
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 }
78da84f9
MR
636 set abis {}
637 if $has_abi(o32) {
638 lappend abis o32 -32 elf32btsmip
639 }
640 if $has_abi(n32) {
861fb55a 641 lappend abis n32 -n32 elf32btsmipn32
78da84f9
MR
642 }
643 if $has_abi(n64) {
861fb55a
DJ
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)" \
897aea50 649 "-m$emul -shared -Tpic-and-nonpic-3a.ld" "" \
861fb55a
DJ
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)" \
897aea50 654 "-m$emul -Tpic-and-nonpic-6.ld tmpdir/pic-and-nonpic-6-${abi}.so" "" \
861fb55a
DJ
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}"]]
43b5366b
MR
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)" \
897aea50 679 "$abi_ldflags($abi) -shared" "" \
43b5366b
MR
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)" \
897aea50 688 "$abi_ldflags($abi) -shared -version-script gp-hidden-ver.ver tmpdir/gp-hidden-lib-${abi}.so" "" \
43b5366b
MR
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)" \
897aea50 697 "$abi_ldflags($abi) -e 0 -rpath-link . tmpdir/gp-hidden-ver-${abi}.so" "" \
43b5366b
MR
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}"]]
861fb55a 704 }
fbf18a5c 705}
a657e7c1 706
78da84f9 707run_dump_test_eabi "region1"
18ab1921 708
78da84f9
MR
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" }]]]
17a6716a 715run_dump_test "reloc-merge-lo16"
3b788261 716run_dump_test "reloc-3"
78da84f9 717run_dump_test_n32 "reloc-3-n32" noarch
43ec5bc0
AN
718run_dump_test "reloc-4"
719run_dump_test "reloc-5"
78da84f9 720if { $has_abi(n32) && [check_shared_lib_support] } {
ef2b5578
MR
721 run_ld_link_tests [list \
722 [list \
723 "reloc test 6a" \
897aea50 724 "-shared $abi_ldflags(n32)" "" \
cde00cbb 725 "$abi_asflags(n32)" \
ef2b5578
MR
726 "reloc-6a.s" \
727 {} \
728 "reloc-6a.so"] \
729 [list \
730 "reloc test 6b" \
897aea50 731 "$abi_ldflags(n32) tmpdir/reloc-6a.so" "" \
cde00cbb 732 "$abi_asflags(n32)" \
ef2b5578
MR
733 "reloc-6b.s" \
734 {} \
735 "reloc-6b"]]
77c56f44 736}
43ec5bc0 737
78da84f9
MR
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"]]
353057a5 747}
78da84f9
MR
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"
8c946ed5 754}
78da84f9
MR
755run_dump_test_eabi "eh-frame3"
756run_dump_test_eabi "eh-frame4"
18e04883
RS
757if {$linux_gnu} {
758 set eh_frame5_test {
759 {"MIPS eh-frame 5"
897aea50 760 "-melf32btsmip -shared -Teh-frame5.ld" ""
18e04883
RS
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}
0efd4160 768
2f0c68f2
CM
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
0efd4160 781run_dump_test "jaloverflow"
c314987d 782run_dump_test "jaloverflow-2"
77434823 783
78da84f9
MR
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"
538baf8b 788
78da84f9
MR
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
d6f16593 795
776167e8
CM
796run_dump_test "mode-change-error-1"
797
78da84f9
MR
798run_dump_test_o32 "mips16-hilo"
799run_dump_test_n32 "mips16-hilo-n32"
f4e584bd 800
cc27e1dc 801if { $linux_gnu } {
78da84f9 802 run_dump_test_n32 "textrel-1"
c224138d 803 run_dump_test "got-page-1"
78da84f9
MR
804 run_dump_test_n32 "got-page-2"
805 run_dump_test_n64 "dyn-sec64" noarch
c224138d 806 run_dump_test "got-page-3"
78da84f9
MR
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) {
13db6b44
RS
824 run_ld_link_tests [subst {
825 {"GOT page 5" "-shared $abi_ldflags(n32) -T got-page-1.ld"
897aea50 826 "" "$abi_asflags(n32)" {got-page-5.s}
13db6b44
RS
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"
897aea50 831 "" "$abi_asflags(n32)" {got-page-6.s}
13db6b44
RS
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"
897aea50 836 "" "$abi_asflags(n32)"
13db6b44
RS
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"
897aea50 843 "" "$abi_asflags(n32)"
13db6b44
RS
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 }
ccb4c951 851 run_dump_test "got-dump-1"
78da84f9 852 run_dump_test_n64 "got-dump-2" noarch
63897e2c 853 run_dump_test "reloc-estimate-1"
cc27e1dc
EC
854}
855
78da84f9 856run_dump_test_n32 "emit-relocs-1" {{as -EB} {ld -EB}}
81d43bff 857
f16a9783
MS
858run_dump_test "hash1"
859run_dump_test "hash2"
73934d31 860
78da84f9 861if { $linux_gnu && $has_abi(o32) } {
d68033ea 862 # The number of symbols that are always included in the symbol table
7f923b7f 863 # for these tests.
d68033ea 864 # the null symbol entry
7f923b7f 865 set base_syms 1
d68033ea
MR
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 }
4b8377e7
MR
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"]]
d68033ea
MR
923 }
924}
5108fc1b 925
f4e584bd
DJ
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:
897aea50
MR
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
f4e584bd
DJ
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 {
897aea50 938 {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld" ""
f4e584bd
DJ
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"}
9143e72c
MR
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"}
897aea50 948 {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld" ""
f4e584bd
DJ
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"
897aea50 953 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so" ""
f4e584bd
DJ
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"}
9143e72c
MR
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"}
f4e584bd 963 {"Shared library with multiple GOTs and TLS"
897aea50 964 "-shared -melf32btsmip -T mips-lib.ld" ""
f4e584bd
DJ
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"
897aea50 971 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver" ""
f4e584bd
DJ
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"
897aea50 976 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so" ""
f4e584bd
DJ
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)"
897aea50 981 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o" ""
f4e584bd
DJ
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)"
897aea50 986 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o" ""
f4e584bd
DJ
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"
897aea50 991 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver" ""
f4e584bd
DJ
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"}
4005427f 995 {"Shared library with TLS and hidden symbols (2)"
897aea50 996 "-shared -melf32btsmip -T mips-lib.ld" ""
4005427f
RS
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"}
ead49a57 1000 {"Shared library with TLS and hidden symbols (3)"
897aea50 1001 "-shared -melf32btsmip -T tls-hidden3.ld" ""
ead49a57
RS
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)"
897aea50 1007 "-shared -melf32btsmip -T tls-hidden3.ld" ""
ead49a57
RS
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"}
f4e584bd
DJ
1011}
1012
78da84f9 1013if { $linux_gnu && $has_abi(o32) } {
f4e584bd
DJ
1014 run_ld_link_tests $mips_tls_tests
1015}
1016
08e8dfaf
RS
1017set mips16_call_global_test [list \
1018 [list "Global calls from mips16" \
897aea50 1019 "$abi_ldflags(o32) -T no-shared-1.ld" "" \
ef2b5578 1020 "$abi_asflags(o32) -mips32r2" \
08e8dfaf
RS
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"]]
35d3d567 1024
78da84f9
MR
1025if { $has_abi(o32) } {
1026 run_ld_link_tests $mips16_call_global_test
1027}
b9d58d71 1028
08e8dfaf
RS
1029set mips16_intermix_test [list \
1030 [list "Intermixing mips32 and mips16 functions" \
897aea50 1031 "$abi_ldflags(o32)" "" \
ef2b5578 1032 "$abi_asflags(o32) -mips32r2" \
08e8dfaf
RS
1033 {mips16-intermix-1.s mips16-intermix-2.s} \
1034 {{objdump -t mips16-intermix.d}} \
1035 "mips16-intermix"]]
b9d58d71 1036
78da84f9
MR
1037if { $has_abi(o32) } {
1038 run_ld_link_tests $mips16_intermix_test
1039}
b314ec0e
RS
1040
1041run_dump_test "mips16-local-stubs-1"
2cf19d5c 1042
ca9584fb
CM
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
78da84f9
MR
1051if { $has_abi(o32) } {
1052 run_ld_link_tests $mips16_fp_stub_test
1053}
e319abb4 1054
351cdf24 1055foreach firstfpabi [list 0 1 2 3 4 5 6 7 ] {
e319abb4 1056 foreach secondfpabi [list 4 5 6 7 ] {
78da84f9 1057 run_dump_test_o32 "attr-gnu-4-${firstfpabi}${secondfpabi}"
e319abb4
MF
1058 }
1059}
1060foreach firstfpabi [list 4 5 6 7 ] {
3350cc01 1061 foreach secondfpabi [list 0 1 2 3 8 9] {
78da84f9 1062 run_dump_test_o32 "attr-gnu-4-${firstfpabi}${secondfpabi}"
e319abb4
MF
1063 }
1064}
1065foreach firstfpabi [list 0 1 2 3 ] {
3350cc01 1066 foreach secondfpabi [list 0 1 2 3 8 9] {
351cdf24
MF
1067 run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}"
1068 }
1069}
e319abb4 1070
351cdf24
MF
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
78da84f9
MR
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"
634835ae 1111
ba92f887
MR
1112run_dump_test "nan-legacy"
1113run_dump_test "nan-2008"
1114run_dump_test "nan-mixed-1"
1115run_dump_test "nan-mixed-2"
1116
78da84f9 1117if { $linux_gnu && $has_abi(o32) } {
634835ae
RS
1118 run_ld_link_tests {
1119 {"GOT and versioning 1"
897aea50 1120 "-shared -melf32btsmip --version-script got-vers-1.ver" ""
634835ae
RS
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}
e7e2196d
MR
1128
1129run_dump_test "undefined"
dfb93f11 1130run_dump_test "undefined-warn"
1063d8cf
CF
1131
1132# Test the conversion from jr to b
1133if { $linux_gnu } {
78da84f9
MR
1134 run_dump_test_o32 "jr-to-b-1" noarch
1135 run_dump_test_o32 "jr-to-b-2" noarch
1063d8cf 1136}
df58fc94
RS
1137
1138# MIPS16 and microMIPS interlinking test.
1139run_dump_test "mips16-and-micromips"
9b11fa1a 1140
78da84f9
MR
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
9b11fa1a 1152# Export class call relocation tests.
500c05dd
MR
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 \
9b11fa1a 1162 [list \
500c05dd
MR
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 }
9b11fa1a 1174}
cde7cb01
MR
1175
1176# Magic __ehdr_start symbol tests.
cde7cb01
MR
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"] \
31321c80 1186 "ehdr_start-1-${abi}"] \
cde7cb01
MR
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}
d6101ac2
MR
1195
1196# R_MIPS_JALR reloc tests.
d6101ac2
MR
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"] \
c1556ecd
MR
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"] \
0e392101
MR
1212 "jalr4-${abi}"] \
1213 [list \
1214 "MIPSr6 JALR reloc unaligned/cross-mode link test ($abi)" \
1215 "$abi_ldflags($abi) -T jalr3.ld" "" \
78da84f9
MR
1216 "[string map\
1217 [list o32 -mips32r6\
1218 n32 -mips64r6\
1219 n64 -mips64r6] $abi ]\
1220 [regsub -- {-march=[^[:blank:]]*} $abi_asflags($abi) {}]" \
0e392101
MR
1221 {../../../gas/testsuite/gas/mips/jalr4.s} \
1222 {{objdump {-d --prefix-addresses --show-raw-insn} jalr4-r6.dd}} \
c1556ecd 1223 "jalr4-${abi}"]]
d6101ac2 1224}
690f47bf
RS
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]
54806ffa 1251 if { $filter & 7 } {
690f47bf
RS
1252 lappend files compressed-plt-1a.s
1253 }
54806ffa 1254 if { $filter & 56 } {
690f47bf
RS
1255 lappend files compressed-plt-1b.s
1256 }
54806ffa 1257 if { $filter & 64 } {
690f47bf
RS
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
78da84f9 1275if { $linux_gnu && $has_abi(o32) } {
690f47bf 1276 build_mips_plt_lib o32
54806ffa
MR
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
690f47bf 1283 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16" \
54806ffa
MR
1284 o32 109 0 mips16
1285 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 branches" \
1286 o32 18 0 mips16-branch
690f47bf 1287 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with %got" \
54806ffa 1288 o32 109 0 mips16-got compressed-plt-1d.s
690f47bf 1289 run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with .word" \
54806ffa 1290 o32 109 0 mips16-word compressed-plt-1e.s
690f47bf 1291 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS" \
54806ffa
MR
1292 o32 109 1 umips
1293 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS branches" \
1294 o32 18 1 umips-branch
690f47bf 1295 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with %got" \
54806ffa 1296 o32 109 1 umips-got compressed-plt-1d.s
690f47bf 1297 run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with .word" \
54806ffa 1298 o32 109 1 umips-word compressed-plt-1e.s
78da84f9 1299}
690f47bf 1300
78da84f9
MR
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
690f47bf 1307}
1f599d0e 1308
789ff5b6
MR
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.
78da84f9 1313if { $linux_gnu && $has_abi(n64) } {
789ff5b6
MR
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
1f599d0e 1353# PR ld/19908 export class tests.
78da84f9 1354if { $linux_gnu && $has_abi(o32) } {
1f599d0e
MR
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}
23ec1e32
MR
1380
1381# PR ld/21334 GOT relocation in static binary test.
78da84f9
MR
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}
b417536f
MR
1392
1393# Check that the ISA level is consistently II for the LSI 4010.
78da84f9 1394run_dump_test_o32 "lsi-4010-isa" noarch
9f00292e
MR
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.
78da84f9
MR
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
9f00292e 1430}
e54cb31a
MR
1431
1432# Verify that we can link ELF input into the `binary' output format.
1433run_dump_test "binary"
6798f8bf
MR
1434
1435# Verify special section processing.
78da84f9 1436if { $has_abi(o32) || $has_abi(n32) } {
6798f8bf
MR
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"
3be08ea4
SA
1450
1451# Test that _gp_disp symbol is not present in symbol tables.
78da84f9 1452run_dump_test_o32 "gp-disp-sym"
982d0151
MR
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] \
0942c7ab 1579 [list readelf {--dyn-syms --wide} pr21375${rdesuf}${irixsuf}.sd] \
982d0151
MR
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}
3c7687b9
MR
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"
304f09d0
FS
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"]]
1e129bbe
FS
1659
1660run_dump_test_o32 "reloc-pcrel-r6"
3f1b17bb
MR
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"
c77cb2a0
MR
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"