mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
256 lines
6.8 KiB
Plaintext
256 lines
6.8 KiB
Plaintext
# Copyright 2008-2022 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# This file is part of the GDB testsuite. It tests 'finish' with
|
|
# reverse debugging.
|
|
|
|
if ![supports_reverse] {
|
|
return
|
|
}
|
|
|
|
standard_testfile finish-reverse.c
|
|
set precsave [standard_output_file finish.precsave]
|
|
|
|
if { [prepare_for_testing "failed to prepare" "$testfile" $srcfile] } {
|
|
return -1
|
|
}
|
|
|
|
runto_main
|
|
|
|
if [supports_process_record] {
|
|
# Activate process record/replay
|
|
gdb_test_no_output "record" "turn on process record"
|
|
}
|
|
|
|
# Run until end, then save execution log.
|
|
|
|
set breakloc [gdb_get_line_number "end of main" "$srcfile"]
|
|
gdb_test "break $breakloc" \
|
|
"Breakpoint $decimal at .*$srcfile, line $breakloc\." \
|
|
"breakpoint at end of main"
|
|
|
|
gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
|
|
|
|
gdb_test "record save $precsave" \
|
|
"Saved core file $precsave with execution log\." \
|
|
"save process recfile"
|
|
|
|
gdb_test "kill" "" "kill process, prepare to debug log file" \
|
|
"Kill the program being debugged\\? \\(y or n\\) " "y"
|
|
|
|
gdb_test "record restore $precsave" \
|
|
"Restored records from core file .*" \
|
|
"reload precord save file"
|
|
|
|
# Test finish from void func
|
|
|
|
set breakloc [gdb_get_line_number "VOID FUNC" "$srcfile"]
|
|
gdb_test "break void_func" \
|
|
"Breakpoint $decimal at .*$srcfile, line $breakloc\." \
|
|
"set breakpoint on void_func"
|
|
gdb_continue_to_breakpoint "void_func" ".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "finish from void_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re " call to void_func .*$gdb_prompt $" {
|
|
send_gdb "step\n"
|
|
exp_continue
|
|
}
|
|
-re " void_checkpoint .*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test finish from char func
|
|
|
|
set breakloc [gdb_get_line_number "CHAR FUNC" "$srcfile"]
|
|
gdb_test "break char_func" \
|
|
"Breakpoint $decimal at .*$srcfile, line $breakloc\." \
|
|
"set breakpoint on char_func"
|
|
gdb_continue_to_breakpoint "char_func" ".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "finish from char_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re " void_checkpoint .*$gdb_prompt $" {
|
|
send_gdb "step\n"
|
|
exp_continue
|
|
}
|
|
-re " char_checkpoint .*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test finish from short func
|
|
|
|
set breakloc [gdb_get_line_number "SHORT FUNC" "$srcfile"]
|
|
gdb_test "break short_func" \
|
|
"Breakpoint $decimal at .* line $breakloc\." \
|
|
"set breakpoint on short_func"
|
|
gdb_continue_to_breakpoint "short_func" ".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "finish from short_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re " char_checkpoint .*$gdb_prompt $" {
|
|
send_gdb "step\n"
|
|
exp_continue
|
|
}
|
|
-re " short_checkpoint .*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test finish from int func
|
|
|
|
set breakloc [gdb_get_line_number "INT FUNC" "$srcfile"]
|
|
gdb_test "break int_func" \
|
|
"Breakpoint $decimal at .* line $breakloc\." \
|
|
"set breakpoint on int_func"
|
|
gdb_continue_to_breakpoint "int_func" ".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "finish from int_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re " short_checkpoint .*$gdb_prompt $" {
|
|
send_gdb "step\n"
|
|
exp_continue
|
|
}
|
|
-re " int_checkpoint .*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test finish from long func
|
|
|
|
set breakloc [gdb_get_line_number "LONG FUNC" "$srcfile"]
|
|
gdb_test "break long_func" \
|
|
"Breakpoint $decimal at .* line $breakloc\." \
|
|
"set breakpoint on long_func"
|
|
gdb_continue_to_breakpoint "long_func" ".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "finish from long_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re " int_checkpoint .*$gdb_prompt $" {
|
|
send_gdb "step\n"
|
|
exp_continue
|
|
}
|
|
-re " long_checkpoint .*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test finish from long long func
|
|
|
|
set breakloc [gdb_get_line_number "LONG LONG FUNC" "$srcfile"]
|
|
gdb_test "break long_long_func" \
|
|
"Breakpoint $decimal at .* line $breakloc\." \
|
|
"set breakpoint on long_long_func"
|
|
gdb_continue_to_breakpoint "long_long_func" ".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "finish from long_long_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re " long_checkpoint .*$gdb_prompt $" {
|
|
send_gdb "step\n"
|
|
exp_continue
|
|
}
|
|
-re " long_long_checkpoint .*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
|
|
###
|
|
###
|
|
###
|
|
|
|
# Now switch to reverse
|
|
gdb_test_no_output "set exec-dir reverse" "set reverse execution"
|
|
|
|
# Test reverse finish from long long func
|
|
|
|
set breakloc [gdb_get_line_number "LONG LONG FUNC" "$srcfile"]
|
|
gdb_continue_to_breakpoint "long_long_func backward" \
|
|
".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "reverse finish from long_long_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re ".* long_checkpoint.*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test reverse finish from long func
|
|
|
|
set breakloc [gdb_get_line_number "LONG FUNC" "$srcfile"]
|
|
gdb_continue_to_breakpoint "long_func backward" \
|
|
".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "reverse finish from long_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re ".* int_checkpoint.*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test reverse finish from int func
|
|
|
|
set breakloc [gdb_get_line_number "INT FUNC" "$srcfile"]
|
|
gdb_continue_to_breakpoint "int_func backward" \
|
|
".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "reverse finish from int_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re ".* short_checkpoint.*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test reverse finish from short func
|
|
|
|
set breakloc [gdb_get_line_number "SHORT FUNC" "$srcfile"]
|
|
gdb_continue_to_breakpoint "short_func backward" \
|
|
".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "reverse finish from short_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re ".* char_checkpoint.*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test reverse finish from char func
|
|
|
|
set breakloc [gdb_get_line_number "CHAR FUNC" "$srcfile"]
|
|
gdb_continue_to_breakpoint "char_func backward" \
|
|
".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "reverse finish from char_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re ".* void_checkpoint.*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|
|
|
|
# Test reverse finish from void func
|
|
|
|
set breakloc [gdb_get_line_number "VOID FUNC" "$srcfile"]
|
|
gdb_continue_to_breakpoint "void_func backward" \
|
|
".*$srcfile:$breakloc.*"
|
|
|
|
set test_msg "reverse finish from void_func"
|
|
gdb_test_multiple "finish" "$test_msg" {
|
|
-re ".* call to void_func.*$gdb_prompt $" {
|
|
pass "$test_msg"
|
|
}
|
|
}
|