* breakpoint.c (parse_breakpoint_sals) <(*address) == NULL>: New
	variable pc.  Call find_pc_line instead of find_pc_overlay, restore
	original PC for it.

gdb/testsuite/
	* gdb.base/break-caller-line.c: New file.
	* gdb.base/break-caller-line.exp: New file.
This commit is contained in:
Jan Kratochvil 2012-08-27 16:55:39 +00:00
parent e968779960
commit 1c8cdcb14f
5 changed files with 105 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2012-08-27 Jan Kratochvil <jan.kratochvil@redhat.com>
* breakpoint.c (parse_breakpoint_sals) <(*address) == NULL>: New
variable pc. Call find_pc_line instead of find_pc_overlay, restore
original PC for it.
2012-08-27 Eli Zaretskii <eliz@gnu.org> 2012-08-27 Eli Zaretskii <eliz@gnu.org>
Jan Kratochvil <jan.kratochvil@redhat.com> Jan Kratochvil <jan.kratochvil@redhat.com>

View File

@ -9126,21 +9126,27 @@ parse_breakpoint_sals (char **address,
{ {
struct linespec_sals lsal; struct linespec_sals lsal;
struct symtab_and_line sal; struct symtab_and_line sal;
CORE_ADDR pc;
init_sal (&sal); /* Initialize to zeroes. */ init_sal (&sal); /* Initialize to zeroes. */
lsal.sals.sals = (struct symtab_and_line *) lsal.sals.sals = (struct symtab_and_line *)
xmalloc (sizeof (struct symtab_and_line)); xmalloc (sizeof (struct symtab_and_line));
/* Set sal's pspace, pc, symtab, and line to the values /* Set sal's pspace, pc, symtab, and line to the values
corresponding to the last call to print_frame_info. */ corresponding to the last call to print_frame_info.
Be sure to reinitialize LINE with NOTCURRENT == 0
as the breakpoint line number is inappropriate otherwise.
find_pc_line would adjust PC, re-set it back. */
get_last_displayed_sal (&sal); get_last_displayed_sal (&sal);
sal.section = find_pc_overlay (sal.pc); pc = sal.pc;
sal = find_pc_line (pc, 0);
/* "break" without arguments is equivalent to "break *PC" /* "break" without arguments is equivalent to "break *PC"
where PC is the last displayed codepoint's address. So where PC is the last displayed codepoint's address. So
make sure to set sal.explicit_pc to prevent GDB from make sure to set sal.explicit_pc to prevent GDB from
trying to expand the list of sals to include all other trying to expand the list of sals to include all other
instances with the same symtab and line. */ instances with the same symtab and line. */
sal.pc = pc;
sal.explicit_pc = 1; sal.explicit_pc = 1;
lsal.sals.sals[0] = sal; lsal.sals.sals[0] = sal;

View File

@ -1,3 +1,8 @@
2012-08-27 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/break-caller-line.c: New file.
* gdb.base/break-caller-line.exp: New file.
2012-08-27 Jan Kratochvil <jan.kratochvil@redhat.com> 2012-08-27 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.ada/rdv_wait.exp (set debug-file-directory): New command. * gdb.ada/rdv_wait.exp (set debug-file-directory): New command.

View File

@ -0,0 +1,31 @@
/* This testcase is part of GDB, the GNU debugger.
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/>. */
static int v;
static void
callee (void)
{
v++;
}
int
main (void)
{
callee ();
return 0;
}

View File

@ -0,0 +1,55 @@
# Copyright (C) 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/>.
standard_testfile
if { [prepare_for_testing ${testfile}.exp ${testfile}] } {
return -1
}
if ![runto callee] {
return 0
}
set test "up"
gdb_test_multiple $test $test {
-re "\r\n(\[0-9\]+)\[ \t\]+callee \\(\\);\r\n$gdb_prompt $" {
set notcurrent $expect_out(1,string)
pass $test
}
}
set test {info line *$pc}
gdb_test_multiple $test $test {
-re "\r\nLine (\[0-9\]+) of .*\r\n$gdb_prompt $" {
set current $expect_out(1,string)
pass $test
}
}
if {$notcurrent == $current} {
untested "target arch has an instruction after call as part of the caller line"
return 0
}
set test "break"
gdb_test_multiple $test $test {
-re "\r\nBreakpoint \[0-9\]+ at .*, line $current\\.\r\n$gdb_prompt $" {
pass $test
}
-re "\r\nBreakpoint \[0-9\]+ at .*, line $notcurrent\\.\r\n$gdb_prompt $" {
fail "$test (caller line)"
}
}