wrong language used when re-setting breakpoint
authorJoel Brobecker <brobecker@gnat.com>
Tue, 18 Sep 2012 16:52:19 +0000 (16:52 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Tue, 18 Sep 2012 16:52:19 +0000 (16:52 +0000)
commit4ae24af054894eef0a5a45ab48aeef263d2739ec
tree7c96c2182424884dc8ab96e6d8edb90d45f79290
parent4b8c8c02e917d8509100cfe2f5292d3f18cb43d9
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/ChangeLog
gdb/linespec.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/bp_reset.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/bp_reset/foo.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/bp_reset/io.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/bp_reset/io.ads [new file with mode: 0644]
gdb/testsuite/gdb.ada/bp_reset/pck.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/bp_reset/pck.ads [new file with mode: 0644]