Fix sigtramp cache code so that PPC register are read only if there is H/W.
authorPaul Gilliam <pgilliam@us.ibm.com>
Mon, 13 Nov 2006 17:37:36 +0000 (17:37 +0000)
committerPaul Gilliam <pgilliam@us.ibm.com>
Mon, 13 Nov 2006 17:37:36 +0000 (17:37 +0000)
gdb/ChangeLog
gdb/ppc-linux-tdep.c

index 3b807cb..dedde90 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-31  Paul Gilliam  <pgilliam@us.ibm.com>
+       * ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Don't futz with
+               the floating point registers if there aren't any.
+
 2006-11-12  Ben Harris  <bjh21@NetBSD.org>
 
        * arm-tdep.c (arm_unwind_pc): Use arm_addr_bits_remove.
index 5e1bc00..e10c614 100644 (file)
@@ -916,14 +916,16 @@ ppc_linux_sigtramp_cache (struct frame_info *next_frame,
   trad_frame_set_reg_addr (this_cache, tdep->ppc_cr_regnum,
                           gpregs + 38 * tdep->wordsize);
 
-  /* Floating point registers.  */
-  for (i = 0; i < 32; i++)
-    {
-      int regnum = i + FP0_REGNUM;
-      trad_frame_set_reg_addr (this_cache, regnum, fpregs + i * tdep->wordsize);
-    }
-  trad_frame_set_reg_addr (this_cache, tdep->ppc_fpscr_regnum,
-                          fpregs + 32 * tdep->wordsize);
+  if (ppc_floating_point_unit_p (gdbarch)) {
+         /* Floating point registers.  */
+         for (i = 0; i < 32; i++)
+         {
+                 int regnum = i + FP0_REGNUM;
+                 trad_frame_set_reg_addr (this_cache, regnum, fpregs + i * tdep->wordsize);
+         }
+         trad_frame_set_reg_addr (this_cache, tdep->ppc_fpscr_regnum,
+                         fpregs + 32 * tdep->wordsize);
+  }
   trad_frame_set_id (this_cache, frame_id_build (base, func));
 }