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.
113 lines
3.9 KiB
Plaintext
113 lines
3.9 KiB
Plaintext
# Copyright 2012-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/>.
|
|
|
|
# Tests for explicit linespecs
|
|
|
|
if {[skip_cplus_tests]} {
|
|
unsupported "skipping C++ tests"
|
|
return
|
|
}
|
|
|
|
standard_testfile .cc
|
|
set exefile $testfile
|
|
|
|
if {[prepare_for_testing "failed to prepare" $exefile $srcfile \
|
|
{c++ debug nowarnings}]} {
|
|
return -1
|
|
}
|
|
|
|
# Wrap this whole test in a namespace to avoid contaminating other tests.
|
|
namespace eval $testfile {
|
|
# Test the given (explicit) LINESPEC which should cause gdb to break
|
|
# at LOCATION.
|
|
proc test_breakpoint {linespec location} {
|
|
|
|
# Delete all breakpoints, set a new breakpoint at LINESPEC,
|
|
# and attempt to run to it.
|
|
delete_breakpoints
|
|
gdb_breakpoint $linespec
|
|
gdb_continue_to_breakpoint $linespec $location
|
|
}
|
|
|
|
# Add the given LINESPEC to the array named in THEARRAY. GDB is expected
|
|
# to stop at LOCATION.
|
|
proc add {thearray linespec location} {
|
|
upvar $thearray ar
|
|
|
|
lappend ar(linespecs) $linespec
|
|
lappend ar(locations) $location
|
|
}
|
|
|
|
# Some locations used in this test
|
|
variable lineno
|
|
variable location
|
|
set lineno(normal) [gdb_get_line_number "myfunction location" $srcfile]
|
|
set lineno(entry) [gdb_get_line_number "entry location" $srcfile]
|
|
set lineno(top) [gdb_get_line_number "top location" $srcfile]
|
|
set lineno(operator) [gdb_get_line_number "operator location" $srcfile]
|
|
foreach v [array names lineno] {
|
|
set location($v) ".*[string_to_regexp "$srcfile:$lineno($v)"].*"
|
|
}
|
|
|
|
# A list of explicit linespecs and the corresponding location
|
|
variable linespecs
|
|
set linespecs(linespecs) {}
|
|
set linespecs(location) {}
|
|
|
|
add linespecs "-source $srcfile -function myclass::myfunction" \
|
|
$location(normal)
|
|
add linespecs "-source $srcfile -function myclass::myfunction -label top" \
|
|
$location(top)
|
|
|
|
# This isn't implemented yet; -line is silently ignored.
|
|
add linespecs \
|
|
"-source $srcfile -function myclass::myfunction -label top -line 3" \
|
|
$location(top)
|
|
add linespecs "-source $srcfile -line $lineno(top)" $location(top)
|
|
add linespecs "-function myclass::myfunction" $location(normal)
|
|
add linespecs "-function myclass::myfunction -label top" $location(top)
|
|
|
|
# These are also not yet supported; -line is silently ignored.
|
|
add linespecs "-function myclass::myfunction -line 3" $location(normal)
|
|
add linespecs "-function myclass::myfunction -label top -line 3" \
|
|
$location(top)
|
|
add linespecs "-line 3" $location(normal)
|
|
add linespecs "-function myclass::operator," $location(operator)
|
|
add linespecs "-function 'myclass::operator,'" $location(operator)
|
|
add linespecs "-function \"myclass::operator,\"" $location(operator)
|
|
|
|
# Fire up gdb.
|
|
if {![runto_main]} {
|
|
namespace delete $testfile
|
|
return -1
|
|
}
|
|
|
|
# Test explicit linespecs, with and without conditions.
|
|
foreach linespec $linespecs(linespecs) loc_pattern $linespecs(locations) {
|
|
# Test the linespec
|
|
test_breakpoint $linespec $loc_pattern
|
|
}
|
|
|
|
# Special (orphaned) dprintf cases.
|
|
gdb_test "dprintf -function myclass::operator,,\"hello\"" \
|
|
"Dprintf .*$srcfile, line $lineno(operator)\\."
|
|
gdb_test "dprintf -function 'myclass::operator,',\"hello\"" \
|
|
"Dprintf .*$srcfile, line $lineno(operator)\\."
|
|
gdb_test "dprintf -function \"myclass::operator,\",\"hello\"" \
|
|
"Dprintf .*$srcfile, line $lineno(operator)\\."
|
|
}
|
|
|
|
namespace delete $testfile
|