2004-12-07 Randolph Chung <tausq@debian.org>
authorRandolph Chung <tausq@debian.org>
Wed, 8 Dec 2004 01:44:02 +0000 (01:44 +0000)
committerRandolph Chung <tausq@debian.org>
Wed, 8 Dec 2004 01:44:02 +0000 (01:44 +0000)
* 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.

gdb/ChangeLog
gdb/hppa-tdep.c

index 6ef5c2949def2544fdf4422bc71e426b1efc27a0..a337deaf48f7a7fb3750d00eb7c4b69c56bb24c4 100644 (file)
@@ -1,3 +1,11 @@
+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.
index 3bd058d9a907a6d94a8bbb91c02cbedbab1815bc..ae7c519240978e762e66ec815ffc191598405afe 100644 (file)
@@ -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 = {