diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/hppa-tdep.c | 19 |
2 files changed, 21 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 69d3ba7..19609c6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2006-03-30 Randolph Chung <tausq@debian.org> + + * hppa-tdep.c (hppa_find_unwind_entry_in_block): New. + (hppa_frame_cache): Use new function to find unwind entry. + (hppa_frame_this_id): Likewise. + (hppa_frame_unwind_sniffer): Likewise. + 2006-03-29 Daniel Jacobowitz <dan@codesourcery.com> * NEWS: Mention the removal of NLM. diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index f1ae88c..50dac1b 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -1782,6 +1782,17 @@ hppa_skip_prologue (CORE_ADDR pc) return (skip_prologue_hard_way (pc, 1)); } +/* Return an unwind entry that falls within the frame's code block. */ +static struct unwind_table_entry * +hppa_find_unwind_entry_in_block (struct frame_info *f) +{ + CORE_ADDR pc; + + pc = frame_unwind_address_in_block (f); + pc = gdbarch_addr_bits_remove (get_frame_arch (f), pc); + return find_unwind_entry (pc); +} + struct hppa_frame_cache { CORE_ADDR base; @@ -1817,7 +1828,7 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache) cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); /* Yow! */ - u = find_unwind_entry (frame_pc_unwind (next_frame)); + u = hppa_find_unwind_entry_in_block (next_frame); if (!u) { if (hppa_debug) @@ -2197,7 +2208,7 @@ hppa_frame_this_id (struct frame_info *next_frame, void **this_cache, struct unwind_table_entry *u; info = hppa_frame_cache (next_frame, this_cache); - u = find_unwind_entry (pc); + u = hppa_find_unwind_entry_in_block (next_frame); (*this_id) = frame_id_build (info->base, u->region_start); } @@ -2224,9 +2235,7 @@ static const struct frame_unwind hppa_frame_unwind = static const struct frame_unwind * hppa_frame_unwind_sniffer (struct frame_info *next_frame) { - CORE_ADDR pc = frame_pc_unwind (next_frame); - - if (find_unwind_entry (pc)) + if (hppa_find_unwind_entry_in_block (next_frame)) return &hppa_frame_unwind; return NULL; |