1 # Expect script
for MIPS ELF linker tests
2 # Copyright
2002, 2003, 2004, 2005, 2006, 2007, 2008
3 # Free Software Foundation
, Inc.
5 # This file is part of the GNU Binutils.
7 # This
program is free software
; you can redistribute it and
/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation
; either version
3 of the License
, or
10 #
(at your option
) any later version.
12 # This
program is distributed in the hope that it will be useful
,
13 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License
for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this
program; if not
, write to the Free Software
19 # Foundation
, Inc.
, 51 Franklin Street
- Fifth Floor
, Boston
,
23 if {[istarget
"mips*-*-vxworks"]} {
25 {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
26 "-mips2" {vxworks1-lib.s}
27 {{readelf
--relocs vxworks1
-lib.rd
} {objdump
-dr vxworks1
-lib.dd
}
28 {readelf
--symbols vxworks1
-lib.nd
} {readelf
-d vxworks1
-lib.td
}}
30 {"VxWorks executable test 1 (dynamic)" \
31 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
33 {{readelf
--relocs vxworks1.rd
} {objdump
-dr vxworks1.dd
}}
35 {"VxWorks executable test 2 (dynamic)" \
36 "-Tvxworks1.ld -q --force-dynamic"
38 {{readelf
--segments vxworks2.sd
}}
40 {"VxWorks executable test 2 (static)"
43 {{readelf
--segments vxworks2
-static.sd
}}
46 run_ld_link_tests $mipsvxtests
47 run_dump_test
"vxworks1-static"
48 run_dump_test
"vxworks-forced-local-1"
52 if {![istarget mips
*-*-*] ||
![is_elf_format
]} {
56 set has_newabi
[expr
[istarget
*-*-irix6
*] ||
[istarget mips64
*-*-linux
*]]
57 set linux_gnu
[expr
[istarget mips
*-*-linux
*]]
58 set embedded_elf
[expr
[istarget mips
*-*-elf
]]
61 run_ld_link_tests
[list \
62 [list
"Dummy shared library for MIPS16 PIC test 1" \
63 "-shared -melf32btsmip" \
65 { mips16
-pic
-1-dummy.s
} \
67 "mips16-pic-1-dummy.so"] \
68 [list
"MIPS16 PIC test 1" \
69 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" \
70 "-EB -32 -mips1 -I $srcdir/$subdir" \
71 { mips16
-pic
-1a.s mips16
-pic
-1b.s
} \
72 { { objdump
{ -dr
-j.
text } mips16
-pic
-1.dd
}
73 { readelf
-A mips16
-pic
-1.gd
} } \
75 [list
"MIPS16 PIC test 2" \
76 "-melf32btsmip -T mips16-pic-1.ld -shared" \
77 "-EB -32 -mips1 -I $srcdir/$subdir" \
78 { mips16
-pic
-2a.s mips16
-pic
-2b.s
} \
79 { { objdump
{ -dr
-j.
text } mips16
-pic
-2.dd
} \
80 { readelf
-A mips16
-pic
-2.gd
} \
81 { readelf
--symbols mips16
-pic
-2.nd
} \
82 { readelf
--relocs mips16
-pic
-2.rd
} \
83 { readelf
-d mips16
-pic
-2.ad
} } \
85 [list
"MIPS16 PIC test 3" \
86 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-1-dummy.so" \
87 "-EB -32 -mips1 -I $srcdir/$subdir" \
88 { mips16
-pic
-3a.s mips16
-pic
-3b.s
} \
89 { { objdump
-dr mips16
-pic
-3.dd
} \
90 { readelf
--relocs mips16
-pic
-3.rd
} \
91 { readelf
-A mips16
-pic
-3.gd
} } \
93 [list
"MIPS16 PIC test 4 (shared library)" \
94 "-shared -melf32btsmip -T mips16-pic-1.ld --version-script mips16-pic-4.ver" \
96 { mips16
-pic
-4a.s mips16
-pic
-4b.s
} \
97 { { objdump
-dr mips16
-pic
-4a.dd
} \
98 { readelf
--symbols mips16
-pic
-4a.nd
} \
99 { readelf
-A mips16
-pic
-4a.gd
} } \
101 [list
"MIPS16 PIC test 4 (executable)" \
102 "-melf32btsmip -T mips16-pic-1.ld tmpdir/mips16-pic-4.so" \
104 { mips16
-pic
-4c.s
} \
105 { { objdump
-dr mips16
-pic
-4b.dd
} } \
109 if { [istarget mips64
*-linux
-gnu
] } {
110 set o32_as_flags
"-32 -EB"
111 set o32_ld_flags
"-melf32btsmip"
117 # Check MIPS16 markings being passed through link.
118 run_dump_test
"mips16-1"
120 # MIPS branch offset final link checking.
121 run_dump_test
"branch-misc-1"
123 # Test multi
-got link. We only
do this
on GNU
/Linux because it requires
124 # the
"traditional" emulations.
126 run_dump_test
"multi-got-1"
127 run_dump_test
"multi-got-no-shared"
128 run_dump_test
"multi-got-hidden-1"
129 run_dump_test
"multi-got-hidden-2"
132 # Test __gnu_local_gp accesses
134 run_dump_test
"no-shared-1-o32"
136 run_dump_test
"no-shared-1-n32"
137 run_dump_test
"no-shared-1-n64"
142 run_dump_test
"elf-rel-got-n32"
143 run_dump_test
"elf-rel-xgot-n32"
145 run_dump_test
"elf-rel-got-n64-linux"
146 run_dump_test
"elf-rel-xgot-n64-linux"
148 run_dump_test
"elf-rel-got-n64"
149 run_dump_test
"elf-rel-xgot-n64"
152 run_dump_test
"relax-jalr-n32"
153 run_dump_test
"relax-jalr-n32-shared"
154 run_dump_test
"relax-jalr-n64"
155 run_dump_test
"relax-jalr-n64-shared"
159 run_dump_test
"rel32-o32"
160 run_dump_test
"rel32-n32"
161 run_dump_test
"rel64"
162 # The first test checks that a mixed PIC
/non
-PIC relocatable link
163 # will not introduce
any stubs itself
, but will flag PIC functions
164 #
for the final link.
166 # The second test checks that we insert stubs
for calls from
167 # non
-PIC functions to PIC functions when linking the original
168 # two objects together.
170 # The third test checks that we
do the same when linking the
171 # result of the first link
(with no other source files
).
173 {"PIC and non-PIC test 1 (relocatable)" "-r -melf32btsmip"
174 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
175 {{objdump
-dr pic
-and
-nonpic
-1-rel.dd
}
176 {readelf
--symbols pic
-and
-nonpic
-1-rel.nd
}}
177 "pic-and-nonpic-1-rel.o"}
178 {"PIC and non-PIC test 1 (static 1)"
179 "-melf32btsmip -Tpic-and-nonpic-1.ld"
180 "-32 -EB -mips2" {pic-and-nonpic-1a.s pic-and-nonpic-1b.s}
181 {{objdump
-dr pic
-and
-nonpic
-1.dd
}
182 {readelf
--symbols pic
-and
-nonpic
-1.nd
}}
183 "pic-and-nonpic-1-static1.o"}
184 {"PIC and non-PIC test 1 (static 2)"
185 "-melf32btsmip -Tpic-and-nonpic-1.ld tmpdir/pic-and-nonpic-1-rel.o"
187 {{objdump
-dr pic
-and
-nonpic
-1.dd
}
188 {readelf
--symbols pic
-and
-nonpic
-1.nd
}}
189 "pic-and-nonpic-1-static2.o"}
191 run_dump_test
"pic-and-nonpic-2"
193 {"PIC and non-PIC test 3 (shared library)"
194 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld"
195 "-32 -EB -mips2" {pic-and-nonpic-3a.s}
196 {{readelf
--segments pic
-and
-nonpic
-3a.sd
}
197 {readelf
-A pic
-and
-nonpic
-3a.gd
}
198 {objdump
-dr pic
-and
-nonpic
-3a.dd
}}
199 "pic-and-nonpic-3a.so"}
200 {"PIC and non-PIC test 3 (executable)"
201 "-melf32btsmip -Tpic-and-nonpic-3b.ld tmpdir/pic-and-nonpic-3a.so"
202 "-32 -EB -mips2" {pic-and-nonpic-3b.s}
203 {{readelf
--segments pic
-and
-nonpic
-3b.sd
}
204 {objdump
-dr pic
-and
-nonpic
-3b.dd
}
205 {objdump
{-s
-j.got.plt
} pic
-and
-nonpic
-3b.pd
}
206 {readelf
-A pic
-and
-nonpic
-3b.gd
}
207 {readelf
--relocs pic
-and
-nonpic
-3b.rd
}
208 {readelf
--symbols pic
-and
-nonpic
-3b.nd
}
209 {readelf
-d pic
-and
-nonpic
-3b.ad
}}
212 run_dump_test
"pic-and-nonpic-3-error"
214 {"PIC and non-PIC test 4 (shared library)"
215 "-melf32btsmip -shared -Tpic-and-nonpic-3a.ld"
216 "-32 -EB -mips2" {pic-and-nonpic-4a.s}
218 "pic-and-nonpic-4a.so"}
219 {"PIC and non-PIC test 4 (executable)"
220 "-melf32btsmip -Tpic-and-nonpic-4b.ld tmpdir/pic-and-nonpic-4a.so"
221 "-32 -EB -mips2" {pic-and-nonpic-4b.s}
222 {{readelf
--segments pic
-and
-nonpic
-4b.sd
}
223 {objdump
-dr pic
-and
-nonpic
-4b.dd
}
224 {objdump
{-s
-j.got
-j.data
} pic
-and
-nonpic
-4b.gd
}
225 {readelf
--relocs pic
-and
-nonpic
-4b.rd
}
226 {readelf
--symbols pic
-and
-nonpic
-4b.nd
}
227 {readelf
-d pic
-and
-nonpic
-4b.ad
}}
230 run_dump_test
"pic-and-nonpic-4-error"
232 {"PIC and non-PIC test 5 (executable)"
233 "-melf32btsmip -Tpic-and-nonpic-5b.ld tmpdir/pic-and-nonpic-3a.so tmpdir/pic-and-nonpic-4a.so"
234 "-32 -EB -mips2" {pic-and-nonpic-5a.s pic-and-nonpic-5b.s}
235 {{readelf
--segments pic
-and
-nonpic
-5b.sd
}
236 {objdump
-dr pic
-and
-nonpic
-5b.dd
}
237 {objdump
{-s
-j.got.plt
-j.data
} pic
-and
-nonpic
-5b.pd
}
238 {readelf
-A pic
-and
-nonpic
-5b.gd
}
239 {readelf
--relocs pic
-and
-nonpic
-5b.rd
}
240 {readelf
--symbols pic
-and
-nonpic
-5b.nd
}
241 {readelf
-d pic
-and
-nonpic
-5b.ad
}}
244 set abis
{ o32
-32 elf32btsmip
}
246 lappend abis n32
-n32 elf32btsmipn32
247 lappend abis n64
-64 elf64btsmip
249 foreach
{ abi flag emul
} $abis
{
250 run_ld_link_tests
[list \
251 [list
"PIC and non-PIC test 6 ($abi shared library)" \
252 "-m$emul -shared -Tpic-and-nonpic-3a.ld" \
254 [list
"pic-and-nonpic-6-${abi}a.s"] {} \
255 "pic-and-nonpic-6-${abi}.so"] \
256 [list
"PIC and non-PIC test 6 ($abi executable)" \
257 "-m$emul -Tpic-and-nonpic-6.ld tmpdir/pic-and-nonpic-6-${abi}.so" \
259 [list
"pic-and-nonpic-6-${abi}b.s" \
260 "pic-and-nonpic-6-${abi}c.s"] \
261 [list
"readelf {--wide --segments} pic-and-nonpic-6-${abi}.sd" \
262 "objdump -dr pic-and-nonpic-6-${abi}.dd" \
263 "objdump {-s -j.got.plt} pic-and-nonpic-6-${abi}.pd" \
264 "readelf -A pic-and-nonpic-6-${abi}.gd" \
265 "readelf --relocs pic-and-nonpic-6-${abi}.rd" \
266 "readelf --symbols pic-and-nonpic-6-${abi}.nd" \
267 "readelf -d pic-and-nonpic-6-${abi}.ad"] \
268 "pic-and-nonpic-6-${abi}"]]
272 if { $embedded_elf
} {
273 run_dump_test
"region1"
277 # This could work
on other targets too
, but would need the appropriate
279 run_dump_test
"reloc-1-rel"
282 run_dump_test
"reloc-1-n32"
284 # Uses a linux
-specific
ld -m
switch
285 run_dump_test
"reloc-1-n64"
288 run_dump_test
"reloc-2"
289 run_dump_test
"reloc-merge-lo16"
290 run_dump_test
"reloc-3"
292 run_dump_test
"reloc-3-n32"
294 run_dump_test
"reloc-4"
295 run_dump_test
"reloc-5"
297 if {$has_newabi
&& $linux_gnu
} {
298 run_dump_test
"eh-frame1-n32"
299 run_dump_test
"eh-frame1-n64"
300 run_dump_test
"eh-frame2-n32"
301 run_dump_test
"eh-frame2-n64"
304 run_dump_test
"eh-frame3"
305 run_dump_test
"eh-frame4"
310 "-melf32btsmip -shared -Teh-frame5.ld"
313 {{readelf
{--relocs
-wf
} eh
-frame5.d
}}
316 run_ld_link_tests $eh_frame5_test
319 run_dump_test
"jaloverflow"
320 run_dump_test
"jaloverflow-2"
322 run_dump_test
"jalbal"
325 run_dump_test
"mips16-hilo"
327 run_dump_test
"mips16-hilo-n32"
331 run_dump_test
"textrel-1"
332 run_dump_test
"got-page-1"
334 run_dump_test
"got-page-2"
335 run_dump_test
"dyn-sec64"
337 run_dump_test
"got-page-3"
338 run_dump_test
"got-dump-1"
340 run_dump_test
"got-dump-2"
342 run_dump_test
"reloc-estimate-1"
346 run_dump_test
"emit-relocs-1"
349 run_dump_test
"hash1a"
350 run_dump_test
"hash1b"
351 run_dump_test
"hash1c"
353 if {[istarget mips
*-*-linux
*]} {
354 # The number of symbols that are always included in the symbol table
355 #
for these tests. The
4 are
:
357 # the null symbol entry
358 # the .MIPS.stubs section symbol
360 # _GLOBAL_OFFSET_TABLE_
362 foreach dynsym
{ 7fff
8000 fff0
10000 2fe80
} {
365 "Stub for dynsym 0x$dynsym" \
366 "-shared -melf32btsmip -T stub-dynsym-1.ld" \
368 "-EB -march=mips1 -32 -KPIC" \
369 "--defsym base_syms=$base_syms" \
370 "--defsym dynsym=0x$dynsym"] \
371 [list
"stub-dynsym-1.s"] \
374 "stub-dynsym-1-$dynsym.d"]] \
375 "stub-dynsym-1-$dynsym"]]
379 #
For tests which may involve multiple files
, use run_ld_link_tests.
381 # List contains test
-items with
3 items followed by
2 lists
:
382 #
0:name 1:ld options
2:assembler options
383 #
3:filenames of assembler files
4: action and options.
5: name of output file
386 # objdump
: Apply objdump options
on result. Compare with regex
(last
arg).
387 # nm
: Apply nm options
on result. Compare with regex
(last
arg).
388 # readelf
: Apply readelf options
on result. Compare with regex
(last
arg).
391 {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld"
392 "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s}
393 {{objdump
{-dr
-m mips
:isa32r2
} tlsbin
-o32.d
} {objdump
-srj.got tlsbin
-o32.got
}}
395 {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld"
396 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
397 {{objdump
{-dr
-m mips
:isa32r2
} tlslib
-o32.d
} {objdump
-Rsj.got tlslib
-o32.got
}}
399 {"Dynamic executable with TLS"
400 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so"
401 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s}
402 {{objdump
{-dr
-m mips
:isa32r2
} tlsdyn
-o32.d
} {objdump
-Rsj.got tlsdyn
-o32.got
}}
404 {"Shared library with multiple GOTs and TLS"
405 "-shared -melf32btsmip -T mips-lib.ld"
406 "-EB -march=mips1 -32 -KPIC" {tls-multi-got-1-1.s tls-multi-got-1-2.s}
407 {{readelf
{-d
-r
} tls
-multi
-got
-1.r
}
408 {objdump
{-dr
-m mips
:isa32r2
} tls
-multi
-got
-1.d
}
409 {objdump
-Rsj.got tls
-multi
-got
-1.got
}}
411 {"Shared library with TLS and versioning"
412 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver"
413 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
414 {{objdump
{-dr
-m mips
:isa32r2
} tlslib
-o32.d
} {objdump
-Rsj.got tlslib
-o32
-ver.got
}}
416 {"Dynamic executable with TLS and versioning"
417 "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so"
418 "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s tlsdyn-o32-2.s}
419 {{objdump
{-dr
-m mips
:isa32r2
} tlsdyn
-o32
-1.d
} {objdump
-Rsj.got tlsdyn
-o32
-1.got
}}
420 "tls-dynamic-o32-ver"}
421 {"Dynamic executable with TLS and versioning (order 2)"
422 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o"
423 "-EB -march=mips1 -32 -KPIC" {}
424 {{objdump
{-dr
-m mips
:isa32r2
} tlsdyn
-o32
-2.d
} {objdump
-Rsj.got tlsdyn
-o32
-2.got
}}
425 "tls-dynamic-o32-ver-2"}
426 {"Dynamic executable with TLS and versioning (order 3)"
427 "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o"
428 "-EB -march=mips1 -32 -KPIC" {}
429 {{objdump
{-dr
-m mips
:isa32r2
} tlsdyn
-o32
-3.d
} {objdump
-Rsj.got tlsdyn
-o32
-3.got
}}
430 "tls-dynamic-o32-ver-3"}
431 {"Shared library with TLS and hidden symbols"
432 "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver"
433 "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
434 {{objdump
{-dr
-m mips
:isa32r2
} tlslib
-o32.d
} {objdump
-Rsj.got tlslib
-o32
-hidden.got
}}
435 "tlslib-o32-hidden.so"}
436 {"Shared library with TLS and hidden symbols (2)"
437 "-shared -melf32btsmip -T mips-lib.ld"
438 "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s}
439 {{objdump
-drj.
text tls
-hidden2.d
} {objdump
-sj.got tls
-hidden2
-got.d
}}
441 {"Shared library with TLS and hidden symbols (3)"
442 "-shared -melf32btsmip -T tls-hidden3.ld"
443 "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s}
444 {{objdump
-dj.
text tls
-hidden3.d
} {objdump
-sj.got tls
-hidden3.got
}
445 {readelf
--relocs tls
-hidden3.r
}}
447 {"Shared library with TLS and hidden symbols (4)"
448 "-shared -melf32btsmip -T tls-hidden3.ld"
449 "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s}
450 {{objdump
-sj.got tls
-hidden4.got
} {readelf
--relocs tls
-hidden4.r
}}
454 if {[istarget mips
*-*-linux
*]} {
455 run_ld_link_tests $mips_tls_tests
458 set mips16_call_global_test
[list \
459 [list
"Global calls from mips16" \
461 "$o32_as_flags -mips32r2" \
462 {mips16
-call-global
-1.s mips16
-call-global
-2.s mips16
-call-global
-3.s
} \
463 {{objdump
-dr mips16
-call-global.d
}} \
464 "mips16-call-global"]]
466 run_ld_link_tests $mips16_call_global_test
468 set mips16_intermix_test
[list \
469 [list
"Intermixing mips32 and mips16 functions" \
471 "$o32_as_flags -mips32r2" \
472 {mips16
-intermix
-1.s mips16
-intermix
-2.s
} \
473 {{objdump
-t mips16
-intermix.d
}} \
476 run_ld_link_tests $mips16_intermix_test
478 run_dump_test
"mips16-local-stubs-1"
480 run_dump_test
"attr-gnu-4-00"
481 run_dump_test
"attr-gnu-4-01"
482 run_dump_test
"attr-gnu-4-02"
483 run_dump_test
"attr-gnu-4-03"
484 run_dump_test
"attr-gnu-4-04"
485 run_dump_test
"attr-gnu-4-05"
486 run_dump_test
"attr-gnu-4-10"
487 run_dump_test
"attr-gnu-4-11"
488 run_dump_test
"attr-gnu-4-12"
489 run_dump_test
"attr-gnu-4-13"
490 run_dump_test
"attr-gnu-4-14"
491 run_dump_test
"attr-gnu-4-15"
492 run_dump_test
"attr-gnu-4-20"
493 run_dump_test
"attr-gnu-4-21"
494 run_dump_test
"attr-gnu-4-22"
495 run_dump_test
"attr-gnu-4-23"
496 run_dump_test
"attr-gnu-4-24"
497 run_dump_test
"attr-gnu-4-25"
498 run_dump_test
"attr-gnu-4-30"
499 run_dump_test
"attr-gnu-4-31"
500 run_dump_test
"attr-gnu-4-32"
501 run_dump_test
"attr-gnu-4-33"
502 run_dump_test
"attr-gnu-4-34"
503 run_dump_test
"attr-gnu-4-35"
504 run_dump_test
"attr-gnu-4-40"
505 run_dump_test
"attr-gnu-4-41"
506 run_dump_test
"attr-gnu-4-42"
507 run_dump_test
"attr-gnu-4-43"
508 run_dump_test
"attr-gnu-4-44"
509 run_dump_test
"attr-gnu-4-45"
510 run_dump_test
"attr-gnu-4-51"
514 {"GOT and versioning 1"
515 "-shared -melf32btsmip --version-script got-vers-1.ver"
516 "-EB -mips2 -32" {got-vers-1a.s got-vers-1b.s}
517 {{readelf
-d got
-vers
-1.dd
}
518 {readelf
--symbols got
-vers
-1.sd
}
519 {readelf
--relocs got
-vers
-1.rd
}}