1 # This testcase is part of GDB
, the GNU debugger.
3 # Copyright
1998-2019 Free Software Foundation
, Inc.
5 # This
program is free software
; you can redistribute it and
/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation
; either version
3 of the License
, or
8 #
(at your option
) any later version.
10 # This
program is distributed in the hope that it will be useful
,
11 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License
for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this
program.
If not
, see
<http
://www.gnu.org
/licenses
/>.
18 # Test GDB
's ability to restore saved registers from stack frames
19 # when using the `return' command.
21 # This file was written by Jim Blandy
<jimb@cygnus.com
>, with
22 # fragments borrowed from
return.exp.
25 set executable $testfile
27 if { [prepare_for_testing
"failed to prepare" $executable $srcfile] } {
31 proc restore_tests
{ } {
34 if { ! [ runto driver
] } {
40 #
For each caller function
,
41 #
call each of the callee functions
,
42 # force a
return from the callee
, and
43 # make sure that the local variables still have the right
values.
45 for {set c
1} {$c
<= $
limit} {incr c
} {
47 #
Set a breakpoint at the next caller function.
48 gdb_test
"tbreak caller$c" "Temporary breakpoint.*\[0-9\]*\\." \
51 #
Continue to the next caller function.
52 gdb_test
"continue" " caller$c prologue .*" "run to caller$c"
54 #
Do each callee function.
55 for {set e
1} {$e
<= $
limit} {incr e
} {
57 gdb_test
"tbreak callee$e" "Temporary breakpoint.*\[0-9\]*\\." \
58 "caller$c calls callee$e; tbreak callee"
60 gdb_test
"continue" " callee$e prologue .*/" \
61 "caller$c calls callee$e; continue to callee"
63 #
Do a forced
return from the callee.
64 set test
"caller$c calls callee$e; return callee now"
69 "Make .* return now.*y or n. $" \
72 # Check that the
values of the local variables are what
74 for {set var
1} {$var
<= $c
} {incr var
} {
75 set expected
[expr
0x7eeb + $var
]
76 gdb_test
"print l$var" " = $expected" \
77 "caller$c calls callee$e; return restored l$var to $expected"
82 gdb_continue_to_end
"" continue 1
85 set prev_timeout $timeout
88 set timeout $prev_timeout
91 clean_restart $binfile
92 if { ![runto_main
] } {
95 gdb_test
"restore non-existent-file binary" \
96 "Failed to open non-existent-file: .*"