From 29d375acb527bd5d09aa0a3e1040e632ad94319c Mon Sep 17 00:00:00 2001 From: Randolph Chung Date: Thu, 30 Mar 2006 14:15:00 +0000 Subject: [PATCH] 2006-03-30 Randolph Chung * 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. --- gdb/ChangeLog | 7 +++++++ gdb/hppa-tdep.c | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 69d3ba775af..19609c6fd8f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2006-03-30 Randolph Chung + + * 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 * NEWS: Mention the removal of NLM. diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index f1ae88c0bc2..50dac1ba607 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; -- 2.30.2