Fix for incorrect breakpoint set in case of clang compiled binary

This commit is contained in:
Karthik Bhat 2012-12-04 07:43:19 +00:00
parent e9eb0d14a7
commit 56bf074305
3 changed files with 39 additions and 0 deletions

View file

@ -1582,7 +1582,23 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
CORE_ADDR pc;
gdb_byte op;
int i;
CORE_ADDR func_addr;
if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
{
CORE_ADDR post_prologue_pc
= skip_prologue_using_sal (gdbarch, func_addr);
struct symtab *s = find_pc_symtab (func_addr);
/* Clang always emits a line note before the prologue and another
one after. We trust clang to emit usable line notes. */
if (post_prologue_pc
&& (s != NULL
&& s->producer != NULL
&& strncmp (s->producer, "clang ", sizeof ("clang ") - 1) == 0))
return max (start_pc, post_prologue_pc);
}
cache.locals = -1;
pc = i386_analyze_prologue (gdbarch, start_pc, 0xffffffff, &cache);
if (cache.locals < 0)