# Copyright 2022-2023 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 . # Regression test for PR gdb/7161. Test that GDB cannot delete non-user # breakpoints with clear command. # 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]} { return 0 } set bp_num [get_first_maint_bp_num] set bp_addr [gdb_get_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"