* spu-tdep.c (spu_frame_unwind_cache): Do not error if
authorUlrich Weigand <uweigand@de.ibm.com>
Sat, 12 Jul 2008 22:42:52 +0000 (22:42 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Sat, 12 Jul 2008 22:42:52 +0000 (22:42 +0000)
backchain is unreadable.

gdb/ChangeLog
gdb/spu-tdep.c

index a1b64f83f323db67b82d4eddd2cbda63e68c55c2..9ca905b218f132aa3a78f8c7fb804d317995a180 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-12  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * spu-tdep.c (spu_frame_unwind_cache): Do not error if
+       backchain is unreadable.
+
 2008-07-12  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * spu-linux-nat.c: Include "gdbthread.h".
index aaa98797070cdb46126b9b159dd87a4d746923ac..fe04959e04c19fdac832f64e74cfa80e6b185e52 100644 (file)
@@ -888,15 +888,17 @@ spu_frame_unwind_cache (struct frame_info *this_frame,
   /* Otherwise, fall back to reading the backchain link.  */
   else
     {
-      CORE_ADDR reg, backchain;
+      CORE_ADDR reg;
+      LONGEST backchain;
+      int status;
 
       /* Get the backchain.  */
       reg = get_frame_register_unsigned (this_frame, SPU_SP_REGNUM);
-      backchain = read_memory_unsigned_integer (reg, 4);
+      status = safe_read_memory_integer (reg, 4, &backchain);
 
       /* A zero backchain terminates the frame chain.  Also, sanity
          check against the local store size limit.  */
-      if (backchain != 0 && backchain < SPU_LS_SIZE)
+      if (status && backchain > 0 && backchain < SPU_LS_SIZE)
        {
          /* Assume the link register is saved into its slot.  */
          if (backchain + 16 < SPU_LS_SIZE)