diff options
author | Jerome Guitton <guitton@adacore.com> | 2009-06-19 15:14:10 +0000 |
---|---|---|
committer | Jerome Guitton <guitton@adacore.com> | 2009-06-19 15:14:10 +0000 |
commit | 8f93967d55c76daa32f6291e8c8fdb6a81358b4c (patch) | |
tree | 60fd4d2b7ffc5cf93c56050259275a1337478d1c | |
parent | 4f12f78dc4d0bbc4218a75a85b7ca9bdd86beb2e (diff) | |
download | gdb-8f93967d55c76daa32f6291e8c8fdb6a81358b4c.tar.gz |
* breakpoint.c (expand_line_sal_maybe): When explicit_line,
skip prologue on each sals.
(skip_prologue_sal): Return explicit_line and explicit_pc
unmodified.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/breakpoint.c | 21 |
2 files changed, 26 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bdad4085bba..ddaaff47b56 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2009-06-19 Jerome Guitton <guitton@adacore.com> + + * breakpoint.c (expand_line_sal_maybe): When explicit_line, + skip prologue on each sals. + (skip_prologue_sal): Return explicit_line and explicit_pc + unmodified. + 2009-06-19 Tristan Gingold <gingold@adacore.com> * darwin-nat.c (_initialize_darwin_inferior): Remove commented-out diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 99909e75096..c32ad9067f5 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -207,6 +207,9 @@ static void disable_trace_command (char *, int); static void trace_pass_command (char *, int); +static void skip_prologue_sal (struct symtab_and_line *sal); + + /* Flag indicating that a command has proceeded the inferior past the current breakpoint. */ @@ -5436,6 +5439,15 @@ expand_line_sal_maybe (struct symtab_and_line sal) } } } + else + { + for (i = 0; i < expanded.nelts; ++i) + { + /* If this SAL corresponds to a breakpoint inserted using a + line number, then skip the function prologue if necessary. */ + skip_prologue_sal (&expanded.sals[i]); + } + } if (expanded.nelts <= 1) @@ -5903,7 +5915,8 @@ set_breakpoint (char *address, char *condition, /* 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. + the debugging information. explicit_pc and explicit_line are + not modified. If SAL is already past the prologue, then do nothing. */ @@ -5918,7 +5931,11 @@ skip_prologue_sal (struct symtab_and_line *sal) start_sal = find_function_start_sal (sym, 1); if (sal->pc < start_sal.pc) - *sal = start_sal; + { + start_sal.explicit_line = sal->explicit_line; + start_sal.explicit_pc = sal->explicit_pc; + *sal = start_sal; + } } /* Helper function for break_command_1 and disassemble_command. */ |