mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +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.
92 lines
3.1 KiB
Plaintext
92 lines
3.1 KiB
Plaintext
# Copyright 2013-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/>.
|
|
load_lib dwarf.exp
|
|
|
|
# This test can only be run on targets which support DWARF-2 and use gas.
|
|
if {![dwarf2_support]} {
|
|
return 0
|
|
}
|
|
|
|
# This test can only be run on x86_64 targets.
|
|
if {![istarget "x86_64-*-*"] || ![is_lp64_target]} {
|
|
return 0
|
|
}
|
|
|
|
standard_testfile .S
|
|
|
|
if { [prepare_for_testing "failed to prepare" $testfile $srcfile {nodebug nopie}] } {
|
|
return -1
|
|
}
|
|
|
|
if ![runto stop_frame] {
|
|
perror "Failed to stop in stop_frame"
|
|
return -1
|
|
}
|
|
|
|
gdb_test "bt" "#0 (0x\[0-9a-f\]+ in )?stop_frame \[^\r\n\]*\r\n#1 \[^\r\n\]*first_frame \[^\r\n\]*\r\n#2 \[^\r\n\]*main\[^\r\n\]*" \
|
|
"backtrace from stop_frame"
|
|
|
|
for {set f 0} {$f < 3} {incr f} {
|
|
if {${f} == 0} {
|
|
set pattern_rax_rbx_rcx_print "$hex"
|
|
set pattern_rax_rbx_rcx_info "$hex\\s+$decimal"
|
|
set pattern_r8_r9_print "$hex"
|
|
set pattern_r8_r9_info "$hex\\s+$decimal"
|
|
} else {
|
|
set pattern_rax_rbx_rcx_print "<not saved>"
|
|
set pattern_rax_rbx_rcx_info "<not saved>"
|
|
set pattern_r8_r9_print "$hex"
|
|
set pattern_r8_r9_info "$hex\\s+$decimal"
|
|
}
|
|
|
|
# Select frame.
|
|
gdb_test "frame ${f}" "#${f}.*" "switch to frame ${f}"
|
|
|
|
gdb_test "p/x \$rax" ".*$pattern_rax_rbx_rcx_print.*" \
|
|
"print \$rax in frame ${f}"
|
|
gdb_test "p/x \$rbx" "$pattern_rax_rbx_rcx_print" \
|
|
"print \$rbx in frame ${f}"
|
|
gdb_test "p/x \$rcx" "$pattern_rax_rbx_rcx_print" \
|
|
"print \$rcx in frame ${f}"
|
|
|
|
gdb_test "p/x \$r8" "$pattern_r8_r9_print" "print \$r8 in frame ${f}"
|
|
gdb_test "p/x \$r9" "$pattern_r8_r9_print" "print \$r9 in frame ${f}"
|
|
|
|
|
|
# Display register values.
|
|
gdb_test "info registers rax rbx rcx r8 r9" \
|
|
[multi_line "rax\\s+${pattern_rax_rbx_rcx_info}\\s*" \
|
|
"rbx\\s+${pattern_rax_rbx_rcx_info}\\s*" \
|
|
"rcx\\s+${pattern_rax_rbx_rcx_info}\\s*" \
|
|
"r8\\s+${pattern_r8_r9_info}\\s*" \
|
|
"r9\\s+${pattern_r8_r9_info}\\s*"] \
|
|
"Check values of rax, rbx, rcx, r8, r9 in frame ${f}"
|
|
}
|
|
|
|
# Test that the debug log statement in frame_unwind_register_value produces
|
|
# "not saved" and not "optimized out".
|
|
gdb_test "set debug frame 1"
|
|
gdb_test {print $rax} [multi_line \
|
|
{ \[frame\] frame_unwind_register_value: frame=0, regnum=0\(rax\)} \
|
|
{ \[frame\] frame_unwind_register_value: -> <not saved>} \
|
|
{.*}]
|
|
gdb_test "set debug frame 0"
|
|
|
|
# Test that history values show "not saved" and not "optimized out".
|
|
gdb_test "print" " = <not saved>"
|
|
|
|
# Test that convenience variables _don't_ show "not saved".
|
|
gdb_test {print $foo = $rax} " = <optimized out>"
|