From 4ae24af054894eef0a5a45ab48aeef263d2739ec Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 18 Sep 2012 16:52:19 +0000 Subject: wrong language used when re-setting breakpoint The debugger sometimes fails to re-set a breakpoint as follow, causing it to become disabled: (gdb) b nested_sub Breakpoint 1 at 0x401cec: file foo.adb, line 7. (gdb) b do_nothing Breakpoint 2 at 0x401cdc: file pck.adb, line 4. (gdb) run Starting program: /[...]/foo Error in re-setting breakpoint 1: Function "nested_sub" not defined. Breakpoint 2, pck.do_nothing () at pck.adb:4 4 null; This only happens on machines where the debug-file-directory is a valid directory name. The reason behind the error is that the linespec code that re-sets the breakpoints uses the current_language global when iterating over a symtab's symbols. However, the that global gets switched from Ada to C during the startup phase, probably as a side-effect of stopping in some system code for which debugging info is available. The fix is to make sure that we use the correct language. gdb/ChangeLog: * linespec.c (iterate_over_all_matching_symtabs): Use the correct language when iterating over symbols. gdb/testsuite/ChangeLog: * gdb.ada/bp_reset: New testcase. --- gdb/testsuite/gdb.ada/bp_reset.exp | 37 ++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.ada/bp_reset/foo.adb | 27 +++++++++++++++++++++++++ gdb/testsuite/gdb.ada/bp_reset/io.adb | 21 +++++++++++++++++++ gdb/testsuite/gdb.ada/bp_reset/io.ads | 18 +++++++++++++++++ gdb/testsuite/gdb.ada/bp_reset/pck.adb | 21 +++++++++++++++++++ gdb/testsuite/gdb.ada/bp_reset/pck.ads | 18 +++++++++++++++++ 6 files changed, 142 insertions(+) create mode 100644 gdb/testsuite/gdb.ada/bp_reset.exp create mode 100644 gdb/testsuite/gdb.ada/bp_reset/foo.adb create mode 100644 gdb/testsuite/gdb.ada/bp_reset/io.adb create mode 100644 gdb/testsuite/gdb.ada/bp_reset/io.ads create mode 100644 gdb/testsuite/gdb.ada/bp_reset/pck.adb create mode 100644 gdb/testsuite/gdb.ada/bp_reset/pck.ads (limited to 'gdb/testsuite/gdb.ada') diff --git a/gdb/testsuite/gdb.ada/bp_reset.exp b/gdb/testsuite/gdb.ada/bp_reset.exp new file mode 100644 index 0000000..aff3341 --- /dev/null +++ b/gdb/testsuite/gdb.ada/bp_reset.exp @@ -0,0 +1,37 @@ +# Copyright 2012 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 . + +load_lib "ada.exp" + +standard_ada_testfile foo + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { + return -1 +} + +clean_restart ${testfile} + +gdb_test "break nested_sub" \ + "Breakpoint $decimal at $hex: file .*foo.adb, line $decimal\\." + +gdb_test "break do_nothing" \ + "Breakpoint $decimal at $hex: file .*pck.adb, line $decimal\\." + +# Run the program. Make sure the program runs until it hits +# the first breakpoint inside nested_sub. + +gdb_run_cmd +gdb_test "" "Breakpoint $decimal, foo\\.nested_sub \\(\\).*" + diff --git a/gdb/testsuite/gdb.ada/bp_reset/foo.adb b/gdb/testsuite/gdb.ada/bp_reset/foo.adb new file mode 100644 index 0000000..27298f4 --- /dev/null +++ b/gdb/testsuite/gdb.ada/bp_reset/foo.adb @@ -0,0 +1,27 @@ +-- Copyright 2012 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 . + +with Pck; use Pck; +with IO; use IO; + +procedure Foo is + procedure Nested_Sub is + begin + Put_Line ("Some string"); + end Nested_Sub; +begin + Nested_Sub; + Do_Nothing; +end Foo; diff --git a/gdb/testsuite/gdb.ada/bp_reset/io.adb b/gdb/testsuite/gdb.ada/bp_reset/io.adb new file mode 100644 index 0000000..ea7306e --- /dev/null +++ b/gdb/testsuite/gdb.ada/bp_reset/io.adb @@ -0,0 +1,21 @@ +-- Copyright 2012 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 . + +package body IO is + procedure Put_Line (S : String) is + begin + null; + end Put_Line; +end IO; diff --git a/gdb/testsuite/gdb.ada/bp_reset/io.ads b/gdb/testsuite/gdb.ada/bp_reset/io.ads new file mode 100644 index 0000000..65772db --- /dev/null +++ b/gdb/testsuite/gdb.ada/bp_reset/io.ads @@ -0,0 +1,18 @@ +-- Copyright 2012 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 . + +package IO is + procedure Put_Line (S : String); +end IO; diff --git a/gdb/testsuite/gdb.ada/bp_reset/pck.adb b/gdb/testsuite/gdb.ada/bp_reset/pck.adb new file mode 100644 index 0000000..ea1d233 --- /dev/null +++ b/gdb/testsuite/gdb.ada/bp_reset/pck.adb @@ -0,0 +1,21 @@ +-- Copyright 2012 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 . + +package body Pck is + procedure Do_Nothing is + begin + null; + end Do_Nothing; +end Pck; diff --git a/gdb/testsuite/gdb.ada/bp_reset/pck.ads b/gdb/testsuite/gdb.ada/bp_reset/pck.ads new file mode 100644 index 0000000..c8f9ec9 --- /dev/null +++ b/gdb/testsuite/gdb.ada/bp_reset/pck.ads @@ -0,0 +1,18 @@ +-- Copyright 2012 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 . + +package Pck is + procedure Do_Nothing; +end Pck; -- cgit v1.1