]>
Commit | Line | Data |
---|---|---|
e2882c85 | 1 | # Copyright 2014-2018 Free Software Foundation, Inc. |
bb2ec1b3 TT |
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, see <http://www.gnu.org/licenses/>. | |
15 | ||
16 | # Some coverage testing of DWARF operators for the compiler | |
17 | # integration. | |
18 | ||
19 | load_lib dwarf.exp | |
20 | ||
21 | # This test can only be run on targets which support DWARF-2 and use gas. | |
22 | if {![dwarf2_support]} { | |
23 | return 0 | |
24 | } | |
25 | ||
26 | standard_testfile .c gdbjit-ops.S | |
27 | ||
28 | # | |
29 | # A port of the pr10770.c test code to the DWARF assembler format. | |
30 | # | |
31 | ||
32 | set assert_tos_non0 { | |
33 | bra 3 | |
34 | skip -3 | |
35 | } | |
36 | ||
37 | set assert_tos_0 [subst { | |
38 | lit0 | |
39 | eq | |
40 | $assert_tos_non0 | |
41 | }] | |
42 | ||
43 | set program [subst { | |
44 | lit0 | |
45 | nop | |
46 | $assert_tos_0 | |
47 | lit1 | |
48 | const1u 1 | |
49 | eq | |
50 | $assert_tos_non0 | |
51 | lit16 | |
52 | const2u 16 | |
53 | eq | |
54 | $assert_tos_non0 | |
55 | lit31 | |
56 | const4u 31 | |
57 | ne | |
58 | $assert_tos_0 | |
59 | lit1 | |
60 | neg | |
61 | const1s -1 | |
62 | eq | |
63 | $assert_tos_non0 | |
64 | lit16 | |
65 | neg | |
66 | const2s -16 | |
67 | ne | |
68 | $assert_tos_0 | |
69 | lit31 | |
70 | const4s -31 | |
71 | neg | |
72 | ne | |
73 | $assert_tos_0 | |
74 | lit7 | |
75 | dup | |
76 | plus_uconst 2 | |
77 | lit9 | |
78 | eq | |
79 | $assert_tos_non0 | |
80 | lit7 | |
81 | eq | |
82 | $assert_tos_non0 | |
83 | lit20 | |
84 | lit1 | |
85 | drop | |
86 | lit20 | |
87 | eq | |
88 | $assert_tos_non0 | |
89 | lit17 | |
90 | lit19 | |
91 | over | |
92 | lit17 | |
93 | eq | |
94 | $assert_tos_non0 | |
95 | lit19 | |
96 | eq | |
97 | $assert_tos_non0 | |
98 | lit17 | |
99 | eq | |
100 | $assert_tos_non0 | |
101 | lit1 | |
102 | lit2 | |
103 | lit3 | |
104 | lit4 | |
105 | pick 2 | |
106 | lit2 | |
107 | eq | |
108 | $assert_tos_non0 | |
109 | lit4 | |
110 | eq | |
111 | $assert_tos_non0 | |
112 | lit3 | |
113 | eq | |
114 | $assert_tos_non0 | |
115 | pick 0 | |
116 | lit2 | |
117 | eq | |
118 | $assert_tos_non0 | |
119 | lit2 | |
120 | eq | |
121 | $assert_tos_non0 | |
122 | lit1 | |
123 | eq | |
124 | $assert_tos_non0 | |
125 | lit6 | |
126 | lit12 | |
127 | swap | |
128 | lit6 | |
129 | eq | |
130 | $assert_tos_non0 | |
131 | lit12 | |
132 | eq | |
133 | $assert_tos_non0 | |
134 | lit7 | |
135 | lit8 | |
136 | lit9 | |
137 | rot | |
138 | lit8 | |
139 | eq | |
140 | $assert_tos_non0 | |
141 | lit7 | |
142 | eq | |
143 | $assert_tos_non0 | |
144 | lit9 | |
145 | eq | |
146 | $assert_tos_non0 | |
147 | lit7 | |
148 | abs | |
149 | lit7 | |
150 | eq | |
151 | $assert_tos_non0 | |
152 | const1s -123 | |
153 | abs | |
154 | const1u 123 | |
155 | eq | |
156 | $assert_tos_non0 | |
157 | lit3 | |
158 | lit6 | |
159 | and | |
160 | lit2 | |
161 | eq | |
162 | $assert_tos_non0 | |
163 | lit3 | |
164 | lit6 | |
165 | or | |
166 | lit7 | |
167 | eq | |
168 | $assert_tos_non0 | |
169 | lit17 | |
170 | lit2 | |
171 | minus | |
172 | lit15 | |
173 | eq | |
174 | $assert_tos_non0 | |
175 | # Divide is signed truncating toward zero. | |
176 | const1s -6 | |
177 | const1s -2 | |
178 | div | |
179 | lit3 | |
180 | eq | |
181 | $assert_tos_non0 | |
182 | const1s -7 | |
183 | const1s 3 | |
184 | div | |
185 | const1s -2 | |
186 | eq | |
187 | $assert_tos_non0 | |
188 | # Modulo is unsigned. | |
189 | const1s -6 | |
190 | const1s -4 | |
191 | mod | |
192 | const1s -6 | |
193 | eq | |
194 | $assert_tos_non0 | |
195 | const1s -6 | |
196 | lit4 | |
197 | mod | |
198 | lit2 | |
199 | eq | |
200 | $assert_tos_non0 | |
201 | lit6 | |
202 | const1s -4 | |
203 | mod | |
204 | lit6 | |
205 | eq | |
206 | $assert_tos_non0 | |
207 | # Signed modulo can be implemented using 'over over div mul minus'. | |
208 | const1s -6 | |
209 | const1s -4 | |
210 | over | |
211 | over | |
212 | div | |
213 | mul | |
214 | minus | |
215 | const1s -2 | |
216 | eq | |
217 | $assert_tos_non0 | |
218 | const1s -7 | |
219 | lit3 | |
220 | over | |
221 | over | |
222 | div | |
223 | mul | |
224 | minus | |
225 | const1s -1 | |
226 | eq | |
227 | $assert_tos_non0 | |
228 | lit7 | |
229 | const1s -3 | |
230 | over | |
231 | over | |
232 | div | |
233 | mul | |
234 | minus | |
235 | lit1 | |
236 | eq | |
237 | $assert_tos_non0 | |
238 | lit16 | |
239 | lit31 | |
240 | plus_uconst 1 | |
241 | mul | |
242 | const2u 512 | |
243 | eq | |
244 | $assert_tos_non0 | |
245 | lit5 | |
246 | not | |
247 | lit31 | |
248 | and | |
249 | lit26 | |
250 | eq | |
251 | $assert_tos_non0 | |
252 | lit12 | |
253 | lit31 | |
254 | plus | |
255 | const1u 43 | |
256 | eq | |
257 | $assert_tos_non0 | |
258 | const1s -6 | |
259 | lit2 | |
260 | plus | |
261 | const1s -4 | |
262 | eq | |
263 | $assert_tos_non0 | |
264 | const1s -6 | |
265 | plus_uconst 3 | |
266 | const1s -3 | |
267 | eq | |
268 | $assert_tos_non0 | |
269 | lit16 | |
270 | lit4 | |
271 | shl | |
272 | const2u 256 | |
273 | eq | |
274 | $assert_tos_non0 | |
275 | lit16 | |
276 | lit3 | |
277 | shr | |
278 | lit2 | |
279 | eq | |
280 | $assert_tos_non0 | |
281 | const1s -16 | |
282 | lit3 | |
283 | shra | |
284 | const1s -2 | |
285 | eq | |
286 | $assert_tos_non0 | |
287 | lit3 | |
288 | lit6 | |
289 | xor | |
290 | lit5 | |
291 | eq | |
292 | $assert_tos_non0 | |
293 | lit3 | |
294 | lit6 | |
295 | le | |
296 | $assert_tos_non0 | |
297 | lit3 | |
298 | lit3 | |
299 | le | |
300 | $assert_tos_non0 | |
301 | lit6 | |
302 | lit3 | |
303 | le | |
304 | $assert_tos_0 | |
305 | lit3 | |
306 | lit6 | |
307 | lt | |
308 | $assert_tos_non0 | |
309 | lit3 | |
310 | lit3 | |
311 | lt | |
312 | $assert_tos_0 | |
313 | lit6 | |
314 | lit3 | |
315 | lt | |
316 | $assert_tos_0 | |
317 | lit3 | |
318 | lit6 | |
319 | ge | |
320 | $assert_tos_0 | |
321 | lit3 | |
322 | lit3 | |
323 | ge | |
324 | $assert_tos_non0 | |
325 | lit6 | |
326 | lit3 | |
327 | ge | |
328 | $assert_tos_non0 | |
329 | lit3 | |
330 | lit6 | |
331 | gt | |
332 | $assert_tos_0 | |
333 | lit3 | |
334 | lit3 | |
335 | gt | |
336 | $assert_tos_0 | |
337 | lit6 | |
338 | lit3 | |
339 | gt | |
340 | $assert_tos_non0 | |
341 | const1s -6 | |
342 | lit1 | |
343 | shr | |
344 | lit0 | |
345 | gt | |
346 | $assert_tos_non0 | |
347 | const1s -6 | |
348 | lit1 | |
349 | shra | |
350 | lit0 | |
351 | lt | |
352 | $assert_tos_non0 | |
353 | # Finally some result. | |
354 | addr ptr | |
355 | }] | |
356 | ||
357 | # Make some DWARF for the test. | |
358 | set asm_file [standard_output_file $srcfile2] | |
359 | Dwarf::assemble $asm_file { | |
360 | # Creating a CU with 4-byte addresses lets this test link on both | |
361 | # 32- and 64-bit machines. | |
362 | cu { addr_size 4 } { | |
363 | ||
364 | declare_labels int_label | |
365 | extern func_start func_end ptr | |
366 | ||
367 | compile_unit { | |
368 | {name file1.txt} | |
369 | {language @DW_LANG_C} | |
370 | {low_pc func_start addr} | |
371 | {high_pc func_end addr} | |
372 | } { | |
373 | global program | |
374 | ||
375 | int_label: base_type { | |
376 | {name int} | |
377 | {byte_size 4 sdata} | |
378 | {encoding @DW_ATE_signed} | |
379 | } | |
380 | ||
381 | subprogram { | |
382 | {external 1 flag} | |
383 | {name func} | |
384 | {low_pc func_start addr} | |
385 | {high_pc func_end addr} | |
386 | } { | |
387 | formal_parameter { | |
388 | {name param} | |
389 | {variable_parameter 1 flag} | |
390 | {type :$int_label} | |
391 | {location $program SPECIAL_expr} | |
392 | } | |
393 | ||
394 | formal_parameter { | |
395 | {name optimized_out} | |
396 | {variable_parameter 1 flag} | |
397 | {type :$int_label} | |
398 | } | |
399 | } | |
400 | } | |
401 | } | |
402 | } | |
403 | ||
5b362f04 | 404 | if { [prepare_for_testing "failed to prepare" ${testfile} \ |
bb2ec1b3 TT |
405 | [list $srcfile $asm_file] {nodebug}] } { |
406 | return -1 | |
407 | } | |
408 | ||
409 | if ![runto func] { | |
410 | return -1 | |
411 | } | |
412 | ||
413 | if {[skip_compile_feature_tests]} { | |
1bc1068a | 414 | untested "compile command not supported (could not find libcc1 shared library?)" |
bb2ec1b3 TT |
415 | return -1 |
416 | } | |
417 | ||
418 | # If we have a bug, this will hang. | |
3a9558c4 | 419 | gdb_test_no_output "compile code (void) param" |
bb2ec1b3 TT |
420 | |
421 | # We can't access optimized-out variables, but their presence should | |
422 | # not affect compilations that don't refer to them. | |
423 | gdb_test "compile code optimized_out" \ | |
424 | ".*optimized out.*Compilation failed." |