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