summaryrefslogtreecommitdiff
path: root/gas/testsuite/gas/all/gas.exp
blob: 9544551d60a657fa5dc1cfadb8f839a36a9972a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#
# These tests should be valid on all targets.
#

# I think currently all targets fail this one when listings are enabled.
gas_test "p2425.s" ""   "" "pcrel values in assignment"

# p1480.s uses a ".space" directive which for most assemblers means
# "allocate some space".  On the PA it means "switch into this space".
#
# Therefore this test (as it is currently written) is completely bogus
# for any PA target.  Do not bother trying to run it and just claim
# it fails.
if [istarget hppa*-*-*] then {
    setup_xfail *-*-*
    fail "simplifiable double subtraction"
} else {
    gas_test "p1480.s" "" "-a>" "simplifiable double subtraction"
}

gas_test "float.s" ""   "" "simple FP constants"

# This test is meaningless for the PA; the difference of two undefined
# symbols is something that is (and must be) supported on the PA.
if ![istarget hppa*-*-*] then {
    gas_test_error "diff1.s" "" "difference of two undefined symbols"
}

proc do_comment {} {
    set testname "comment.s: comments in listings"
    set x1 0
    set x2 0
    set x3 0
    set white {[ \t]*}
    gas_start "comment.s" "-al"
    while 1 {
# Apparently CRLF is received when using ptys for subprocesses; hence the
# \r\n for line 3.
	expect {
	    -re "^ +1\[ \t\]+# This\[^\n\]*\n"		{ set x1 1 }
	    -re "^ +2\[ \t\]+# correctly\[^\n\]*\n"	{ set x2 1 }
	    -re "^ +3\[ \t\]+/. C comments too. ./\r?\n" { set x3 1 }
	    -re "\[^\n\]*\n"				{ }
	    timeout				{ perror "timeout\n"; break }
	    eof					{ break }
	}
    }
    gas_finish
    if [all_ones $x1 $x2 $x3] then { pass $testname } else { fail $testname }
}

do_comment

#
# Test x930509a -- correct assembly of differences involving forward
# references.
#

proc do_930509a {} {
    set testname "difference between forward references"
    set x 0
    gas_start "x930509.s" "-al"
    while 1 {
# We need to accomodate both byte orders here.
# If ".long" means an 8-byte value on some target someday, this test will have
# to be fixed.
	expect {
	    -re "^ +1 .... 0000 *0000" { fail $testname; set x 1 }
	    -re "^ +1 .... 0400 *0000" { pass $testname; set x 1 }
	    -re "^ +1 .... 0000 *0004" { pass $testname; set x 1 }
	    -re "\[^\n\]*\n" { }
	    timeout { perror "timeout\n"; break }
	    eof { break }
	}
    }
    gas_finish
    if !$x then { fail $testname }
}

# This test is meaningless for the PA; the difference of two symbols
# must not be resolved by the assembler.
if ![istarget hppa*-*-*] then {
    # the vax fails because VMS can apparently actually handle this
    # case in relocs, so gas doesn't handle it itself.
    setup_xfail "vax*-*-vms*"
    setup_xfail "mn10300*-*-*"
    setup_xfail "mn10200*-*-*"
    do_930509a
}

case $target_triplet in {
    { hppa*-*-* } { }
    default {
	run_dump_test struct
	run_dump_test align
    }
}

# This test is for any COFF target.
# We omit m88k COFF because it uses weird pseudo-op names.
# We omit the ARM toolchains because they define locals to
#  start with '.', which eliminates .eos, .text etc from the output.
if {   ([istarget *-*-coff*] && ![istarget m88*-*-*] && ![istarget *arm*-*-coff] && ![istarget thumb*-*-coff]) \
     ||([istarget *-*-pe*] && ![istarget arm*-*-pe*] && ![istarget thumb*-*-pe*]) \
     || [istarget a29k-*-udi*] \
     || [istarget a29k-*-ebmon*] \
     || [istarget a29k-*-sym*] \
     || [istarget a29k-*-vxworks*] \
     || [istarget i*86-*-aix*] \
     || [istarget i*86-*-sco*] \
     || [istarget i*86-*-isc*] \
     || [istarget i*86-*-go32*] \
     || [istarget i*86-*-cygwin*] \
     || [istarget i*86-*-*nt] \
     || ([istarget i960-*-vxworks5.*] && ![istarget i960-*-vxworks5.0*]) } {
    run_dump_test cofftag
}

# Test omitting conditionals from listings.
proc test_cond {} {
    global comp_output
    global srcdir
    global subdir

    set testname "conditional listings"
    gas_run cond.s -alc ">dump.out"
    if ![string match "" $comp_output] {
	send_log "$comp_output\n"
	fail $testname
    } else {
	if { [regexp_diff dump.out $srcdir/$subdir/cond.d] } {
	    fail $testname
	} else {
	    pass $testname
	}
    }
}

test_cond

# FIXME: this is here cause of a bug in DejaGnu 1.1.1. When it is no longer
#        in use, then this can be removed.
if [info exists errorInfo] then {
    unset errorInfo
}