summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandolph Chung <tausq@debian.org>2004-12-08 01:44:02 +0000
committerRandolph Chung <tausq@debian.org>2004-12-08 01:44:02 +0000
commit1c76144205064fc9c4ac99ef90ed0d899fb8be9a (patch)
tree5a9edc7557bb202a5dbda04cc8753af82806c2ae
parented5d3a226a791cc1b207882d7afd3a3e9856377c (diff)
downloadgdb-1c76144205064fc9c4ac99ef90ed0d899fb8be9a.tar.gz
2004-12-07 Randolph Chung <tausq@debian.org>
* hppa-tdep.c (hppa_stub_Frame_unwind_cache): Stop unwinding if unwinding from a frame with pc == 0. (hppa_stub_frame_this_id): Likewise. (hppa_stub_frame_prev_register): Only provide real values if the frame cache is not NULL.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/hppa-tdep.c18
2 files changed, 23 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6ef5c2949de..a337deaf48f 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2004-12-07 Randolph Chung <tausq@debian.org>
+ * hppa-tdep.c (hppa_stub_Frame_unwind_cache): Stop unwinding if
+ unwinding from a frame with pc == 0.
+ (hppa_stub_frame_this_id): Likewise.
+ (hppa_stub_frame_prev_register): Only provide real values if the frame
+ cache is not NULL.
+
+2004-12-07 Randolph Chung <tausq@debian.org>
+
* solib-som.c: New file.
* solib-som.h: New file.
* solib-pa64.c: New file.
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 3bd058d9a90..ae7c5192409 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -2092,6 +2092,9 @@ hppa_stub_frame_unwind_cache (struct frame_info *next_frame,
if (*this_cache)
return *this_cache;
+ if (frame_pc_unwind (next_frame) == 0)
+ return NULL;
+
info = FRAME_OBSTACK_ZALLOC (struct hppa_stub_unwind_cache);
*this_cache = info;
info->saved_regs = trad_frame_alloc_saved_regs (next_frame);
@@ -2126,7 +2129,11 @@ hppa_stub_frame_this_id (struct frame_info *next_frame,
{
struct hppa_stub_unwind_cache *info
= hppa_stub_frame_unwind_cache (next_frame, this_prologue_cache);
- *this_id = frame_id_build (info->base, frame_pc_unwind (next_frame));
+
+ if (info)
+ *this_id = frame_id_build (info->base, frame_func_unwind (next_frame));
+ else
+ *this_id = null_frame_id;
}
static void
@@ -2138,8 +2145,13 @@ hppa_stub_frame_prev_register (struct frame_info *next_frame,
{
struct hppa_stub_unwind_cache *info
= hppa_stub_frame_unwind_cache (next_frame, this_prologue_cache);
- hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum,
- optimizedp, lvalp, addrp, realnump, valuep);
+
+ if (info)
+ hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum,
+ optimizedp, lvalp, addrp, realnump,
+ valuep);
+ else
+ error ("Requesting registers from null frame.\n");
}
static const struct frame_unwind hppa_stub_frame_unwind = {