mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21: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.
102 lines
3.5 KiB
Plaintext
102 lines
3.5 KiB
Plaintext
# Copyright 2018-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/>.
|
|
|
|
if { ![supports_reverse] } {
|
|
untested "target does not support record"
|
|
return -1
|
|
}
|
|
|
|
standard_testfile
|
|
|
|
set cflags "-mindirect-branch=thunk -mfunction-return=thunk"
|
|
if { [prepare_for_testing "failed to prepare" $testfile $srcfile \
|
|
[list debug "additional_flags=$cflags"]] } {
|
|
return -1
|
|
}
|
|
|
|
if { ![runto_main] } {
|
|
return -1
|
|
}
|
|
|
|
# Do repeated stepping COMMANDs in order to reach TARGET from CURRENT
|
|
#
|
|
# COMMAND is a stepping command
|
|
# CURRENT is a string matching the current location
|
|
# TARGET is a string matching the target location
|
|
# TEST is the test name
|
|
#
|
|
# The function issues repeated COMMANDs as long as the location matches
|
|
# CURRENT up to a maximum of 100 steps.
|
|
#
|
|
# TEST passes if the resulting location matches TARGET and fails
|
|
# otherwise.
|
|
#
|
|
proc step_until { command current target test } {
|
|
global gdb_prompt
|
|
|
|
set count 0
|
|
gdb_test_multiple "$command" "$test" {
|
|
-re "$current.*$gdb_prompt $" {
|
|
incr count
|
|
if { $count < 100 } {
|
|
send_gdb "$command\n"
|
|
exp_continue
|
|
} else {
|
|
fail "$test"
|
|
}
|
|
}
|
|
-re "$target.*$gdb_prompt $" {
|
|
pass "$test"
|
|
}
|
|
}
|
|
}
|
|
|
|
gdb_test_no_output "record"
|
|
gdb_test "next" ".*" "record trace"
|
|
|
|
# Normal stepping steps through all thunks.
|
|
gdb_test "reverse-step" "apply\.3.*" "reverse-step into apply"
|
|
gdb_test "reverse-step" "inc\.3.*" "reverse-step into inc"
|
|
gdb_test "reverse-step" "inc\.2.*" "reverse-step inside inc"
|
|
gdb_test "reverse-step" "apply\.2.*" \
|
|
"reverse-step through call thunk into apply, first time"
|
|
gdb_test "reverse-step" "main\.2.*" "reverse-step into main"
|
|
gdb_test "step" "apply\.2.*" "step into apply"
|
|
gdb_test "step" "inc\.2.*" "step through call thunk into inc"
|
|
gdb_test "reverse-step" "apply\.2.*" \
|
|
"reverse-step through call thunk into apply, second time"
|
|
gdb_test "next" "apply\.3.*" "step through thunks and over inc"
|
|
gdb_test "reverse-next" "apply\.2.*" \
|
|
"reverse-step through thunks and over inc"
|
|
|
|
# We can use instruction stepping to step into thunks.
|
|
step_until "stepi" "apply\.2" "indirect_thunk" "stepi into call thunk"
|
|
step_until "stepi" "indirect_thunk" "inc" \
|
|
"stepi out of call thunk into inc"
|
|
set alphanum_re "\[a-zA-Z0-9\]"
|
|
set pic_thunk_re "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
|
|
step_until "stepi" "(inc|$pic_thunk_re)" "return_thunk" "stepi into return thunk"
|
|
step_until "stepi" "return_thunk" "apply" \
|
|
"stepi out of return thunk back into apply"
|
|
|
|
step_until "reverse-stepi" "apply" "return_thunk" \
|
|
"reverse-stepi into return thunk"
|
|
step_until "reverse-stepi" "return_thunk" "inc" \
|
|
"reverse-stepi out of return thunk into inc"
|
|
step_until "reverse-stepi" "(inc|$pic_thunk_re)" "indirect_thunk" \
|
|
"reverse-stepi into call thunk"
|
|
step_until "reverse-stepi" "indirect_thunk" "apply" \
|
|
"reverse-stepi out of call thunk into apply"
|