import gdb-1999-11-08 snapshot
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / funcargs.exp
CommitLineData
c906108c
SS
1# Copyright (C) 1992, 1994, 1995, 1997 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16
17# Please email any bugs, comments, and/or additions to this file to:
18# bug-gdb@prep.ai.mit.edu
19
20# This file was written by Fred Fish. (fnf@cygnus.com)
21
22if $tracelevel {
23 strace $tracelevel
24}
25
26set prms_id 0
27set bug_id 0
28
29set testfile "funcargs"
30set srcfile ${testfile}.c
31set binfile ${objdir}/${subdir}/${testfile}
32if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
33 gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
34}
35
36# Create and source the file that provides information about the compiler
37# used to compile the test case.
38if [get_compiler_info ${binfile}] {
39 return -1;
40}
41
42#
43# Locate actual args; integral types.
44#
45
46proc integral_args {} {
47 global gdb_prompt
48 global det_file
49 global gcc_compiled
50
51 delete_breakpoints
52
53 gdb_breakpoint call0a
54 gdb_breakpoint call0b
55 gdb_breakpoint call0c
56 gdb_breakpoint call0d
57 gdb_breakpoint call0e
58
59 # Run; should stop at call0a and print actual arguments.
60 # The a29k fails all of these tests, perhaps because the prologue
61 # code is broken.
62 setup_xfail "a29k-*-udi"
63 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
64 gdb_run_cmd
65 gdb_expect {
66 -re ".* call0a \\(c=97 'a', s=1, i=2, l=3\\) .*$gdb_prompt $" {
67 pass "run to call0a"
68 }
69 -re "$gdb_prompt $" { fail "run to call0a" ; gdb_suppress_tests }
70 timeout { fail "(timeout) run to call0a" ; gdb_suppress_tests }
71 }
72
73 # Print each arg as a double check to see if we can print
74 # them here as well as with backtrace.
75 gdb_test "print c" ".* = 97 'a'" "print c after run to call0a"
76 gdb_test "print s" ".* = 1" "print s after run to call0a"
77 gdb_test "print i" ".* = 2" "print i after run to call0a"
78 gdb_test "print l " ".* = 3" "print l after run to call0a"
79
80 # Continue; should stop at call0b and print actual arguments.
81 if [gdb_test "cont" ".* call0b \\(s=1, i=2, l=3, c=97 'a'\\) .*" "continue to call0b"] {
82 gdb_suppress_tests;
83 }
84
85 # Continue; should stop at call0c and print actual arguments.
86 if [gdb_test "cont" ".* call0c \\(i=2, l=3, c=97 'a', s=1\\) .*" "continue to call0c"] {
87 gdb_suppress_tests;
88 }
89
90 # Continue; should stop at call0d and print actual arguments.
91 if [gdb_test "cont" ".* call0d \\(l=3, c=97 'a', s=1, i=2\\) .*" "continue to call0d";] {
92 gdb_suppress_tests;
93 }
94
95 # Continue; should stop at call0e and print actual arguments.
96 if [gdb_test "cont" ".* call0e \\(c1=97 'a', l=3, c2=97 'a', i=2, c3=97 'a', s=1, c4=97 'a', c5=97 'a'\\) .*" "continue to call0e" ] {
97 gdb_suppress_tests;
98 }
99 gdb_stop_suppressing_tests;
100}
101
102#
103# Locate actual args; unsigned integral types.
104#
105
106proc unsigned_integral_args {} {
107 global gdb_prompt
108 global det_file
109 global gcc_compiled
110
111 delete_breakpoints
112
113 gdb_breakpoint call1a;
114 gdb_breakpoint call1b;
115 gdb_breakpoint call1c;
116 gdb_breakpoint call1d;
117 gdb_breakpoint call1e;
118
119 # Run; should stop at call1a and print actual arguments.
120 # The a29k fails all of these tests, perhaps because the prologue
121 # code is broken.
122 setup_xfail "a29k-*-udi"
123 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
124 gdb_run_cmd
125 gdb_expect {
126 -re ".* call1a \\(uc=98 'b', us=6, ui=7, ul=8\\) .*$gdb_prompt $" {
127 pass "run to call1a"
128 }
129 -re "$gdb_prompt $" { fail "run to call1a" ; gdb_suppress_tests; }
130 timeout { fail "(timeout) run to call1a" ; gdb_suppress_tests; }
131 }
132
133 # Print each arg as a double check to see if we can print
134 # them here as well as with backtrace.
135 gdb_test "print uc" ".* = 98 'b'"
136 gdb_test "print us" ".* = 6"
137 gdb_test "print ui" ".* = 7"
138 gdb_test "print ul" ".* = 8"
139
140 # Continue; should stop at call1b and print actual arguments.
141 if [gdb_test "cont" ".* call1b \\(us=6, ui=7, ul=8, uc=98 'b'\\) .*" "continue to call1b"] {
142 gdb_suppress_tests;
143 }
144
145 # Continue; should stop at call1c and print actual arguments.
146 if [gdb_test "cont" ".* call1c \\(ui=7, ul=8, uc=98 'b', us=6\\) .*" "continue to call1c"] {
147 gdb_suppress_tests;
148 }
149
150 # Continue; should stop at call1d and print actual arguments.
151 if [gdb_test "cont" ".* call1d \\(ul=8, uc=98 'b', us=6, ui=7\\) .*" "continue to call1d"] {
152 gdb_suppress_tests;
153 }
154
155 # Continue; should stop at call1e and print actual arguments.
156 if [gdb_test "cont" ".* call1e \\(uc1=98 'b', ul=8, uc2=98 'b', ui=7, uc3=98 'b', us=6, uc4=98 'b', uc5=98 'b'\\) .*" "continue to call1e"] {
157 gdb_suppress_tests;
158 }
159 gdb_stop_suppressing_tests;
160}
161
162#
163# Locate actual args; integrals mixed with floating point.
164#
165
166proc float_and_integral_args {} {
167 global gdb_prompt
168 global det_file
169 global gcc_compiled
085dd6e6 170 global hp_cc_compiler
c906108c
SS
171
172 delete_breakpoints
173
174 gdb_breakpoint call2a
175 gdb_breakpoint call2b
176 gdb_breakpoint call2c
177 gdb_breakpoint call2d
178 gdb_breakpoint call2e
179 gdb_breakpoint call2f
180 gdb_breakpoint call2g
181 gdb_breakpoint call2h
182
183 # Run; should stop at call2a and print actual arguments.
184
185 setup_xfail "i960-*-*" 1813
186 # The a29k fails all of these tests, perhaps because the prologue
187 # code is broken.
188 setup_xfail "a29k-*-udi"
189 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "mips-sgi-irix5*" }
085dd6e6
JM
190 # The debug info. for "f" is not correct. It's a known bug.
191 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
192 gdb_run_cmd
193 gdb_expect {
194 -re ".* call2a \\(c=97 'a', f1=4, s=1, d1=5, i=2, f2=4, l=3, d2=5\\) .*$gdb_prompt $" { pass "run to call2a" }
085dd6e6 195 -re ".* call2a \\(c=97 'a', f1=.*, s=1, d1=5, i=2, f2=4, l=3, d2=5\\) .*$gdb_prompt $" { xfail "run to call2a" }
c906108c
SS
196 -re "$gdb_prompt $" { fail "run to call2a" ; gdb_suppress_tests; }
197 timeout { fail "(timeout) run to call2a" ; gdb_suppress_tests; }
198 }
199
200 # Print each arg as a double check to see if we can print
201 gdb_test "print c" ".* = 97 'a'" "print c after run to call2a"
085dd6e6 202 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
203 gdb_test "print f1" ".* = 4" "print f1 after run to call2a"
204 gdb_test "print s" ".* = 1" "print s after run to call2a"
205 gdb_test "print d1" ".* = 5" "print d1 after run to call2a"
206 gdb_test "print i" ".* = 2" "print i after run to call2a"
085dd6e6 207 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
208 gdb_test "print f2" ".* = 4" "print f2 after run to call2a"
209 gdb_test "print l" ".* = 3" "print l after run to call2a"
210 gdb_test "print d2" ".* = 5" "print d2 after run to call2a"
211
212 setup_xfail "rs6000-*-*"
085dd6e6 213 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
214 if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
215 # Continue; should stop at call2b and print actual arguments.
216 if [gdb_test "cont" ".* call2b \\(f1=4, s=1, d1=5, i=2, f2=4, l=3, d2=5, c=97 'a'\\) .*" "continue to call2b"] {
217 gdb_suppress_tests;
218 }
219
085dd6e6 220 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
221 # Continue; should stop at call2c and print actual arguments.
222 if [gdb_test "cont" ".* call2c \\(s=1, d1=5, i=2, f2=4, l=3, d2=5, c=97 'a', f1=4\\) .*" "continue to call2c"] {
223 gdb_suppress_tests;
224 }
225
085dd6e6 226 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
227 # Continue; should stop at call2d and print actual arguments.
228 if [gdb_test "cont" ".* call2d \\(d1=5, i=2, f2=4, l=3, d2=5, c=97 'a', f1=4, s=1\\) .*" "continue to call2d"] {
229 gdb_suppress_tests;
230 }
231
085dd6e6 232 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
233 # Continue; should stop at call2e and print actual arguments.
234 if [gdb_test "cont" ".* call2e \\(i=2, f2=4, l=3, d2=5, c=97 'a', f1=4, s=1, d1=5\\) .*" "continue to call2e"] {
235 gdb_suppress_tests;
236 }
237
085dd6e6 238 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
239 # Continue; should stop at call2f and print actual arguments.
240 if [gdb_test "cont" ".* call2f \\(f2=4, l=3, d2=5, c=97 'a', f1=4, s=1, d1=5, i=2\\) .*" "continue to call2f"] {
241 gdb_suppress_tests;
242 }
243
085dd6e6 244 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
245 # Continue; should stop at call2g and print actual arguments.
246 if [gdb_test "cont" ".* call2g \\(l=3, d2=5, c=97 'a', f1=4, s=1, d1=5, i=2, f2=4\\) .*" "continue to call2g"] {
247 gdb_suppress_tests;
248 }
249
085dd6e6 250 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
251 # Continue; should stop at call2h and print actual arguments.
252 if [gdb_test "cont" ".* call2h \\(d2=5, c=97 'a', f1=4, s=1, d1=5, i=2, f2=4, l=3\\) .*" "continue to call2h"] {
253 gdb_suppress_tests;
254 }
255
256 # monitor only allows 8 breakpoints; w89k board allows 10, so
257 # break them up into two groups.
258 delete_breakpoints
259 gdb_breakpoint call2i
260
085dd6e6 261 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
c906108c
SS
262 # Continue; should stop at call2i and print actual arguments.
263 if [gdb_test "cont" ".* call2i \\(c1=97 'a', f1=4, c2=97 'a', c3=97 'a', d1=5, c4=97 'a', c5=97 'a', c6=97 'a', f2=4, s=1, c7=97 'a', d2=5\\) .*" "continue to call2i"] {
264 gdb_suppress_tests;
265 }
266 gdb_stop_suppressing_tests;
267}
268
269#
270# Locate actual args; dereference pointers to ints and floats.
271#
272
273proc pointer_args {} {
274 global gdb_prompt
275 global hex
276 global det_file
277
278 delete_breakpoints
279
280 gdb_breakpoint call3a
281 gdb_breakpoint call3b
282 gdb_breakpoint call3c
283
284 # Run; should stop at call3a and print actual arguments.
285 # Try dereferencing the arguments.
286
287 # The a29k fails all of these tests, perhaps because the prologue
288 # code is broken.
289 setup_xfail "a29k-*-udi"
290 gdb_run_cmd
291 gdb_expect {
292 -re ".* call3a \\(cp=$hex \"a\", sp=$hex, ip=$hex, lp=$hex\\) .*$gdb_prompt $" { pass "run to call3a" }
293 -re "$gdb_prompt $" { fail "run to call3a" ; gdb_suppress_tests; }
294 timeout { fail "(timeout) run to call3a" ; gdb_suppress_tests; }
295 }
296
297 gdb_test "print *cp" ".* = 97 'a'"
298 gdb_test "print *sp" ".* = 1"
299 gdb_test "print *ip" ".* = 2"
300 gdb_test "print *lp" ".* = 3"
301
302 # Continue; should stop at call3b and print actual arguments.
303 # Try dereferencing the arguments.
304 if [gdb_test "cont" ".* call3b \\(ucp=$hex \"b\", usp=$hex, uip=$hex, ulp=$hex\\) .*" "continue to call3b"] {
305 gdb_suppress_tests;
306 }
307
308 gdb_test "print *ucp" ".* = 98 'b'"
309 gdb_test "print *usp" ".* = 6"
310 gdb_test "print *uip" ".* = 7"
311 gdb_test "print *ulp" ".* = 8"
312
313 # Continue; should stop at call3c and print actual arguments.
314 # Try dereferencing the arguments.
315 if [gdb_test "cont" ".* call3c \\(fp=$hex, dp=$hex\\) .*" "continue to call3c"] {
316 gdb_suppress_tests;
317 }
318
319 gdb_test "print *fp" ".* = 4"
320 gdb_test "print *dp" ".* = 5"
321
322# pass "locate actual args, pointer types"
323 gdb_stop_suppressing_tests;
324}
325
326#
327# Locate actual args; structures and unions passed by reference.
328#
329
330proc structs_by_reference {} {
331 global gdb_prompt
332 global hex
333 global det_file
334 global target_sizeof_int
335 global target_sizeof_long
336 global target_bigendian_p
337
338 delete_breakpoints
339
340 gdb_breakpoint call4a
341 gdb_breakpoint call4b
342
343 # Run; should stop at call4a and print actual arguments.
344 # Try dereferencing the arguments.
345
346 # The a29k fails all of these tests, perhaps because the prologue
347 # code is broken.
348 setup_xfail "a29k-*-udi"
349 gdb_run_cmd
350 gdb_expect {
351 -re ".* call4a \\(stp=$hex\\) .*$gdb_prompt $" {
352 pass "run to call4a"
353 }
354 -re "$gdb_prompt $" { fail "run to call4a" ; gdb_suppress_tests; }
355 timeout { fail "(timeout) run to call4a" ; gdb_suppress_tests; }
356 }
357
358 gdb_test "print *stp" ".* = \{s1 = 101, s2 = 102\}"
359
360 # Continue; should stop at call4b and print actual arguments.
361
362 gdb_test "cont" ".* call4b \\(unp=$hex\\) .*" "continue to call4b"
363
364 # Try dereferencing the arguments.
365 if { $target_sizeof_long == $target_sizeof_int } {
366 gdb_test "print *unp" ".* = \{u1 = 1, u2 = 1\}" \
367 "print *unp (sizeof long == sizeof int)"
368 } elseif { ! $target_bigendian_p } {
369 gdb_test "print *unp" ".* = \{u1 = 1, u2 = 1\}" \
370 "print *unp (little-endian, sizeof long != sizeof int)"
371 } elseif { $target_sizeof_long == 8 && $target_sizeof_int == 4 } {
372 gdb_test "print *unp" ".* = \{u1 = 1, u2 = 4294967296\}" \
373 "print *unp (big-endian, sizeof long == 8, sizeof int = 4)"
374 } elseif { $target_sizeof_long == 4 && $target_sizeof_int == 2 } {
375 gdb_test "print *unp" ".* = \{u1 = 1, u2 = 65536\}" \
376 "print *unp (big-endian, sizeof long == 4, sizeof int = 2)"
377 } else {
378 fail "print *unp (unknown case)"
379 }
380
381 pass "locate actual args, structs/unions passed by reference"
382 gdb_stop_suppressing_tests;
383}
384
385#
386# Locate actual args; structures and unions passed by value.
387#
388
389proc structs_by_value {} {
390 global gdb_prompt
391 global hex
392 global det_file
393 global target_sizeof_int
394 global target_sizeof_long
395 global target_bigendian_p
396
397 delete_breakpoints
398
399 gdb_breakpoint call5a
400 gdb_breakpoint call5b
401
402 # Run; should stop at call5a and print actual arguments.
403 # Try dereferencing the arguments.
404
405 # The a29k fails all of these tests, perhaps because the prologue
406 # code is broken.
407 setup_xfail "a29k-*-udi"
408 gdb_run_cmd
409 gdb_expect {
410 -re ".* call5a \\(st=\{s1 = 101, s2 = 102\}\\) .*$gdb_prompt $" {
411 pass "run to call5a"
412 }
413 -re "$gdb_prompt $" { fail "run to call5a" ; gdb_suppress_tests; }
414 timeout { fail "(timeout) run to call5a" ; gdb_suppress_tests; }
415 }
416
417 gdb_test "print st" ".* = \{s1 = 101, s2 = 102\}"
418
419 # Continue; should stop at call5b and print actual arguments.
420 if { $target_sizeof_long == $target_sizeof_int } {
421 gdb_test "cont" ".* call5b \\(un=\{u1 = 2, u2 = 2\}\\) .*" \
422 "continue to call5b (sizeof long == sizeof int)"
423 } elseif { ! $target_bigendian_p } {
424 gdb_test "cont" ".* call5b \\(un=\{u1 = 2, u2 = 2\}\\) .*" \
425 "continue to call5b (little-endian, sizeof long != sizeof int)"
426 } elseif { $target_sizeof_long == 8 && $target_sizeof_int == 4 } {
427 gdb_test "cont" ".* call5b \\(un=\{u1 = 2, u2 = 8589934592\}\\) .*" \
428 "continue to call5b (big-endian, sizeof long == 8, sizeof int = 4)"
429 } elseif { $target_sizeof_long == 4 && $target_sizeof_int == 2 } {
430 gdb_test "cont" ".* call5b \\(un=\{u1 = 2, u2 = 131072\}\\) .*" \
431 "continue to call5b (big-endian, sizeof long == 4, sizeof int = 2)"
432 } else {
433 fail "continue to call5b (unknown case)"
434 }
435
436 # Try dereferencing the arguments.
437 if { $target_sizeof_long == $target_sizeof_int } {
438 gdb_test "print un" ".* = \{u1 = 2, u2 = 2\}" \
439 "print un (sizeof long == sizeof int)"
440 } elseif { ! $target_bigendian_p } {
441 gdb_test "print un" ".* = \{u1 = 2, u2 = 2\}" \
442 "print un (little-endian, sizeof long != sizeof int)"
443 } elseif { $target_sizeof_long == 8 && $target_sizeof_int == 4 } {
444 gdb_test "print un" ".* = \{u1 = 2, u2 = 8589934592\}" \
445 "print un (big-endian, sizeof long == 8, sizeof int = 4)"
446 } elseif { $target_sizeof_long == 4 && $target_sizeof_int == 2 } {
447 gdb_test "print un" ".* = \{u1 = 2, u2 = 131072\}" \
448 "print un (big-endian, sizeof long == 4, sizeof int = 2)"
449 } else {
450 fail "print un (unknown case)"
451 }
452
453 gdb_stop_suppressing_tests;
454}
455
456#
457# Locate actual args; discard, shuffle, and call
458#
459
460proc discard_and_shuffle {} {
461 global gdb_prompt
462 global hex
463 global decimal
464 global det_file
465 global gcc_compiled
085dd6e6 466 global hp_cc_compiler
c906108c
SS
467
468 delete_breakpoints
469
470 gdb_breakpoint call6a
471 gdb_breakpoint call6b
472 gdb_breakpoint call6c
473 gdb_breakpoint call6d
474 gdb_breakpoint call6e
475 gdb_breakpoint call6f
476 gdb_breakpoint call6g
477 gdb_breakpoint call6h
478
479 # Run; should stop at call6a and print actual arguments.
480 # Print backtrace.
481
482 # The a29k fails all of these tests, perhaps because the prologue
483 # code is broken.
484 setup_xfail "a29k-*-udi"
485 gdb_run_cmd
486 gdb_expect {
487 -re ".*Breakpoint $decimal, call6a .*$gdb_prompt $" { pass "run to call6a" }
488 -re "$gdb_prompt $" { fail "run to call6a" ; gdb_suppress_tests; }
489 timeout { fail "(timeout) run to call6a" ; gdb_suppress_tests; }
490 }
491
492 setup_xfail "rs6000-*-*"
493
494 if {!$gcc_compiled} {
495 setup_xfail "mips-sgi-irix5*"
496 }
497
085dd6e6
JM
498 # The debug info. for "f" is not correct. It's a known bug.
499 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
500 send_gdb "backtrace 100\n"
501 gdb_expect {
502 -re "backtrace 100\[\r\n\]+
503.* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\r
504.* main \\(.*\\) .*\r
505$gdb_prompt $" {
506 pass "backtrace from call6a"
507 }
508 -re "backtrace 100\[\r\n\]+
509.* call6a \\(c=97 'a', s=1, i=2, l=3, f=.*, d=5, uc=98 'b', us=6, ui=7, ul=8\\) .*\r
510.* main \\(.*\\) .*\r
511$gdb_prompt $" {
512 xfail "backtrace from call6a"
513 }
514 -re "$gdb_prompt $" {
515 fail "backtrace from call6a"
516 gdb_suppress_tests
517 }
518 timeout {
519 fail "(timeout) backtrace from call6a"
520 gdb_suppress_tests
521 }
c906108c
SS
522 }
523
524 # Continue; should stop at call6b and print actual arguments.
525 # Print backtrace.
526
527 gdb_continue call6b
528
085dd6e6 529 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
530 send_gdb "backtrace 100\n"
531 if [gdb_expect_list "backtrace from call6b" ".*$gdb_prompt $" {
532 ".*\[\r\n\]#0 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
533 ".*\[\r\n\]#1 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
534 ".*\[\r\n\]#2 .* main \\(.*\\) "
535 } ] {
c906108c
SS
536 gdb_suppress_tests;
537 }
538
539 # Continue; should stop at call6c and print actual arguments.
540 # Print backtrace.
541
542 gdb_continue call6c
543
085dd6e6 544 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
545 send_gdb "backtrace 100\n"
546 if [gdb_expect_list "backtrace from call6c" ".*$gdb_prompt $" {
547 ".*\[\r\n\]#0 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
548 ".*\[\r\n\]#1 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
549 ".*\[\r\n\]#2 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
550 ".*\[\r\n\]#3 .* main \\(.*\\) "
551 } ] {
c906108c
SS
552 gdb_suppress_tests;
553 }
554 # Continue; should stop at call6d and print actual arguments.
555 # Print backtrace.
556
557 gdb_continue call6d
558
085dd6e6 559 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
560 send_gdb "backtrace 100\n"
561 if [gdb_expect_list "backtrace from call6d" ".*$gdb_prompt $" {
562 ".*\[\r\n\]#0 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
563 ".*\[\r\n\]#1 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
564 ".*\[\r\n\]#2 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
565 ".*\[\r\n\]#3 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
566 ".*\[\r\n\]#4 .* main \\(.*\\) "
567 } ] {
c906108c
SS
568 gdb_suppress_tests;
569 }
570
571 # Continue; should stop at call6e and print actual arguments.
572 # Print backtrace.
573
574 gdb_continue call6e
575
085dd6e6 576 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
577 send_gdb "backtrace 100\n"
578 if [gdb_expect_list "backtrace from call6e" ".*$gdb_prompt $" {
579 ".*\[\r\n\]#0 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
580 ".*\[\r\n\]#1 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
581 ".*\[\r\n\]#2 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
582 ".*\[\r\n\]#3 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
583 ".*\[\r\n\]#4 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
584 ".*\[\r\n\]#5 .* main \\(.*\\) "
585 } ] {
c906108c
SS
586 gdb_suppress_tests;
587 }
588
589 # Continue; should stop at call6f and print actual arguments.
590 # Print backtrace.
591
592 gdb_continue call6f
593
085dd6e6 594 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
595 send_gdb "backtrace 100\n"
596 if [gdb_expect_list "backtrace from call6f" ".*$gdb_prompt $" {
597 ".*\[\r\n\]#0 .* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
598 ".*\[\r\n\]#1 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
599 ".*\[\r\n\]#2 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
600 ".*\[\r\n\]#3 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
601 ".*\[\r\n\]#4 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
602 ".*\[\r\n\]#5 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
603 ".*\[\r\n\]#6 .* main \\(.*\\) "
604 } ] {
c906108c
SS
605 gdb_suppress_tests;
606 }
607
608 # Continue; should stop at call6g and print actual arguments.
609 # Print backtrace.
610
611 gdb_continue call6g
612
085dd6e6 613 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
614 send_gdb "backtrace 100\n"
615 if [gdb_expect_list "backtrace from call6g" ".*$gdb_prompt $" {
616 ".*\[\r\n\]#0 .* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) "
617 ".*\[\r\n\]#1 .* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
618 ".*\[\r\n\]#2 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
619 ".*\[\r\n\]#3 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
620 ".*\[\r\n\]#4 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
621 ".*\[\r\n\]#5 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
622 ".*\[\r\n\]#6 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
623 ".*\[\r\n\]#7 .* main \\(.*\\) "
624 } ] {
c906108c
SS
625 gdb_suppress_tests;
626 }
627
628 # Continue; should stop at call6h and print actual arguments.
629 # Print backtrace.
630
631 gdb_continue call6h
632
085dd6e6 633 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
634 send_gdb "backtrace 100\n"
635 if [gdb_expect_list "backtrace from call6h" ".*$gdb_prompt $" {
636 ".*\[\r\n\]#0 .* call6h \\(us=6, ui=7, ul=8\\) "
637 ".*\[\r\n\]#1 .* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) "
638 ".*\[\r\n\]#2 .* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
639 ".*\[\r\n\]#3 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
640 ".*\[\r\n\]#4 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
641 ".*\[\r\n\]#5 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
642 ".*\[\r\n\]#6 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
643 ".*\[\r\n\]#7 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
644 ".*\[\r\n\]#8 .* main \\(.*\\) "
645 } ] {
c906108c
SS
646 gdb_suppress_tests;
647 }
648
649 # monitor only allows 8 breakpoints; w89k board allows 10, so
650 # break them up into two groups.
651 delete_breakpoints
652 gdb_breakpoint call6i
653 gdb_breakpoint call6j
654 gdb_breakpoint call6k
655
656 # Continue; should stop at call6i and print actual arguments.
657 # Print backtrace.
658
659 gdb_continue call6i
660
085dd6e6 661 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
662 send_gdb "backtrace 100\n"
663 if [gdb_expect_list "backtrace from call6i" ".*$gdb_prompt $" {
664 ".*\[\r\n\]#0 .* call6i \\(ui=7, ul=8\\) "
665 ".*\[\r\n\]#1 .* call6h \\(us=6, ui=7, ul=8\\) "
666 ".*\[\r\n\]#2 .* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) "
667 ".*\[\r\n\]#3 .* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
668 ".*\[\r\n\]#4 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
669 ".*\[\r\n\]#5 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
670 ".*\[\r\n\]#6 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
671 ".*\[\r\n\]#7 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
672 ".*\[\r\n\]#8 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
673 ".*\[\r\n\]#9 .* main \\(.*\\) "
674 } ] {
c906108c
SS
675 gdb_suppress_tests;
676 }
677
678 # Continue; should stop at call6j and print actual arguments.
679 # Print backtrace.
680
681 gdb_continue call6j
682
085dd6e6 683 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
684 send_gdb "backtrace 100\n"
685 if [gdb_expect_list "backtrace from call6j" ".*$gdb_prompt $" {
686 ".*\[\r\n\]#0 .* call6j \\(ul=8\\) "
687 ".*\[\r\n\]#1 .* call6i \\(ui=7, ul=8\\) "
688 ".*\[\r\n\]#2 .* call6h \\(us=6, ui=7, ul=8\\) "
689 ".*\[\r\n\]#3 .* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) "
690 ".*\[\r\n\]#4 .* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
691 ".*\[\r\n\]#5 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
692 ".*\[\r\n\]#6 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
693 ".*\[\r\n\]#7 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
694 ".*\[\r\n\]#8 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
695 ".*\[\r\n\]#9 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
696 ".*\[\r\n\]#10 .* main \\(.*\\) "
697 } ] {
c906108c
SS
698 gdb_suppress_tests;
699 }
700
701 # Continue; should stop at call6k and print actual arguments.
702 # Print backtrace.
703 # This fails on i960-*-vxworks because gdb gets confused by
704 # breakpoints on adjacent instructions.
705 setup_xfail "i960-*-vxworks" 1786
706 gdb_continue call6k
707
085dd6e6 708 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
11cf8741
JM
709 send_gdb "backtrace 100\n"
710 if [gdb_expect_list "backtrace from call6k" ".*$gdb_prompt $" {
711 ".*\[\r\n\]#0 .* call6k \\(\\) "
712 ".*\[\r\n\]#1 .* call6j \\(ul=8\\) "
713 ".*\[\r\n\]#2 .* call6i \\(ui=7, ul=8\\) "
714 ".*\[\r\n\]#3 .* call6h \\(us=6, ui=7, ul=8\\) "
715 ".*\[\r\n\]#4 .* call6g \\(uc=98 'b', us=6, ui=7, ul=8\\) "
716 ".*\[\r\n\]#5 .* call6f \\(d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
717 ".*\[\r\n\]#6 .* call6e \\(f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
718 ".*\[\r\n\]#7 .* call6d \\(l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
719 ".*\[\r\n\]#8 .* call6c \\(i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
720 ".*\[\r\n\]#9 .* call6b \\(s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
721 ".*\[\r\n\]#10 .* call6a \\(c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\\) "
722 ".*\[\r\n\]#11 .* main \\(.*\\) "
723 } ] {
c906108c
SS
724 gdb_suppress_tests;
725 }
726 gdb_stop_suppressing_tests;
727}
728
729
730#
731# Locate actual args; shuffle round robin and call
732#
733
734proc shuffle_round_robin {} {
735 global gdb_prompt
736 global hex
737 global decimal
738 global det_file
739 global gcc_compiled
085dd6e6 740 global hp_cc_compiler
c906108c
SS
741
742 delete_breakpoints
743
744 gdb_breakpoint call7a
745 gdb_breakpoint call7b
746 gdb_breakpoint call7c
747 gdb_breakpoint call7d
748 gdb_breakpoint call7e
749 gdb_breakpoint call7f
750 gdb_breakpoint call7g
751 gdb_breakpoint call7h
752
753 # Run; should stop at call7a and print actual arguments.
754 # Print backtrace.
755
756 # The a29k fails all of these tests, perhaps because the prologue
757 # code is broken.
758 setup_xfail "a29k-*-udi"
759 gdb_run_cmd
760 gdb_expect {
761 -re ".*Breakpoint $decimal, call7a .*$gdb_prompt $" {
762 pass "run to call7a"
763 }
764 -re "$gdb_prompt $" { fail "run to call7a" ; gdb_suppress_tests; }
765 timeout { fail "(timeout) run to call7a" ; gdb_suppress_tests; }
766 }
767
768 setup_xfail "i960-*-*" 1813
769 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "mips-sgi-irix5*" }
085dd6e6
JM
770 # The debug info. for "f" is not correct. It's a known bug.
771 if {$hp_cc_compiler} {setup_xfail hppa2.0w-*-*}
772 send_gdb "backtrace 100\n"
773 gdb_expect {
774 -re "backtrace 100\[\r\n\]+
775.* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\r
776.* main \\(.*\\) .*\r
777$gdb_prompt $" {
778 pass "backtrace from call7a"
779 }
780 -re "backtrace 100\[\r\n\]+
781.* call7a \\(c=97 'a', i=2, s=1, l=3, f=.*, uc=98 'b', d=5, us=6, ul=8, ui=7\\) .*\r
782.* main \\(.*\\) .*\r
783$gdb_prompt $" {
784 xfail "backtrace from call7a"
785 }
786 -re "$gdb_prompt $" { fail "backtrace from call7a" ; return }
787 timeout { fail "(timeout) backtrace from call7a" ; return }
788 }
c906108c
SS
789
790 # Continue; should stop at call7b and print actual arguments.
791 # Print backtrace.
792
793 gdb_continue call7b
794
795 if {$gcc_compiled} then { setup_xfail "rs6000-*-*" }
796
11cf8741
JM
797 send_gdb "backtrace 100\n"
798 gdb_expect_list "backtrace from call7b" ".*$gdb_prompt $" {
799 ".*\[\r\n\]#0 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
800 ".*\[\r\n\]#1 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
801 ".*\[\r\n\]#2 .* main \\(.*\\) "
802 }
c906108c
SS
803
804 # Continue; should stop at call7c and print actual arguments.
805 # Print backtrace.
806
807 gdb_continue call7c
808
11cf8741
JM
809 send_gdb "backtrace 100\n"
810 gdb_expect_list "backtrace from call7c" ".*$gdb_prompt $" {
811 ".*\[\r\n\]#0 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
812 ".*\[\r\n\]#1 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
813 ".*\[\r\n\]#2 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
814 ".*\[\r\n\]#3 .* main \\(.*\\) "
815 }
c906108c
SS
816
817 # Continue; should stop at call7d and print actual arguments.
818 # Print backtrace.
819
820 gdb_continue call7d
821
11cf8741
JM
822 send_gdb "backtrace 100\n"
823 gdb_expect_list "backtrace from call7d" ".*$gdb_prompt $" {
824 ".*\[\r\n\]#0 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
825 ".*\[\r\n\]#1 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
826 ".*\[\r\n\]#2 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
827 ".*\[\r\n\]#3 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
828 ".*\[\r\n\]#4 .* main \\(.*\\) "
829 }
c906108c
SS
830
831 gdb_continue call7e
832
11cf8741
JM
833 send_gdb "backtrace 100\n"
834 gdb_expect_list "backtrace from call7e" ".*$gdb_prompt $" {
835 ".*\[\r\n\]#0 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
836 ".*\[\r\n\]#1 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
837 ".*\[\r\n\]#2 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
838 ".*\[\r\n\]#3 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
839 ".*\[\r\n\]#4 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
840 ".*\[\r\n\]#5 .* main \\(.*\\) "
841 }
c906108c
SS
842
843 # Continue; should stop at call7f and print actual arguments.
844 # Print backtrace.
845
846 gdb_continue call7f
847
11cf8741
JM
848 send_gdb "backtrace 100\n"
849 gdb_expect_list "backtrace from call7f" ".*$gdb_prompt $" {
850 ".*\[\r\n\]#0 .* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) "
851 ".*\[\r\n\]#1 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
852 ".*\[\r\n\]#2 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
853 ".*\[\r\n\]#3 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
854 ".*\[\r\n\]#4 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
855 ".*\[\r\n\]#5 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
856 ".*\[\r\n\]#6 .* main \\(.*\\) "
857 }
c906108c
SS
858
859 # Continue; should stop at call7g and print actual arguments.
860 # Print backtrace.
861
862 gdb_continue call7g
863
11cf8741
JM
864 send_gdb "backtrace 100\n"
865 gdb_expect_list "backtrace from call7g" ".*$gdb_prompt $" {
866 ".*\[\r\n\]#0 .* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) "
867 ".*\[\r\n\]#1 .* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) "
868 ".*\[\r\n\]#2 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
869 ".*\[\r\n\]#3 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
870 ".*\[\r\n\]#4 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
871 ".*\[\r\n\]#5 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
872 ".*\[\r\n\]#6 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
873 ".*\[\r\n\]#7 .* main \\(.*\\) "
874 }
c906108c
SS
875
876 gdb_continue call7h
877
11cf8741
JM
878 send_gdb "backtrace 100\n"
879 gdb_expect_list "backtrace from call7h" ".*$gdb_prompt $" {
880 ".*\[\r\n\]#0 .* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) "
881 ".*\[\r\n\]#1 .* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) "
882 ".*\[\r\n\]#2 .* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) "
883 ".*\[\r\n\]#3 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
884 ".*\[\r\n\]#4 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
885 ".*\[\r\n\]#5 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
886 ".*\[\r\n\]#6 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
887 ".*\[\r\n\]#7 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
888 ".*\[\r\n\]#8 .* main \\(.*\\) "
889 }
c906108c
SS
890
891 # monitor only allows 8 breakpoints; w89k board allows 10, so
892 # break them up into two groups.
893 delete_breakpoints
894 gdb_breakpoint call7i
895 gdb_breakpoint call7j
896 gdb_breakpoint call7k
897
898 # Continue; should stop at call7i and print actual arguments.
899 # Print backtrace.
900
901 gdb_continue call7i
902
11cf8741
JM
903 send_gdb "backtrace 100\n"
904 gdb_expect_list "backtrace from call7i" ".*$gdb_prompt $" {
905 ".*\[\r\n\]#0 .* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\) "
906 ".*\[\r\n\]#1 .* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) "
907 ".*\[\r\n\]#2 .* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) "
908 ".*\[\r\n\]#3 .* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) "
909 ".*\[\r\n\]#4 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
910 ".*\[\r\n\]#5 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
911 ".*\[\r\n\]#6 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
912 ".*\[\r\n\]#7 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
913 ".*\[\r\n\]#8 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
914 ".*\[\r\n\]#9 .* main \\(.*\\) "
915 }
c906108c
SS
916
917 # Continue; should stop at call7j and print actual arguments.
918 # Print backtrace.
919
920 gdb_continue call7j
921
11cf8741
JM
922 send_gdb "backtrace 100\n"
923 gdb_expect_list "backtrace from call7j" ".*$gdb_prompt $" {
924 ".*\[\r\n\]#0 .* call7j \\(ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\\) "
925 ".*\[\r\n\]#1 .* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\) "
926 ".*\[\r\n\]#2 .* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) "
927 ".*\[\r\n\]#3 .* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) "
928 ".*\[\r\n\]#4 .* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) "
929 ".*\[\r\n\]#5 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
930 ".*\[\r\n\]#6 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
931 ".*\[\r\n\]#7 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
932 ".*\[\r\n\]#8 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
933 ".*\[\r\n\]#9 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
934 ".*\[\r\n\]#10 .* main \\(.*\\) "
935 }
c906108c
SS
936
937 # Continue; should stop at call7k and print actual arguments.
938 # Print backtrace.
939
940 gdb_continue call7k
941
942 if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
11cf8741
JM
943 send_gdb "backtrace 100\n"
944 gdb_expect_list "backtrace from call7k" ".*$gdb_prompt $" {
945 ".*\[\r\n\]#0 .* call7k \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
946 ".*\[\r\n\]#1 .* call7j \\(ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\\) "
947 ".*\[\r\n\]#2 .* call7i \\(ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\\) "
948 ".*\[\r\n\]#3 .* call7h \\(us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\\) "
949 ".*\[\r\n\]#4 .* call7g \\(d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\\) "
950 ".*\[\r\n\]#5 .* call7f \\(uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\\) "
951 ".*\[\r\n\]#6 .* call7e \\(f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\\) "
952 ".*\[\r\n\]#7 .* call7d \\(l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\\) "
953 ".*\[\r\n\]#8 .* call7c \\(s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\\) "
954 ".*\[\r\n\]#9 .* call7b \\(i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\\) "
955 ".*\[\r\n\]#10 .* call7a \\(c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\\) "
956 ".*\[\r\n\]#11 .* main \\(.*\\) "
957 }
c906108c
SS
958 gdb_stop_suppressing_tests;
959}
960
961#
962# Locate actual args; recursive passing of structs by value
963#
964
965proc recursive_structs_by_value {} {
966 global gdb_prompt
967 global hex
968 global decimal
969 global det_file
970
971 delete_breakpoints
972
973 gdb_breakpoint hitbottom
974
975 # Run; should stop at hitbottom and print actual arguments.
976 # Print backtrace.
977 gdb_run_cmd
978 gdb_expect {
979 -re ".*Breakpoint $decimal, hitbottom .*$gdb_prompt $" { pass "run to hitbottom" }
980 -re "$gdb_prompt $" { fail "run to hitbottom" ; gdb_suppress_tests; }
981 timeout { fail "(timeout) run to hitbottom" ; gdb_suppress_tests; }
982 }
983
984 if ![istarget sparclet-*-*] {
985 # The a29k fails all of these tests, perhaps because the prologue
986 # code is broken.
987 setup_xfail "a29k-*-udi"
11cf8741
JM
988 send_gdb "backtrace 100\n"
989 gdb_expect_list "recursive passing of structs by value" ".*$gdb_prompt $" {
990 ".*\[\r\n\]#0 .* hitbottom \\(\\) "
991 ".*\[\r\n\]#1 .* recurse \\(a=\{s = 0, i = 0, l = 0\}, depth=0\\) "
992 ".*\[\r\n\]#2 .* recurse \\(a=\{s = 1, i = 1, l = 1\}, depth=1\\) "
993 ".*\[\r\n\]#3 .* recurse \\(a=\{s = 2, i = 2, l = 2\}, depth=2\\) "
994 ".*\[\r\n\]#4 .* recurse \\(a=\{s = 3, i = 3, l = 3\}, depth=3\\) "
995 ".*\[\r\n\]#5 .* recurse \\(a=\{s = 4, i = 4, l = 4\}, depth=4\\) "
996 ".*\[\r\n\]#6 .* test_struct_args \\(\\) "
997 ".*\[\r\n\]#7 .* main \\(.*\\) "
998 }
c906108c
SS
999 } else {
1000 fail "recursive passing of structs by value (sparclet)"
1001 }
1002 gdb_stop_suppressing_tests;
1003}
1004
1005proc funcargs_reload { } {
1006 global objdir
1007 global subdir
1008 global binfile
1009 global srcdir
1010
1011 if [istarget "mips-idt-*"] {
1012 # Restart because IDT/SIM runs out of file descriptors.
1013 gdb_exit
1014 gdb_start
1015 gdb_reinitialize_dir $srcdir/$subdir
1016 gdb_load ${binfile}
1017 }
1018}
1019
1020#
1021# Test for accessing local stack variables in functions which call alloca
1022#
1023proc localvars_after_alloca { } {
1024 global gdb_prompt
1025 global hex
1026 global decimal
1027 global gcc_compiled
1028
1029 if { ! [ runto localvars_after_alloca ] } then { gdb_suppress_tests; }
1030
1031 # Print each arg as a double check to see if we can print
1032 # them here as well as with backtrace.
1033
1034 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1035 gdb_test "print c" " = 97 'a'" "print c after runto localvars_after_alloca"
1036 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1037 gdb_test "print s" " = 1" "print s after runto localvars_after_alloca"
1038 gdb_test "print i" " = 2" "print i after runto localvars_after_alloca"
1039 gdb_test "print l" " = 3" "print l after runto localvars_after_alloca"
1040
1041 # Lame regexp.
1042 gdb_test "next" ".*" "next in localvars_after_alloca()"
1043
1044 # Print each arg as a double check to see if we can print
1045 # them here as well as with backtrace.
1046
1047 gdb_test "print c" " = 97 'a'" "print c in localvars_after_alloca"
1048 gdb_test "print s" " = 1" "print s in localvars_after_alloca"
1049 gdb_test "print i" " = 2" "print i in localvars_after_alloca"
1050 gdb_test "print l" " = 3" "print l in localvars_after_alloca"
1051
1052 gdb_test "backtrace 8" "#0.*localvars_after_alloca \\(c=97 'a', s=1, i=2, l=3\\).*#1.*main.*" "backtrace after alloca"
1053 gdb_stop_suppressing_tests;
1054}
1055
1056proc call_after_alloca { } {
1057 global gdb_prompt
1058 global hex
1059 global decimal
1060 global gcc_compiled
1061
1062 if { ! [ runto call_after_alloca_subr ] } then { gdb_suppress_tests; }
1063
1064 # Print each arg as a double check to see if we can print
1065 # them here as well as with backtrace.
1066
1067 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1068 gdb_test "print c" " = 97 'a'" "print c in call_after_alloca"
1069 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1070 gdb_test "print s" " = 1" "print s in call_after_alloca"
1071 gdb_test "print i" " = 2" "print i in call_after_alloca"
1072 gdb_test "print l" " = 3" "print l in call_after_alloca"
1073
1074 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1075 gdb_test "backtrace 8" "#0.*call_after_alloca_subr \\(c=97 'a', s=1, i=2, l=3, uc=98 'b', us=11, ui=12, ul=13\\).*#1.*call_after_alloca \\(c=97 'a', s=1, i=2, l=3\\).*#2.*main.*" "backtrace from call_after_alloca_subr"
1076 gdb_stop_suppressing_tests;
1077}
1078
1079#
1080# Test for accessing local stack variables, backtraces, finish,
1081# and finally stepping into indirect calls. The point is that on the PA
1082# these use a funky `dyncall' mechanism which GDB needs to know about.
1083#
1084proc localvars_in_indirect_call { } {
1085 global gdb_prompt
1086 global hex
1087 global decimal
1088 global gcc_compiled
1089
1090 # Can not use "runto call0a" as call0a is called several times
1091 # during single run. Instead stop in a marker function and
1092 # take control from there.
1093 if { ! [ runto marker_indirect_call ] } then { gdb_suppress_tests; }
1094
1095 # break on the next call to call0a, then delete all the breakpoints
1096 # and start testing.
1097 gdb_breakpoint call0a
1098 gdb_continue call0a
1099 delete_breakpoints
1100
1101 # Print each arg as a double check to see if we can print
1102 # them here as well as with backtrace.
1103
1104 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1105 gdb_test "print c" " = 97 'a'" "print c in localvars_in_indirect_call"
1106 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1107 gdb_test "print s" " = 1" "print s in localvars_in_indirect_call"
1108 gdb_test "print i" " = 2" "print i in localvars_in_indirect_call"
1109 gdb_test "print l" " = 3" "print l in localvars_in_indirect_call"
1110
1111 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1112 gdb_test "backtrace 8" \
1113 "#0.*call0a \\(c=97 'a', s=1, i=2, l=3\\).*#1.*main.*" \
1114 "backtrace in indirectly called function"
1115
1116 #
1117 # "finish" brings us back to main. We then will try to step through
1118 # the second indirect call.
1119 # On some targets (e.g. m68k) gdb will stop from the finish in midline
1120 # of the first indirect call. This is due to stack adjustment instructions
1121 # after the indirect call. In these cases we will step till we hit the
1122 # second indirect call.
1123 #
1124
1125 send_gdb "finish\n"
1126 gdb_expect {
1127 -re "\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*First.*$gdb_prompt $" {
085dd6e6
JM
1128#On hppa2.0w-hp-hpux11.00, gdb finishes at one line earlier than
1129#hppa1.1-hp-hpux11.00. Therefore, an extra "step" is necessary to continue the test.
c906108c
SS
1130 send_gdb "step\n"
1131 exp_continue
1132 }
085dd6e6 1133 -re ".*\\(\\*pointer_to_call0a\\) \\(c, s, i, l\\);.*Second.*$gdb_prompt $" {
c906108c
SS
1134 pass "finish from indirectly called function"
1135 }
1136 -re ".*$gdb_prompt $" {
1137 fail "finish from indirectly called function"
1138 gdb_suppress_tests;
1139 }
1140 default { fail "finish from indirectly called function" ; gdb_suppress_tests; }
1141 }
1142
1143 if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" }
1144 gdb_test "step" "call0a \\(c=97 'a', s=1, i=2, l=3\\).*" \
1145 "stepping into indirectly called function"
1146 gdb_stop_suppressing_tests;
1147}
1148
1149#
1150# Test for stepping into indirect calls which may have trampolines (possibly
1151# cascaded) on both the call path and the gdb_suppress_tests; path.
1152# to handle trampolines.
1153#
1154proc test_stepping_over_trampolines { } {
1155 global gdb_prompt
1156 global hex
1157 global decimal
1158
1159 # Stop in a marker function and take control from there.
1160 if { ! [ runto marker_call_with_trampolines ] } then { gdb_suppress_tests; }
1161
1162 # Cater for gdb stopping in midline, see comment for finish above.
1163 send_gdb "finish\n"
1164 gdb_expect {
1165 -re "marker_call_with_trampolines ..;.*$gdb_prompt $" {
1166 send_gdb "step\n"
1167 exp_continue
1168 }
1169 -re "pointer_to_call_with_trampolines.*$gdb_prompt $" {
1170 pass "finish from marker_call_with_trampolines"
1171 }
1172 -re ".*$gdb_prompt $" {
1173 fail "finish from marker_call_with_trampolines"
1174 }
1175 default { fail "finish from marker_call_with_trampolines" ; gdb_suppress_tests; }
1176 }
1177
1178 # Try to step into the target function.
1179 gdb_test "step" "call_with_trampolines \\(d1=5\\).*" \
1180 "stepping into function called with trampolines"
1181
1182 # Make we can backtrace and the argument looks correct. */
1183 gdb_test "backtrace 8" "#0.*call_with_trampolines \\(d1=5\\).*1.*main.*" \
1184 "backtrace through call with trampolines"
1185
1186 # Make sure we can get back to main.
1187 # Stepping back to main might stop again after the gdb_suppress_tests; statement
1188 # or immediately transfer control back to main if optimizations
1189 # are performed.
1190 send_gdb "step\n"
1191 gdb_expect {
1192 -re "main .* at.*$gdb_prompt $" {
085dd6e6
JM
1193 pass "stepping back to main from function called with trampolines" ;
1194 gdb_suppress_tests
c906108c
SS
1195 }
1196 -re "\}.*End of call_with_trampolines.*$gdb_prompt $" {
1197 send_gdb "step\n"
1198 exp_continue
1199 }
1200 -re ".*$gdb_prompt $" {
1201 fail "stepping back to main from function called with trampolines"
1202 }
1203 default { fail "stepping back to main from function called with trampolines" ; gdb_suppress_tests; }
1204 }
1205 gdb_stop_suppressing_tests;
1206}
1207
1208# Start with a fresh gdb.
1209
1210gdb_exit
1211gdb_start
1212gdb_reinitialize_dir $srcdir/$subdir
1213gdb_load ${binfile}
1214
1215if [istarget "mips*tx39-*"] {
1216 set timeout 300
1217} elseif [istarget "hppa*-hp-hpux*"] then {
1218 set timeout 240
1219} else {
1220 set timeout 60
1221}
1222
1223# Determine expected output for unsigned long variables,
1224# the output varies with sizeof (unsigned long).
1225
1226set target_sizeof_long 4
1227send_gdb "print sizeof (long)\n"
1228gdb_expect {
1229 -re ".\[0-9\]* = 4.*$gdb_prompt $" { }
1230 -re ".\[0-9\]* = 8.*$gdb_prompt $" { set target_sizeof_long 8 }
1231 -re ".*$gdb_prompt $" {
1232 fail "getting sizeof long"
1233 }
1234 default { fail "(timeout) getting sizeof long" }
1235}
1236
1237set target_sizeof_int 4
1238send_gdb "print sizeof (int)\n"
1239gdb_expect {
1240 -re ".\[0-9\]* = 2.*$gdb_prompt $" { set target_sizeof_int 2 }
1241 -re ".\[0-9\]* = 4.*$gdb_prompt $" { }
1242 -re ".\[0-9\]* = 8.*$gdb_prompt $" { set target_sizeof_int 8 }
1243 -re ".*$gdb_prompt $" {
1244 fail "getting sizeof unsigned long"
1245 }
1246 default { fail "(timeout) getting sizeof int" }
1247}
1248
1249set target_bigendian_p 1
1250send_gdb "show endian\n"
1251gdb_expect {
1252 -re ".*little endian.*$gdb_prompt $" { set target_bigendian_p 0 }
1253 -re ".*big endian.*$gdb_prompt $" { }
1254 -re ".*$gdb_prompt $" {
1255 fail "getting target endian"
1256 }
1257 default { fail "(timeout) getting target endian" }
1258}
1259
1260# Perform tests
1261
1262integral_args
1263funcargs_reload
1264unsigned_integral_args
1265funcargs_reload
9e086581
JM
1266if {![target_info exists gdb,skip_float_tests]} {
1267 float_and_integral_args
1268}
c906108c
SS
1269funcargs_reload
1270pointer_args
1271funcargs_reload
1272structs_by_reference
1273funcargs_reload
1274structs_by_value
1275funcargs_reload
1276discard_and_shuffle
1277funcargs_reload
1278shuffle_round_robin
1279funcargs_reload
1280recursive_structs_by_value
1281funcargs_reload
1282localvars_after_alloca
1283funcargs_reload
1284call_after_alloca
1285funcargs_reload
1286localvars_in_indirect_call
1287funcargs_reload
1288test_stepping_over_trampolines
This page took 0.097216 seconds and 4 git commands to generate.