]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/testsuite/sim/cris/c/c.exp
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / cris / c / c.exp
CommitLineData
8acc9f48 1# Copyright (C) 2005-2013 Free Software Foundation, Inc.
5e1f6430
HPN
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
4744ac1b 5# the Free Software Foundation; either version 3 of the License, or
5e1f6430
HPN
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
4744ac1b 14# along with this program. If not, see <http://www.gnu.org/licenses/>.
5e1f6430
HPN
15
16# Miscellaneous CRIS simulator testcases testing syscall sequences.
17
18if ![istarget cris*-*-*] {
19 return
20}
21
22set CFLAGS_FOR_TARGET "-O2"
23if [istarget cris-*-*] {
24 set mach "crisv10"
25} {
26 set mach "crisv32"
27}
28
29# Using target_compile, since it is less noisy,
30if { [target_compile $srcdir/$subdir/hello.c compilercheck.x \
31 "executable" "" ] == "" } {
32 set has_cc 1
fe524faa
HPN
33
34 # Now check if we can link a program dynamically, and where
35 # libc.so is located. If it is, we provide a sym link to the
36 # directory (which must end in /lib) in [pwd], so /lib/ld.so.1 is
37 # found (which must reside along libc.so). We don't bother
38 # replacing the board ldflags like below as we don't care about
39 # detrimental effects on the executable from the specs and
40 # -static in the board ldflags, we just add -Bdynamic.
41 if [regexp "(.*/lib)/libc.so" \
42 [target_compile $srcdir/$subdir/hello.c compilercheck.x \
43 "executable" \
44 "ldflags=-print-file-name=libc.so -Wl,-Bdynamic"] \
45 xxx libcsodir] {
46 file delete lib
47 verbose -log "Creating link to $libcsodir in [pwd]"
48 file link lib $libcsodir
49 }
5e1f6430
HPN
50} {
51 verbose -log "Can't execute C compiler"
52 set has_cc 0
53}
54
55# Like istarget, except take a list of targets as a string.
56proc anytarget { targets } {
57 set targetlist [split $targets]
58 set argc [llength $targetlist]
59 for { set i 0 } { $i < $argc } { incr i } {
60 if [istarget [lindex $targetlist $i]] {
61 return 1
62 }
63 }
64 return 0
65}
66
67foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
fe524faa
HPN
68 set orig_ldflags ""
69
5e1f6430
HPN
70 if ![runtest_file_p $runtests $src] {
71 continue
72 }
73 set testname "[file tail $src]"
74
75 set opt_array [slurp_options $src]
76 if { $opt_array == -1 } {
77 unresolved $testname
78 return
79 }
80
81 # And again, to simplify specifying tests.
82 if ![runtest_file_p $runtests $src] {
83 continue
84 }
85
86 # Note absence of CC in results, but don't make a big fuss over it.
87 if { $has_cc == 0 } {
88 untested $testname
89 continue
90 }
91
92 # Clear default options
93 set opts(cc) ""
94 set opts(sim) ""
95 set opts(output) ""
96 set opts(progoptions) ""
97 set opts(timeout) ""
98 set opts(mach) ""
99 set opts(xerror) "no"
100 set opts(dest) "$testname.x"
101 set opts(simenv) ""
102 set opts(kfail) ""
103 set opts(xfail) ""
104 set opts(target) ""
105 set opts(notarget) ""
fe524faa 106 set opts(dynamic) ""
5e1f6430
HPN
107
108 # Clear any machine specific options specified in a previous test case
109 if [info exists opts(sim,$mach)] {
110 unset opts(sim,$mach)
111 }
112
113 foreach i $opt_array {
114 set opt_name [lindex $i 0]
115 set opt_machs [lindex $i 1]
116 set opt_val [lindex $i 2]
117 if ![info exists opts($opt_name)] {
118 perror "unknown option $opt_name in file $src"
119 unresolved $testname
120 return
121 }
122
123 # Replace specific substitutions:
124 # @exedir@ is where the test-program is located.
125 regsub -all "@exedir@" $opt_val "[pwd]" opt_val
126 # @srcdir@ is where the source of the test-program is located.
127 regsub -all "@srcdir@" $opt_val "$srcdir/$subdir" opt_val
128
129 # Multiple of these options concatenate, they don't override.
130 if { $opt_name == "output" || $opt_name == "progoptions" } {
131 set opt_val "$opts($opt_name)$opt_val"
132 }
133
134 # Similar with "xfail", "kfail", "target" and "notarget", but
135 # arguments are space-separated.
136 if { $opt_name == "xfail" || $opt_name == "kfail" \
137 || $opt_name == "target" || $opt_name == "notarget" } {
138 if { $opts($opt_name) != "" } {
139 set opt_val "$opts($opt_name) $opt_val"
140 }
141 }
142
fe524faa
HPN
143 if { $opt_name == "dynamic" \
144 && [info exists board_info([target_info name],ldflags)] } {
145 # Weed out -static from ldflags, but keep the original in
146 # $orig_ldflags.
147 set orig_ldflags $board_info([target_info name],ldflags)
148 set ldflags " $orig_ldflags "
149 regsub -all " -static " $ldflags " " ldflags
150 set board_info([target_info name],ldflags) $ldflags
151 }
152
5e1f6430
HPN
153 foreach m $opt_machs {
154 set opts($opt_name,$m) $opt_val
155 }
156 if { "$opt_machs" == "" } {
157 set opts($opt_name) $opt_val
158 }
159 }
160
161 if { $opts(output) == "" } {
162 if { "$opts(xerror)" == "no" } {
163 set opts(output) "pass\n"
164 } else {
165 set opts(output) "fail\n"
166 }
167 }
168
169 if { $opts(target) != "" && ![anytarget $opts(target)] } {
170 continue
171 }
172
173 if { $opts(notarget) != "" && [anytarget $opts(notarget)] } {
174 continue
175 }
176
177 # If no machine specific options, default to the general version.
178 if ![info exists opts(sim,$mach)] {
179 set opts(sim,$mach) $opts(sim)
180 }
181
182 # Change \n sequences to newline chars.
183 regsub -all "\\\\n" $opts(output) "\n" opts(output)
184
185 verbose -log "Compiling $src with $opts(cc)"
186
187 set dest "$opts(dest)"
188 if { [sim_compile $src $dest "executable" "$opts(cc)" ] != "" } {
189 unresolved $testname
190 continue
191 }
192
fe524faa
HPN
193 if { $orig_ldflags != "" } {
194 set board_info([target_info name],ldflags) $orig_ldflags
195 }
196
5e1f6430
HPN
197 verbose -log "Simulating $src with $opts(sim,$mach)"
198
199 # Time to setup xfailures and kfailures.
200 if { "$opts(xfail)" != "" } {
201 verbose -log "xfail: $opts(xfail)"
202 # Using eval to make $opts(xfail) appear as individual
203 # arguments.
204 eval setup_xfail $opts(xfail)
205 }
206 if { "$opts(kfail)" != "" } {
207 verbose -log "kfail: $opts(kfail)"
208 eval setup_kfail $opts(kfail)
209 }
210
211 set result [sim_run $dest "$opts(sim,$mach)" "$opts(progoptions)" \
212 "" "$opts(simenv)"]
213 set status [lindex $result 0]
214 set output [lindex $result 1]
215
216 if { "$status" == "pass" } {
217 if { "$opts(xerror)" == "no" } {
218 if [string match $opts(output) $output] {
219 pass "$mach $testname"
220 } else {
221 verbose -log "output: $output" 3
222 verbose -log "pattern: $opts(output)" 3
223 fail "$mach $testname (execution)"
224 }
225 } else {
226 verbose -log "`pass' return code when expecting failure" 3
227 fail "$mach $testname (execution)"
228 }
229 } elseif { "$status" == "fail" } {
230 if { "$opts(xerror)" == "no" } {
231 fail "$mach $testname (execution)"
232 } else {
233 if [string match $opts(output) $output] {
234 pass "$mach $testname"
235 } else {
236 verbose -log "output: $output" 3
237 verbose -log "pattern: $opts(output)" 3
238 fail "$mach $testname (execution)"
239 }
240 }
241 } else {
242 $status "$mach $testname"
243 }
244}