finish-reverse.exp revision 1.5
1# Copyright 2008-2015 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 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# This file is part of the GDB testsuite. It tests 'finish' with 17# reverse debugging. 18 19if ![supports_reverse] { 20 return 21} 22 23standard_testfile 24 25if { [prepare_for_testing $testfile.exp "$testfile" $srcfile] } { 26 return -1 27} 28 29runto main 30 31if [supports_process_record] { 32 # Activate process record/replay 33 gdb_test_no_output "record" "Turn on process record" 34} 35 36# Test finish from void func 37 38set breakloc [gdb_get_line_number "VOID FUNC" "$srcfile"] 39gdb_test "break void_func" \ 40 "Breakpoint $decimal at .*$srcfile, line $breakloc\." \ 41 "set breakpoint on void_func" 42gdb_continue_to_breakpoint "void_func" ".*$srcfile:$breakloc.*" 43 44set test_msg "finish from void_func" 45gdb_test_multiple "finish" "$test_msg" { 46 -re " call to void_func .*$gdb_prompt $" { 47 send_gdb "step\n" 48 exp_continue 49 } 50 -re " void_checkpoint .*$gdb_prompt $" { 51 pass "$test_msg" 52 } 53} 54 55# Test finish from char func 56 57set breakloc [gdb_get_line_number "CHAR FUNC" "$srcfile"] 58gdb_test "break char_func" \ 59 "Breakpoint $decimal at .*$srcfile, line $breakloc\." \ 60 "set breakpoint on char_func" 61gdb_continue_to_breakpoint "char_func" ".*$srcfile:$breakloc.*" 62 63set test_msg "finish from char_func" 64gdb_test_multiple "finish" "$test_msg" { 65 -re " void_checkpoint .*$gdb_prompt $" { 66 send_gdb "step\n" 67 exp_continue 68 } 69 -re " char_checkpoint .*$gdb_prompt $" { 70 pass "$test_msg" 71 } 72} 73 74# Test finish from short func 75 76set breakloc [gdb_get_line_number "SHORT FUNC" "$srcfile"] 77gdb_test "break short_func" \ 78 "Breakpoint $decimal at .* line $breakloc\." \ 79 "set breakpoint on short_func" 80gdb_continue_to_breakpoint "short_func" ".*$srcfile:$breakloc.*" 81 82set test_msg "finish from short_func" 83gdb_test_multiple "finish" "$test_msg" { 84 -re " char_checkpoint .*$gdb_prompt $" { 85 send_gdb "step\n" 86 exp_continue 87 } 88 -re " short_checkpoint .*$gdb_prompt $" { 89 pass "$test_msg" 90 } 91} 92 93# Test finish from int func 94 95set breakloc [gdb_get_line_number "INT FUNC" "$srcfile"] 96gdb_test "break int_func" \ 97 "Breakpoint $decimal at .* line $breakloc\." \ 98 "set breakpoint on int_func" 99gdb_continue_to_breakpoint "int_func" ".*$srcfile:$breakloc.*" 100 101set test_msg "finish from int_func" 102gdb_test_multiple "finish" "$test_msg" { 103 -re " short_checkpoint .*$gdb_prompt $" { 104 send_gdb "step\n" 105 exp_continue 106 } 107 -re " int_checkpoint .*$gdb_prompt $" { 108 pass "$test_msg" 109 } 110} 111 112# Test finish from long func 113 114set breakloc [gdb_get_line_number "LONG FUNC" "$srcfile"] 115gdb_test "break long_func" \ 116 "Breakpoint $decimal at .* line $breakloc\." \ 117 "set breakpoint on long_func" 118gdb_continue_to_breakpoint "long_func" ".*$srcfile:$breakloc.*" 119 120set test_msg "finish from long_func" 121gdb_test_multiple "finish" "$test_msg" { 122 -re " int_checkpoint .*$gdb_prompt $" { 123 send_gdb "step\n" 124 exp_continue 125 } 126 -re " long_checkpoint .*$gdb_prompt $" { 127 pass "$test_msg" 128 } 129} 130 131# Test finish from long long func 132 133set breakloc [gdb_get_line_number "LONG LONG FUNC" "$srcfile"] 134gdb_test "break long_long_func" \ 135 "Breakpoint $decimal at .* line $breakloc\." \ 136 "set breakpoint on long_long_func" 137gdb_continue_to_breakpoint "long_long_func" ".*$srcfile:$breakloc.*" 138 139set test_msg "finish from long_long_func" 140gdb_test_multiple "finish" "$test_msg" { 141 -re " long_checkpoint .*$gdb_prompt $" { 142 send_gdb "step\n" 143 exp_continue 144 } 145 -re " long_long_checkpoint .*$gdb_prompt $" { 146 pass "$test_msg" 147 } 148} 149 150 151### 152### 153### 154 155# Now switch to reverse 156gdb_test_no_output "set exec-dir reverse" "set reverse execution" 157 158# Test reverse finish from long long func 159 160set breakloc [gdb_get_line_number "LONG LONG FUNC" "$srcfile"] 161gdb_continue_to_breakpoint "long_long_func" ".*$srcfile:$breakloc.*" 162 163set test_msg "reverse finish from long_long_func" 164gdb_test_multiple "finish" "$test_msg" { 165 -re ".* long_checkpoint.*$gdb_prompt $" { 166 pass "$test_msg" 167 } 168} 169 170# Test reverse finish from long func 171 172set breakloc [gdb_get_line_number "LONG FUNC" "$srcfile"] 173gdb_continue_to_breakpoint "long_func" ".*$srcfile:$breakloc.*" 174 175set test_msg "reverse finish from long_func" 176gdb_test_multiple "finish" "$test_msg" { 177 -re ".* int_checkpoint.*$gdb_prompt $" { 178 pass "$test_msg" 179 } 180} 181 182# Test reverse finish from int func 183 184set breakloc [gdb_get_line_number "INT FUNC" "$srcfile"] 185gdb_continue_to_breakpoint "int_func" ".*$srcfile:$breakloc.*" 186 187set test_msg "reverse finish from int_func" 188gdb_test_multiple "finish" "$test_msg" { 189 -re ".* short_checkpoint.*$gdb_prompt $" { 190 pass "$test_msg" 191 } 192} 193 194# Test reverse finish from short func 195 196set breakloc [gdb_get_line_number "SHORT FUNC" "$srcfile"] 197gdb_continue_to_breakpoint "short_func" ".*$srcfile:$breakloc.*" 198 199set test_msg "reverse finish from short_func" 200gdb_test_multiple "finish" "$test_msg" { 201 -re ".* char_checkpoint.*$gdb_prompt $" { 202 pass "$test_msg" 203 } 204} 205 206# Test reverse finish from char func 207 208set breakloc [gdb_get_line_number "CHAR FUNC" "$srcfile"] 209gdb_continue_to_breakpoint "char_func" ".*$srcfile:$breakloc.*" 210 211set test_msg "reverse finish from char_func" 212gdb_test_multiple "finish" "$test_msg" { 213 -re ".* void_checkpoint.*$gdb_prompt $" { 214 pass "$test_msg" 215 } 216} 217 218# Test reverse finish from void func 219 220set breakloc [gdb_get_line_number "VOID FUNC" "$srcfile"] 221gdb_continue_to_breakpoint "void_func" ".*$srcfile:$breakloc.*" 222 223set test_msg "reverse finish from void_func" 224gdb_test_multiple "finish" "$test_msg" { 225 -re ".* call to void_func.*$gdb_prompt $" { 226 pass "$test_msg" 227 } 228} 229