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.
85 lines
3.1 KiB
Plaintext
85 lines
3.1 KiB
Plaintext
# Copyright 2016-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/>.
|
|
|
|
# The purpose of this testcase is to verify that, when using a breakpoint
|
|
# location of the form "*<EXPR>" (Eg: "*main"), GDB is able to start
|
|
# the program and stop at the correct location. With programs built
|
|
# as PIE, this means that GDB needs to re-evaluate the location once
|
|
# the program as started, since PIE ensures that the address of all
|
|
# symbols have changed after load.
|
|
#
|
|
# PIE is not always supported by the target system, so instead of
|
|
# creating a testcase building executables with PIE, this testcase
|
|
# takes a slightly different approach. It builds a first program,
|
|
# breaks on *main, and then runs to that breakpoint. It then builds
|
|
# a second program, different from the first one, and loads that
|
|
# executable within the same GDB session. Similarly to the PIE case,
|
|
# the address of main should be different, and therefore GDB should
|
|
# recalculate it. We verify that by checking that running to that
|
|
# breakpoint still works, and that we land at the first instruction
|
|
# of that function in both cases.
|
|
|
|
set testfile1 "break-fun-addr1"
|
|
set srcfile1 ${testfile1}.c
|
|
set binfile1 [standard_output_file ${testfile1}]
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {debug}] != "" } {
|
|
untested "failed to compile first testcase"
|
|
return -1
|
|
}
|
|
|
|
# Start the debugger with the first executable, put a breakpoint
|
|
# on the first instruction of function "main" ("*main"), then
|
|
# run to that breakpoint.
|
|
|
|
clean_restart ${binfile1}
|
|
|
|
with_test_prefix "${testfile1}" {
|
|
|
|
gdb_test "break *main" \
|
|
"Breakpoint.*at.* file .*$srcfile1, line .*" \
|
|
|
|
gdb_run_cmd
|
|
gdb_test "" \
|
|
"Breakpoint.* main \\(\\) at .*$srcfile1:.*" \
|
|
"run to breakpoint at *main"
|
|
|
|
# Verify also that we stopped at the start of the function...
|
|
gdb_test "p \$pc == main" " = 1"
|
|
}
|
|
|
|
set testfile2 "break-fun-addr2"
|
|
set srcfile2 ${testfile2}.c
|
|
set binfile2 [standard_output_file ${testfile2}]
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug}] != "" } {
|
|
untested "failed to compile second testcase"
|
|
return -1
|
|
}
|
|
|
|
# Now, keeping the same GDB process (so as to keep the same breakpoint),
|
|
# start a new debugging session with a different executable.
|
|
gdb_load ${binfile2}
|
|
|
|
with_test_prefix "${testfile2}" {
|
|
|
|
gdb_run_cmd
|
|
gdb_test "" \
|
|
"Breakpoint.* main \\(\\) at .*$srcfile2:.*" \
|
|
"run to breakpoint at *main"
|
|
|
|
gdb_test "p \$pc == main" " = 1"
|
|
}
|