diff options
author | Joel Brobecker <brobecker@gnat.com> | 2012-09-18 16:52:19 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2012-09-18 16:52:19 +0000 |
commit | 4ae24af054894eef0a5a45ab48aeef263d2739ec (patch) | |
tree | 7c96c2182424884dc8ab96e6d8edb90d45f79290 | |
parent | 4b8c8c02e917d8509100cfe2f5292d3f18cb43d9 (diff) | |
download | gdb-4ae24af054894eef0a5a45ab48aeef263d2739ec.zip gdb-4ae24af054894eef0a5a45ab48aeef263d2739ec.tar.gz gdb-4ae24af054894eef0a5a45ab48aeef263d2739ec.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/linespec.c | 7 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_reset.exp | 37 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_reset/foo.adb | 27 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_reset/io.adb | 21 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_reset/io.ads | 18 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_reset/pck.adb | 21 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_reset/pck.ads | 18 |
9 files changed, 155 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9f9067d..f89617c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-09-18 Joel Brobecker <brobecker@adacore.com> + + * linespec.c (iterate_over_all_matching_symtabs): Use the correct + language when iterating over symbols. + 2012-09-18 Yao Qi <yao@codesourcery.com> * mi/mi-interp.c: Declare mi_tsv_created and mi_tsv_deleted. diff --git a/gdb/linespec.c b/gdb/linespec.c index 86239c9..f7ff54e 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1010,7 +1010,8 @@ iterate_over_all_matching_symtabs (struct linespec_state *state, struct block *block; block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK); - LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback, data); + state->language->la_iterate_over_symbols (block, name, domain, + callback, data); if (include_inline) { @@ -1021,8 +1022,8 @@ iterate_over_all_matching_symtabs (struct linespec_state *state, i < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (symtab)); i++) { block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), i); - LA_ITERATE_OVER_SYMBOLS (block, name, domain, - iterate_inline_only, &cad); + state->language->la_iterate_over_symbols + (block, name, domain, iterate_inline_only, &cad); } } } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 21e048a..bda828f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-09-18 Joel Brobecker <brobecker@adacore.com> + + * gdb.ada/bp_reset: New testcase. + 2012-09-18 Yao Qi <yao@codesourcery.com> * gdb.trace/mi-tsv-changed.exp: New. 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 <http://www.gnu.org/licenses/>. + +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 <http://www.gnu.org/licenses/>. + +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 <http://www.gnu.org/licenses/>. + +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 <http://www.gnu.org/licenses/>. + +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 <http://www.gnu.org/licenses/>. + +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 <http://www.gnu.org/licenses/>. + +package Pck is + procedure Do_Nothing; +end Pck; |