]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gas/testsuite/gas/all/gas.exp
bab5a6c7ba51f15b2e24ad2f52cd7edcc4e0f951
[thirdparty/binutils-gdb.git] / gas / testsuite / gas / all / gas.exp
1 # Copyright (C) 2012-2023 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
16
17 #
18 # These tests should be valid on all targets.
19 #
20
21 # I think currently all targets fail this one when listings are enabled.
22 gas_test "p2425.s" "" "" "pcrel values in assignment"
23
24 # p1480.s uses a ".space" directive which for most assemblers means
25 # "allocate some space". On the PA it means "switch into this space".
26 #
27 # Therefore this test (as it is currently written) is completely bogus
28 # for any PA target. Do not bother trying to run it and just claim
29 # it fails.
30 #
31 # The C54x uses ".space" to allocate bits, and requires absolute expressions;
32 # The ".space" directive is taken care of in the C54x-specific tests, so fail
33 # here
34 #
35 # The test also doesn't work on mep targets, since they use RELC, and it
36 # will avoid simplifying the expression since it conservatively assumes
37 # ugly expressions can be saved until link-time.
38 if { [istarget hppa*-*-*] || [istarget *c54x*-*-*] || [istarget mep*-*-*]} then {
39 setup_xfail *-*-*
40 fail "simplifiable double subtraction"
41 } else {
42 gas_test "p1480.s" "" "-a>" "simplifiable double subtraction"
43 }
44
45 # No floating point support in assembly code for CRIS and Z80.
46 if { ![istarget cris-*-*] && ![istarget crisv32-*-*]
47 && ![istarget z80-*-*] } then {
48 if { [istarget tic4x-*-*] } then {
49 set as_opt ""
50 } else {
51 set as_opt "--defsym hasnan=1"
52 }
53 gas_test "float.s" $as_opt "" "simple FP constants"
54 }
55
56 # This test is meaningless for the PA; the difference of two undefined
57 # symbols is something that is (and must be) supported on the PA.
58 # The same is true for ALPHA-VMS.
59 #
60 # The AVR, MICROBLAZE, MN10300, RL78 and RX ports all support link time
61 # relaxation, which in turn allows for link time resolution of the
62 # differences of two previously undefined symbols. Hence this test will
63 # not pass for these targets.
64 if { ![istarget alpha*-*-*vms*]
65 && ![istarget am3*-*-*]
66 && ![istarget avr-*-*]
67 && ![istarget ft32-*-*]
68 && ![istarget hppa*-*-*]
69 && ![istarget microblaze-*-*]
70 && ![istarget loongarch*-*-*]
71 && ![istarget mn10300-*-*]
72 && ![istarget msp430*-*-*]
73 && ![istarget powerpc*-*-aix*]
74 && ![istarget riscv*-*-*]
75 && ![istarget rl78-*-*]
76 && ![istarget rs6000*-*-aix*]
77 && ![istarget rx-*-*] } then {
78 gas_test_error "diff1.s" "" "difference of two undefined symbols"
79 }
80
81 gas_test_error "equiv1.s" "" ".equiv for symbol already set to another one"
82 gas_test_error "equiv2.s" "" ".equiv for symbol already set to an expression"
83
84 # The inode comparison used to detect identical input and output files
85 # doesn't work on non-Posix hosts.
86 if { ![ishost "*-*-mingw*"] } then {
87 gas_test_error "none.s" "-o $srcdir/$subdir/none.s" "Output file must be distinct from input"
88 }
89
90 # .equ works differently on some targets.
91 switch -glob $target_triplet {
92 hppa*-*-* { }
93 *c54x*-*-* { }
94 default {
95 gas_test "equ-ok.s" "" "" ".equ for symbol already set"
96 gas_test_error "equ-bad.s" "" ".equ for symbol already set through .eqv"
97 }
98 }
99
100 gas_test "eqv-ok.s" "" "" ".eqv support"
101 gas_test_error "eqv-bad.s" "" ".eqv for symbol already set"
102 if { [istarget "pdp11-*-*"] } then {
103 run_dump_test eqv-dot-pdp11
104 } else {
105 run_dump_test eqv-dot
106 }
107
108 if { ![istarget "bfin-*-*"] && ![istarget "bpf-*-*"] } then {
109 gas_test "assign-ok.s" "" "" "== assignment support"
110 }
111 gas_test_error "assign-bad.s" "" "== assignment for symbol already set"
112 run_dump_test assign-bad-recursive
113 run_dump_test local-label-overflow
114
115 run_dump_test simple-forward
116 run_dump_test forward
117
118 # aout relocs are often weird, so is mep. don't bother testing
119 # som doesn't use a .text section
120 # mmix doesn't like .L1:
121 # ti addresses aren't octets.
122 if { ![is_aout_format] } {
123 switch -glob $target_triplet {
124 hppa*64*-*-* {
125 run_dump_test fwdexp
126 }
127 alpha-*-*linux*ecoff { }
128 alpha-*-osf* { }
129 hppa*-*-hpux* { }
130 mep-*-* { }
131 mmix-*-* { }
132 nds32*-*-* { }
133 tic30*-*-* { }
134 tic4x*-*-* { }
135 tic54x*-*-* { }
136 default {
137 run_dump_test fwdexp
138 }
139 }
140 }
141
142 # .set works differently on some targets.
143 # most of the tests won't work on targets that set linkrelax.
144 # 4 octet bytes confuse address matching on ti targets.
145 # pdp11 gets unexpected reloc types.
146 switch -glob $target_triplet {
147 alpha*-*-* { }
148 am3*-*-* { }
149 cr16*-*-* { }
150 crx*-*-* { }
151 h8300-*-* { }
152 mips*-*-* { }
153 mn10200-*-* { }
154 mn10300-*-* { }
155 msp430*-*-* { }
156 nds32*-*-* { }
157 pdp11-*-* { }
158 tic30*-*-* { }
159 tic4x*-*-* { }
160 tic54x*-*-* { }
161 xtensa*-*-* { }
162 z80-*-* { }
163 default {
164 run_dump_test redef
165 # These targets fail redef2 because they disallow redefined
166 # symbols on relocs.
167 setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
168 setup_xfail "loongarch*-*-*" "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
169 setup_xfail "avr-*-*"
170 run_dump_test redef2
171 setup_xfail "m68hc1*-*-*" "m6811-*-*" "m6812-*-*" "rl78-*-*"
172 setup_xfail "loongarch*-*-*" "riscv*-*-*" "rx-*-*" "vax*-*-*" "xgate*-*-*" "z8k-*-*"
173 setup_xfail "avr-*-*"
174 # rs6000-aix disallows redefinition via .comm.
175 if [is_xcoff_format] {
176 setup_xfail *-*-*
177 }
178 # These targets fail redef3 because section contents for the
179 # word referencing the .comm sym is not zero and/or its reloc
180 # has a non-zero addend. Relaxing the test would hide real
181 # failures.
182 setup_xfail "bfin-*-*" "i\[3-7\]86-*-*coff" \
183 "i\[3-7\]86-*-*pe" "i\[3-7\]86-*-go32*" \
184 "i\[3-7\]86-*-cygwin*" "i\[3-7\]86-*-mingw*" \
185 "x86_64-*-cygwin*" "x86_64-*-mingw*"
186 run_dump_test redef3
187 gas_test_error "redef4.s" "" ".set for symbol already used as label"
188 gas_test_error "redef5.s" "" ".set for symbol already defined through .comm"
189 }
190 }
191
192 proc do_comment {} {
193 set testname "comment.s: comments in listings"
194 set x1 0
195 set x2 0
196 set x3 0
197 set white {[ \t]*}
198 gas_start "comment.s" "-al"
199 while 1 {
200 # Apparently CRLF is received when using ptys for subprocesses; hence the
201 # \r\n for line 3.
202 expect {
203 -re "^ +1\[ \t\]+# This\[^\n\]*\n" { set x1 1 }
204 -re "^ +2\[ \t\]+# correctly\[^\n\]*\n" { set x2 1 }
205 -re "^ +3\[ \t\]+/. C comments too. ./\r?\r?\n" { set x3 1 }
206 -re "\[^\n\]*\n" { }
207 timeout { perror "timeout\n"; break }
208 eof { break }
209 }
210 }
211 gas_finish
212 if [all_ones $x1 $x2 $x3] then { pass $testname } else { fail $testname }
213 }
214
215 do_comment
216
217 # This test checks the output of the -ag switch. It must detect at least
218 # the name of the input file, output file, and options passed.
219 proc general_info_section {} {
220 set testname "general info section in listings"
221 set x1 0
222 set x2 0
223 set x3 0
224 set white {[ \t]*}
225 gas_start "comment.s" "-agn"
226 while 1 {
227 expect {
228 -re "^ \[^\n\]*\t: .*\-agn\[^\n\]*\n" { set x1 1 }
229 -re "^ \[^\n\]*\t: \[^\n\]*comment\.s\[^\n\]*\n" { set x2 1 }
230 -re "^ \[^\n\]*\t: a\.out\[^\n\]*\n" { set x3 1 }
231 -re "\[^\n\]*\n" { }
232 timeout { perror "timeout\n"; break }
233 eof { break }
234 }
235 }
236 gas_finish
237 if [all_ones $x1 $x2 $x3] then { pass $testname } else { fail $testname }
238 }
239
240 general_info_section
241
242 #
243 # Test x930509a -- correct assembly of differences involving forward
244 # references.
245 #
246
247 proc do_930509a {} {
248 set testname "difference between forward references"
249 set x 0
250 gas_start "x930509.s" "-al"
251 while 1 {
252 # We need to accommodate both byte orders here.
253 # If ".long" means an 8-byte value on some target someday, this test will have
254 # to be fixed.
255 expect {
256 -re "^ +1 .... 00 ?00 ?00 ?00" { fail $testname; set x 1 }
257 -re "^ +1 .... 04 ?00 ?00 ?00" { pass $testname; set x 1 }
258 -re "^ +1 .... 00 ?00 ?00 ?04" { pass $testname; set x 1 }
259 -re "\[^\n\]*\n" { }
260 timeout { perror "timeout\n"; break }
261 eof { break }
262 }
263 }
264 gas_finish
265 if !$x then { fail $testname }
266 }
267
268 # This test is meaningless for the PA and CR16/CRX: the difference of two
269 # symbols cannot be resolved by the assembler.
270 # C54x assembler (for compatibility) does not allow differences between
271 # forward references.
272 # C30 counts a four byte offset as a difference of one.
273 if { ![istarget *c30*-*-*]
274 && ![istarget *c4x*-*-*]
275 && ![istarget *c54x*-*-*]
276 && ![istarget cr16*-*-*]
277 && ![istarget crx*-*-*]
278 && ![istarget ft32-*-*]
279 && ![istarget h8300*-*-*]
280 && ![istarget hppa*-*-*] } then {
281 # msp430, mn10[23]00 and riscv emit two relocs to handle the difference of two symbols.
282 setup_xfail "am3*-*-*" "loongarch*-*-*" "mn10200-*-*" "mn10300*-*-*" "msp430*-*-*" "riscv*-*-*"
283 do_930509a
284 }
285
286 # ".struct" and ".align" have different meanings on c54x
287 # These directives are done in the c54x-specific tests instead
288 switch -glob $target_triplet {
289 hppa*-*-* { }
290 *c4x*-*-* { }
291 *c54x*-*-* { }
292 default {
293 run_dump_test struct
294 run_dump_test align
295 run_dump_test align2
296 }
297 }
298
299 # '<' and '>' appear to have special meanings on the excluded targets
300 switch -glob $target_triplet {
301 frv-*-* { }
302 hppa*-*-* { }
303 m32r-*-* { }
304 mmix-*-* { }
305 *c4x*-*-* { }
306 *c54x*-*-* { }
307 bfin-*-* { }
308 default {
309 run_dump_test altmacro
310 # The second test is valid only when '!' is not a comment
311 # character (it is allowed to be a line comment character).
312 if [string match "" [lindex [gas_run excl.s "-o /dev/null" ""] 0]] {
313 run_dump_test altmac2
314 # Similarly this test does not work when ! is a line separator.
315 run_dump_test eval
316 }
317 }
318 }
319
320 # This test is for any COFF target.
321 # We omit the ARM toolchains because they define locals to
322 # start with '.', which eliminates .eos, .text etc from the output.
323 # Omit c54x, since .tag and .def mean something different on that target
324 if { ([istarget *-*-coff*] && ![istarget *c4x*-*-coff] && ![istarget *c54x*-*-coff]) \
325 ||([istarget *-*-pe*] && ![istarget arm*-*-pe*]) \
326 || [istarget i*86-*-aix*] \
327 || [istarget i*86-*-go32*] \
328 || [istarget i*86-*-cygwin*] \
329 || [istarget x86_64-*-mingw*] \
330 || [istarget i*86-*-*nt] \
331 || [istarget i*86-*-interix*] } {
332 run_dump_test cofftag
333 }
334
335 # Test omitting conditionals from listings.
336 proc test_cond {} {
337 global comp_output
338 global srcdir
339 global subdir
340
341 set testname "conditional listings"
342 if { [istarget "pdp11-*-*"] } then {
343 set listing "cond-pdp11.l"
344 } else {
345 set listing "cond.l"
346 }
347 gas_run cond.s "-alc" ">dump.out"
348 if ![string match "" $comp_output] {
349 send_log "$comp_output\n"
350 fail $testname
351 } else {
352 if { [regexp_diff dump.out $srcdir/$subdir/$listing] } {
353 fail $testname
354 } else {
355 pass $testname
356 }
357 }
358 }
359
360 # This test is not suitable for the PA for various reasons
361 # not limited to the fact that it depends on specific section
362 # names appearing in the output file.
363 # Again, p2align doesn't work on c54x and related targets.
364 switch -glob $target_triplet {
365 alpha-*-linux*ecoff { }
366 alpha-*-osf* { }
367 hppa*-*-* { }
368 *c4x*-*-* { }
369 *c54x*-*-* { }
370 rl78-*-* { }
371 rx-*-* { }
372 default {
373 test_cond
374 remote_download host "$srcdir/$subdir/incbin.dat"
375 run_dump_test incbin
376 }
377 }
378
379 # Various targets use too custom handling to be able to sensibly create
380 # common expecations for this test. Also .equ works differently on some
381 # targets.
382 if { ![istarget avr-*-*]
383 && ![istarget bfin-*-*]
384 && ![istarget cris*-*-*]
385 && ![istarget dlx-*-*]
386 && ![istarget hppa*-*-*]
387 && ![istarget m68k-*-*]
388 && ![istarget nios2-*-*]
389 && ![istarget pj-*-*]
390 && ![istarget sh*-*-*]
391 && ![istarget *c4x-*-*]
392 && ![istarget *c54x-*-*]
393 && ![istarget *c6x-*-*]
394 && ![istarget z80-*-*] } then {
395 # Some further targets' custom handling fails to recognize the overflows.
396 setup_xfail "crx-*-*" "h8300-*-*" "mcore-*-*" "mn10200-*-*" "mn10300-*-*" "msp430-*-*" "ns32k-*-*"
397 run_list_test "overflow"
398 }
399
400 if { ([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-openbsd*"]) \
401 || [istarget "i*86-*-cygwin*"] \
402 || [istarget "i*86-*-mingw32*"] } {
403 gas_test "fastcall.s" "" "" "fastcall labels"
404 }
405
406 if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] \
407 && ![istarget "bpf-*-*"] } then {
408 run_dump_test assign
409 }
410 run_dump_test sleb128
411 run_dump_test sleb128-2
412 run_dump_test sleb128-3
413 run_dump_test sleb128-4
414 run_dump_test sleb128-5
415 # .byte is not 8 bits on either tic4x or tic54x
416 if { ![istarget "tic4x*-*-*"] && ![istarget "tic54x*-*-*"] } {
417 run_dump_test sleb128-7
418 run_dump_test sleb128-8
419 }
420 run_dump_test sleb128-9
421
422 # .byte is 32 bits on tic4x, and .p2align isn't supported on tic54x
423 # .space is different on hppa*-hpux.
424 # MeP put bytes into packets.
425 if { ![istarget "tic4x*-*-*"] && ![istarget "tic54x*-*-*"] && ![istarget "hppa*-*-hpux*"] && ![istarget "mep*-*-*"] } {
426 run_dump_test relax
427 }
428
429 run_dump_test quad
430
431 # ~ isn't an operator on PDP-11
432 if { ![istarget "pdp11-*-*"] } {
433 run_dump_test quad2
434 }
435
436 # poor little PDP-11 can't handle 16-byte values
437 if { ![istarget "pdp11-*-*"] } {
438 run_dump_test octa
439 }
440
441 # .set works differently on some targets.
442 switch -glob $target_triplet {
443 alpha*-*-* { }
444 mips*-*-* { }
445 *c54x*-*-* { }
446 z80-*-* { }
447 default {
448 run_dump_test weakref1
449 run_dump_test weakref1g
450 run_dump_test weakref1l
451 run_dump_test weakref1u
452 run_dump_test weakref1w
453 }
454 }
455 gas_test_error "weakref2.s" "" "e: would close weakref loop: e => a => b => c => d => e"
456 gas_test_error "weakref3.s" "" "a: would close weakref loop: a => b => c => d => e => a"
457 gas_test_error "weakref4.s" "" "is already defined"
458
459 run_dump_test string
460 if [is_elf_format] {
461 run_dump_test none
462 }
463
464 run_dump_test quoted-sym-names
465
466 # Targets where # is not a line comment character don't transform
467 # "# <line> <file>" into .linefile (PR gas/29120).
468 setup_xfail "tic30-*-*"
469 run_list_test cond-2 "-al"
470 setup_xfail "tic30-*-*"
471 run_list_test linefile ""
472
473 run_list_test macro "-alm"
474
475 run_list_test pr20312
476
477 load_lib gas-dg.exp
478 dg-init
479 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/err-*.s $srcdir/$subdir/warn-*.s]] "" ""
480 dg-finish
481
482 # Set $nop_type appropriately to indicate the NOP instruction mnemonic.
483 # Note - this code is made obsolete by the new .nops pseudo-op.
484 switch -glob $target_triplet {
485 bpf-*-* {
486 set nop_type 6
487 }
488 mmix-*-* {
489 set nop_type 5
490 }
491 or1k*-*-* {
492 set nop_type 2
493 }
494 ia64-*-* {
495 set nop_type 1
496 }
497 default {
498 set nop_type 0
499 }
500 }
501 run_dump_test "org-1" [list [list as "--defsym nop_type=$nop_type"]]
502 run_dump_test "org-2"
503 run_dump_test "org-3"
504 run_dump_test "org-4"
505 run_dump_test "org-5"
506 run_dump_test "org-6"
507
508 run_dump_test "fill-1"
509
510 gas_test "pr23938.s" "" "" ".xstabs"
511
512 run_dump_test "nop"
513 run_dump_test "asciz"
514 run_dump_test "pr27384"
515 run_dump_test "pr27381"
516 run_dump_test "multibyte1"
517 run_dump_test "multibyte2"