* linespec.c (minsym_found): Advance to the next line if possible.
* gdb.base/prologue.c, gdb.base/prologue.exp: New. * lib/gdb.exp (gdb_breakpoint): Handle "temporary".
This commit is contained in:
parent
6b3d9b8313
commit
e48883f791
@ -1,3 +1,7 @@
|
|||||||
|
2007-07-31 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* linespec.c (minsym_found): Advance to the next line if possible.
|
||||||
|
|
||||||
2007-07-31 Pedro Alves <pedro_alves@portugalmail.pt>
|
2007-07-31 Pedro Alves <pedro_alves@portugalmail.pt>
|
||||||
|
|
||||||
* arm-wince-tdep.c (arm_wince_init_abi): Remove svr4 related call.
|
* arm-wince-tdep.c (arm_wince_init_abi): Remove svr4 related call.
|
||||||
|
@ -1833,11 +1833,27 @@ minsym_found (int funfirstline, struct minimal_symbol *msymbol)
|
|||||||
values.sals[0].section = SYMBOL_BFD_SECTION (msymbol);
|
values.sals[0].section = SYMBOL_BFD_SECTION (msymbol);
|
||||||
if (funfirstline)
|
if (funfirstline)
|
||||||
{
|
{
|
||||||
|
struct symtab_and_line sal;
|
||||||
|
|
||||||
values.sals[0].pc
|
values.sals[0].pc
|
||||||
+= gdbarch_deprecated_function_start_offset (current_gdbarch);
|
+= gdbarch_deprecated_function_start_offset (current_gdbarch);
|
||||||
values.sals[0].pc = gdbarch_skip_prologue
|
values.sals[0].pc = gdbarch_skip_prologue
|
||||||
(current_gdbarch, values.sals[0].pc);
|
(current_gdbarch, values.sals[0].pc);
|
||||||
|
|
||||||
|
sal = find_pc_sect_line (values.sals[0].pc, values.sals[0].section, 0);
|
||||||
|
|
||||||
|
/* Check if SKIP_PROLOGUE left us in mid-line, and the next
|
||||||
|
line is still part of the same function. If there is no
|
||||||
|
line information here, sal.pc will be the passed in PC. */
|
||||||
|
if (sal.pc != values.sals[0].pc
|
||||||
|
&& (lookup_minimal_symbol_by_pc_section (values.sals[0].pc,
|
||||||
|
values.sals[0].section)
|
||||||
|
== lookup_minimal_symbol_by_pc_section (sal.end,
|
||||||
|
values.sals[0].section)))
|
||||||
|
/* Recalculate the line number (might not be N+1). */
|
||||||
|
values.sals[0] = find_pc_sect_line (sal.end, values.sals[0].section, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
values.nelts = 1;
|
values.nelts = 1;
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2007-07-31 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb.base/prologue.c, gdb.base/prologue.exp: New.
|
||||||
|
* lib/gdb.exp (gdb_breakpoint): Handle "temporary".
|
||||||
|
|
||||||
2007-07-30 Maciej W. Rozycki <macro@mips.com>
|
2007-07-30 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
* gdb.base/dump.exp: Force the correct endianness for binary
|
* gdb.base/dump.exp: Force the correct endianness for binary
|
||||||
|
39
gdb/testsuite/gdb.base/prologue.c
Normal file
39
gdb/testsuite/gdb.base/prologue.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/* This test is part of GDB, the GNU debugger.
|
||||||
|
|
||||||
|
Copyright 2007 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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int leaf (void)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int marker (int val)
|
||||||
|
{
|
||||||
|
leaf ();
|
||||||
|
return leaf () * val;
|
||||||
|
}
|
||||||
|
|
||||||
|
int other (int val) __attribute__((alias("marker")));
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
marker (0);
|
||||||
|
marker (0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
68
gdb/testsuite/gdb.base/prologue.exp
Normal file
68
gdb/testsuite/gdb.base/prologue.exp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Test for prologue skipping in minimal symbols with line info.
|
||||||
|
# Copyright 2007 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
if { [skip_cplus_tests] } { continue }
|
||||||
|
|
||||||
|
set testfile "prologue"
|
||||||
|
set srcfile ${testfile}.c
|
||||||
|
set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
|
||||||
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
||||||
|
untested prologue.exp
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_exit
|
||||||
|
gdb_start
|
||||||
|
gdb_reinitialize_dir $srcdir/$subdir
|
||||||
|
gdb_load ${binfile}
|
||||||
|
|
||||||
|
if ![runto_main] then {
|
||||||
|
perror "couldn't run to breakpoint"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
proc find_breakpoint_pc { sym } {
|
||||||
|
global decimal hex gdb_prompt
|
||||||
|
|
||||||
|
if { [gdb_breakpoint $sym temporary] } {
|
||||||
|
pass "setting breakpoint at $sym"
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test "continue" "marker \\(.*\\) at.*" "continue to $sym"
|
||||||
|
|
||||||
|
set pc 0
|
||||||
|
set msg "reading \$pc: $sym"
|
||||||
|
gdb_test_multiple "print/x \$pc" $msg {
|
||||||
|
-re "\\\$$decimal = ($hex)\r\n$gdb_prompt $" {
|
||||||
|
set pc $expect_out(1,string)
|
||||||
|
pass $msg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pc
|
||||||
|
}
|
||||||
|
|
||||||
|
# GDB would skip the prologue differently when given a symbol with
|
||||||
|
# debug info than when given a minimal symbol from the symbol table.
|
||||||
|
# Make sure this is fixed.
|
||||||
|
|
||||||
|
set pc1 [find_breakpoint_pc "marker"]
|
||||||
|
|
||||||
|
set pc2 [find_breakpoint_pc "other"]
|
||||||
|
|
||||||
|
gdb_test "print $pc1 == $pc2" "\\\$$decimal = 1" "same pc from minimal symbol"
|
@ -324,7 +324,7 @@ proc gdb_start_cmd {args} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Set a breakpoint at FUNCTION. If there is an additional argument it is
|
# Set a breakpoint at FUNCTION. If there is an additional argument it is
|
||||||
# a list of options; the only currently supported option is allow-pending.
|
# a list of options; the supported options are allow-pending and temporary.
|
||||||
|
|
||||||
proc gdb_breakpoint { function args } {
|
proc gdb_breakpoint { function args } {
|
||||||
global gdb_prompt
|
global gdb_prompt
|
||||||
@ -335,7 +335,12 @@ proc gdb_breakpoint { function args } {
|
|||||||
set pending_response y
|
set pending_response y
|
||||||
}
|
}
|
||||||
|
|
||||||
send_gdb "break $function\n"
|
set break_command "break"
|
||||||
|
if {[lsearch -exact [lindex $args 0] temporary] != -1} {
|
||||||
|
set break_command "tbreak"
|
||||||
|
}
|
||||||
|
|
||||||
|
send_gdb "$break_command $function\n"
|
||||||
# The first two regexps are what we get with -g, the third is without -g.
|
# The first two regexps are what we get with -g, the third is without -g.
|
||||||
gdb_expect 30 {
|
gdb_expect 30 {
|
||||||
-re "Breakpoint \[0-9\]* at .*: file .*, line $decimal.\r\n$gdb_prompt $" {}
|
-re "Breakpoint \[0-9\]* at .*: file .*, line $decimal.\r\n$gdb_prompt $" {}
|
||||||
|
Loading…
Reference in New Issue
Block a user