mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-12 12:16:04 +08:00
41b96eef5f
Tom and Simon feedback that there is a test failing in this commit:
commit a5c69b1e49
Date: Sun Apr 17 15:09:46 2022 +0800
gdb: fix using clear command to delete non-user breakpoints(PR cli/7161)
Then, I reproduced the same fail with Ubuntu 20.04 as Simon said, and I
fixed the nit in this patch. The root of the problem is not correctly
matching the presentation of internal breakpoints.
In addition, as Pedro pointed out, the original testcase is not portable
in some methods, so this patch fixes this issue and some other
improvements.
Tested on x86_64 ubuntu 20.04.4 and openSUSE Tumbleweed(VERSION_ID="20220425").
95 lines
2.6 KiB
Plaintext
95 lines
2.6 KiB
Plaintext
# Copyright 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/>.
|
|
|
|
# Regression test for PR gdb/7161. Test that GDB cannot delete non-user
|
|
# breakpoints with clear command.
|
|
|
|
# get_maint_bp_addr num
|
|
#
|
|
# Purpose:
|
|
# Get address of the specified internal breakpoint when using command
|
|
# "maint info breakpoints $num".
|
|
#
|
|
# Parameter:
|
|
# The parameter "num" indicates the number of the internal breakpoint
|
|
# to get. Note that this parameter must be a negative number.
|
|
# E.g., -1 means that we're gonna get the first internal breakpoint.
|
|
#
|
|
# Return:
|
|
# Internal breakpoint address.
|
|
#
|
|
proc get_maint_bp_addr { num } {
|
|
gdb_test_multiple "maint info break $num" "find address of internal bp $num" {
|
|
-re -wrap ".*(0x\[0-9a-f\]+).*" {
|
|
return $expect_out(1,string)
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
# get_first_maint_bp_num
|
|
#
|
|
# Purpose:
|
|
# Get the first number of all internal breakpoints when using command
|
|
# "maint info breakpoints".
|
|
#
|
|
# Parameter:
|
|
# None.
|
|
#
|
|
# Return:
|
|
# Internal breakpoint number, which is negative.
|
|
#
|
|
proc get_first_maint_bp_num { } {
|
|
gdb_test_multiple "maint info break" "find first internal bp num" {
|
|
-re -wrap "(-\[0-9\]).*" {
|
|
return $expect_out(1,string)
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
standard_testfile .c
|
|
|
|
# This testcase just needs a "Hello world" source file, reuse
|
|
# gdb.base/main.c instead of adding a new one.
|
|
if { [gdb_compile "${srcdir}/${subdir}/main.c" "${binfile}" executable {debug}] != "" } {
|
|
untested "failed to compile"
|
|
return -1
|
|
}
|
|
|
|
# Start with a fresh gdb.
|
|
clean_restart ${binfile}
|
|
|
|
if ![runto_main] then {
|
|
return 0
|
|
}
|
|
|
|
set bp_num [get_first_maint_bp_num]
|
|
set bp_addr [get_maint_bp_addr $bp_num]
|
|
|
|
gdb_test "maint info break $bp_num" \
|
|
"$bp_num.*$bp_addr.*" \
|
|
"maint info breakpoint \$bp_num"
|
|
|
|
gdb_test "clear *$bp_addr" \
|
|
"No breakpoint at \\*$bp_addr." \
|
|
"clear internal breakpoint"
|
|
|
|
# Check again, make sure that GDB really didn't delete the internal breakpoint.
|
|
gdb_test "maint info break $bp_num" \
|
|
"$bp_num.*$bp_addr.*" \
|
|
"maint info breakpoint \$bp_num after clear"
|
|
|