1# Expect script for MIPS ELF linker tests
2#   Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
3#
4# This file is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 2 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
17#
18
19if {[istarget "mips*-*-vxworks"]} {
20    set mipsvxtests {
21	{"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
22	 "-mips2" {vxworks1-lib.s}
23	 {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
24	  {readelf --symbols vxworks1-lib.nd}}
25	 "libvxworks1.so"}
26	{"VxWorks executable test 1 (dynamic)" \
27	 "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
28	 "-mips2" {vxworks1.s}
29	 {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
30	 "vxworks1"}
31	{"VxWorks executable test 2 (dynamic)" \
32	 "-Tvxworks1.ld -q --force-dynamic"
33	 "-mips2" {vxworks2.s}
34	 {{readelf --segments vxworks2.sd}}
35	 "vxworks2"}
36	{"VxWorks executable test 2 (static)"
37	 "-Tvxworks1.ld"
38	 "-mips2" {vxworks2.s}
39	 {{readelf --segments vxworks2-static.sd}}
40	 "vxworks2"}
41    }
42    run_ld_link_tests $mipsvxtests
43    run_dump_test "vxworks1-static"
44    return
45}
46
47if {![istarget mips*-*-*] || ![is_elf_format]} {
48    return
49}
50
51set has_newabi [expr [istarget *-*-irix6*] || [istarget mips64*-*-linux*]]
52set linux_gnu [expr [istarget mips*-*-linux*]]
53set embedded_elf [expr [istarget mips*-*-elf]]
54
55
56# Check MIPS16 markings being passed through link.
57run_dump_test "mips16-1"
58
59# MIPS branch offset final link checking.
60run_dump_test "branch-misc-1"
61
62# Test multi-got link.  We only do this on GNU/Linux because it requires
63# the "traditional" emulations.
64if { $linux_gnu } {
65    run_dump_test "multi-got-1"
66    run_dump_test "multi-got-no-shared"
67}
68
69if $has_newabi {
70    run_dump_test "elf-rel-got-n32"
71    run_dump_test "elf-rel-xgot-n32"
72    if { $linux_gnu } {
73	run_dump_test "elf-rel-got-n64-linux"
74	run_dump_test "elf-rel-xgot-n64-linux"
75    } else {
76	run_dump_test "elf-rel-got-n64"
77	run_dump_test "elf-rel-xgot-n64"
78    }
79
80    run_dump_test "relax-jalr-n32"
81    run_dump_test "relax-jalr-n32-shared"
82    run_dump_test "relax-jalr-n64"
83    run_dump_test "relax-jalr-n64-shared"
84}
85
86if { $linux_gnu } {
87    run_dump_test "rel32-o32"
88    run_dump_test "rel32-n32"
89    run_dump_test "rel64"
90}
91
92if { $embedded_elf } {
93    run_dump_test "region1"
94}
95
96if $embedded_elf {
97    # This could work on other targets too, but would need the appropriate
98    # ld -m switch.
99    run_dump_test "reloc-1-rel"
100}
101if $has_newabi {
102    run_dump_test "reloc-1-n32"
103    if $linux_gnu {
104	# Uses a linux-specific ld -m switch
105	run_dump_test "reloc-1-n64"
106    }
107}
108run_dump_test "reloc-2"
109run_dump_test "reloc-merge-lo16"
110if {$has_newabi && $linux_gnu} {
111    run_dump_test "eh-frame1-n32"
112    run_dump_test "eh-frame1-n64"
113    run_dump_test "eh-frame2-n32"
114    run_dump_test "eh-frame2-n64"
115}
116if {$embedded_elf} {
117    run_dump_test "eh-frame3"
118    run_dump_test "eh-frame4"
119}
120
121run_dump_test "jaloverflow"
122run_dump_test "jaloverflow-2"
123if {$has_newabi} {
124    run_dump_test "jalbal"
125}
126
127run_dump_test "mips16-hilo"
128if {$has_newabi} {
129    run_dump_test "mips16-hilo-n32"
130}
131
132if { $linux_gnu } {
133    run_dump_test "textrel-1"
134}
135
136if $has_newabi {
137    run_dump_test "emit-relocs-1"
138}
139
140if {[istarget mips*-*-linux*]} {
141     # The number of symbols that are always included in the symbol table
142     # for these tests.  The 5 are:
143     #
144     #     the null symbol entry
145     #     the .MIPS.stubs section symbol
146     #     the .text section symbol
147     #     _gp
148     #     _GLOBAL_OFFSET_TABLE_
149     set base_syms 5
150     foreach dynsym { 7fff 8000 fff0 10000 2fe80 } {
151	 run_ld_link_tests \
152	     [list [list \
153			"Stub for dynsym 0x$dynsym" \
154			"-shared -melf32btsmip -T stub-dynsym-1.ld" \
155			[concat \
156			     "-EB -march=mips1 -32 -KPIC" \
157			     "--defsym base_syms=$base_syms" \
158			     "--defsym dynsym=0x$dynsym"] \
159			[list "stub-dynsym-1.s"] \
160			[list [list \
161				   "objdump" "-dz" \
162				   "stub-dynsym-1-$dynsym.d"]] \
163			"stub-dynsym-1-$dynsym"]]
164     }
165 }
166
167# For tests which may involve multiple files, use run_ld_link_tests.
168
169# List contains test-items with 3 items followed by 2 lists:
170# 0:name 1:ld options 2:assembler options
171# 3:filenames of assembler files 4: action and options. 5: name of output file
172
173# Actions:
174# objdump: Apply objdump options on result.  Compare with regex (last arg).
175# nm: Apply nm options on result.  Compare with regex (last arg).
176# readelf: Apply readelf options on result.  Compare with regex (last arg).
177
178set mips_tls_tests {
179    {"Static executable with TLS" "-static -melf32btsmip -T mips-dyn.ld"
180     "-EB -march=mips1 -32 -KPIC" {tlsbin-o32.s}
181     {{objdump {-dr -m mips:isa32r2} tlsbin-o32.d} {objdump -srj.got tlsbin-o32.got}}
182     "tls-static-o32"}
183    {"Shared library with TLS" "-shared -melf32btsmip -T mips-lib.ld"
184     "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
185     {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32.got}}
186     "tlslib-o32.so"}
187    {"Dynamic executable with TLS"
188     "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32.so"
189     "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s}
190     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32.d} {objdump -Rsj.got tlsdyn-o32.got}}
191     "tls-dynamic-o32"}
192    {"Shared library with multiple GOTs and TLS"
193     "-shared -melf32btsmip -T mips-lib.ld"
194     "-EB -march=mips1 -32 -KPIC" {tls-multi-got-1-1.s tls-multi-got-1-2.s}
195     {{readelf {-d -r} tls-multi-got-1.r}
196      {objdump {-dr -m mips:isa32r2} tls-multi-got-1.d}
197      {objdump -Rsj.got tls-multi-got-1.got}}
198     "tlslib-multi.so"}
199    {"Shared library with TLS and versioning"
200     "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib.ver"
201     "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
202     {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-ver.got}}
203     "tlslib-o32-ver.so"}
204    {"Dynamic executable with TLS and versioning"
205     "-melf32btsmip -T mips-dyn.ld tmpdir/tlslib-o32-ver.so"
206     "-EB -march=mips1 -32 -KPIC" {tlsdyn-o32.s tlsdyn-o32-2.s}
207     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-1.d} {objdump -Rsj.got tlsdyn-o32-1.got}}
208     "tls-dynamic-o32-ver"}
209    {"Dynamic executable with TLS and versioning (order 2)"
210     "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32-2.o"
211     "-EB -march=mips1 -32 -KPIC" {}
212     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-2.d} {objdump -Rsj.got tlsdyn-o32-2.got}}
213     "tls-dynamic-o32-ver-2"}
214    {"Dynamic executable with TLS and versioning (order 3)"
215     "-melf32btsmip -T mips-dyn.ld tmpdir/tlsdyn-o32-2.o tmpdir/tlslib-o32-ver.so tmpdir/tlsdyn-o32.o"
216     "-EB -march=mips1 -32 -KPIC" {}
217     {{objdump {-dr -m mips:isa32r2} tlsdyn-o32-3.d} {objdump -Rsj.got tlsdyn-o32-3.got}}
218     "tls-dynamic-o32-ver-3"}
219    {"Shared library with TLS and hidden symbols"
220     "-shared -melf32btsmip -T mips-lib.ld --version-script tlslib-hidden.ver"
221     "-EB -march=mips1 -32 -KPIC" {tlslib-o32.s}
222     {{objdump {-dr -m mips:isa32r2} tlslib-o32.d} {objdump -Rsj.got tlslib-o32-hidden.got}}
223     "tlslib-o32-hidden.so"}
224    {"Shared library with TLS and hidden symbols (2)"
225     "-shared -melf32btsmip -T mips-lib.ld"
226     "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s}
227     {{objdump -drj.text tls-hidden2.d} {objdump -sj.got tls-hidden2-got.d}}
228     "tls-hidden2.so"}
229    {"Shared library with TLS and hidden symbols (3)"
230     "-shared -melf32btsmip -T tls-hidden3.ld"
231     "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s}
232     {{objdump -dj.text tls-hidden3.d} {objdump -sj.got tls-hidden3.got}
233      {readelf --relocs tls-hidden3.r}}
234     "tls-hidden3.so"}
235    {"Shared library with TLS and hidden symbols (4)"
236     "-shared -melf32btsmip -T tls-hidden3.ld"
237     "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s}
238     {{objdump -sj.got tls-hidden4.got} {readelf --relocs tls-hidden4.r}}
239     "tls-hidden4.so"}
240}
241
242if {[istarget mips*-*-linux*]} {
243    run_ld_link_tests $mips_tls_tests
244}
245
246