* tilegx-tdep.c (tilegx_analyze_prologue): Limit bundle reading
     to END_ADDR.
     (tilegx_skip_prologue): Limit prologue analysis to section end
This commit is contained in:
Jiong Wang 2013-03-02 01:34:40 +00:00
parent 0f4bfba480
commit d79e58d83c
2 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2013-03-01 Jiong Wang <jiwang@tilera.com>
Pedro Alves <palves@redhat.com>
* tilegx-tdep.c (tilegx_analyze_prologue): Limit bundle reading
to END_ADDR.
(tilegx_skip_prologue): Limit prologue analysis to section end.
2013-03-01 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2loc.c (call_site_find_chain_1): New variable save_callee_pc,

View File

@ -433,6 +433,8 @@ tilegx_analyze_prologue (struct gdbarch* gdbarch,
if (instbuf_size > size_on_same_page)
instbuf_size = size_on_same_page;
instbuf_size = min (instbuf_size, (end_addr - next_addr));
instbuf_start = next_addr;
status = safe_frame_unwind_memory (next_frame, instbuf_start,
@ -745,7 +747,8 @@ tilegx_analyze_prologue (struct gdbarch* gdbarch,
static CORE_ADDR
tilegx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
{
CORE_ADDR func_start;
CORE_ADDR func_start, end_pc;
struct obj_section *s;
/* This is the preferred method, find the end of the prologue by
using the debugging information. */
@ -758,10 +761,16 @@ tilegx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
return max (start_pc, post_prologue_pc);
}
/* Don't straddle a section boundary. */
s = find_pc_section (start_pc);
end_pc = start_pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES;
if (s != NULL)
end_pc = min (end_pc, obj_section_endaddr (s));
/* Otherwise, try to skip prologue the hard way. */
return tilegx_analyze_prologue (gdbarch,
start_pc,
start_pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES,
end_pc,
NULL, NULL);
}