aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/hppa-tdep.c19
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;