2006-03-30 Randolph Chung <tausq@debian.org>
authorRandolph Chung <tausq@debian.org>
Thu, 30 Mar 2006 14:15:00 +0000 (14:15 +0000)
committerRandolph Chung <tausq@debian.org>
Thu, 30 Mar 2006 14:15:00 +0000 (14:15 +0000)
* 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
gdb/hppa-tdep.c

index 69d3ba775af2066536efc29ce13228e162147ecf..19609c6fd8ffc481aa3a3755b2eb700bf72524e5 100644 (file)
@@ -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.
index f1ae88c0bc222ce1f79b30afbbe29a8da86789e3..50dac1ba6076bf6900a736c42bf49b7a1b3396ad 100644 (file)
@@ -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;