* breakpoint.c (skip_prologue_sal): New function.

(resolve_sal_pc): Adjust SAL past prologue if the SAL was
        computed from a line number.
This commit is contained in:
Joel Brobecker 2008-02-27 20:27:49 +00:00
parent 0b998f4963
commit 6a048695b3
2 changed files with 30 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2008-02-27 Joel Brobecker <brobecker@adacore.com>
* breakpoint.c (skip_prologue_sal): New function.
(resolve_sal_pc): Adjust SAL past prologue if the SAL was
computed from a line number.
2008-02-27 Joel Brobecker <brobecker@adacore.com>
* features/rs6000/power-core.xml, features/rs6000/power64-core.xml

View File

@ -5482,6 +5482,25 @@ set_breakpoint (char *address, char *condition,
0);
}
/* Adjust SAL to the first instruction past the function prologue.
The end of the prologue is determined using the line table from
the debugging information.
If SAL is already past the prologue, then do nothing. */
static void
skip_prologue_sal (struct symtab_and_line *sal)
{
struct symbol *sym = find_pc_function (sal->pc);
struct symtab_and_line start_sal;
if (sym == NULL)
return;
start_sal = find_function_start_sal (sym, 1);
if (sal->pc < start_sal.pc)
*sal = start_sal;
}
/* Helper function for break_command_1 and disassemble_command. */
@ -5496,6 +5515,11 @@ resolve_sal_pc (struct symtab_and_line *sal)
error (_("No line %d in file \"%s\"."),
sal->line, sal->symtab->filename);
sal->pc = pc;
/* If this SAL corresponds to a breakpoint inserted using
a line number, then skip the function prologue if necessary. */
if (sal->explicit_line)
skip_prologue_sal (sal);
}
if (sal->section == 0 && sal->symtab != NULL)