Index: gdb/arm-bsd-tdep.c
--- gdb/arm-bsd-tdep.c.orig
+++ gdb/arm-bsd-tdep.c
@@ -30,15 +30,12 @@
 #define ARMBSD_SIZEOF_GREGS	(17 * 4)
 
 /* Sizeof `struct fpreg' in <machine/reg.h.  */
-#define ARMBSD_SIZEOF_FPREGS	((1 + (8 * 3)) * 4)
+#define ARMBSD_SIZEOF_FPREGS	(32 * 8 + 4 + 4)
 
 static int
 armbsd_fpreg_offset (int regnum)
 {
-  if (regnum == ARM_FPS_REGNUM)
-    return 0;
-
-  return 4 + (regnum - ARM_F0_REGNUM) * 12;
+  return (regnum - ARM_D0_REGNUM) * 8;
 }
 
 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
@@ -55,7 +52,7 @@ armbsd_supply_fpregset (const struct regset *regset,
 
   gdb_assert (len >= ARMBSD_SIZEOF_FPREGS);
 
-  for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
+  for (i = ARM_D0_REGNUM; i <= ARM_FPSCR_REGNUM; i++)
     {
       if (regnum == i || regnum == -1)
 	regcache->raw_supply (i, regs + armbsd_fpreg_offset (i));
@@ -83,7 +80,7 @@ armbsd_supply_gregset (const struct regset *regset,
     }
 
   if (regnum == ARM_PS_REGNUM || regnum == -1)
-    regcache->raw_supply (i, regs + 16 * 4);
+    regcache->raw_supply (ARM_PS_REGNUM, regs + 16 * 4);
 
   if (len >= ARMBSD_SIZEOF_GREGS + ARMBSD_SIZEOF_FPREGS)
     {
