/* Fill in the fpu structure for a core dump.. */
 int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r)
 {
-       memcpy(r, ¤t->thread.fpu, sizeof(current->thread.fpu));
+       int i;
+
+       for (i = 0; i < NUM_FPU_REGS; i++)
+               memcpy(&r[i], ¤t->thread.fpu.fpr[i], sizeof(*r));
+
+       memcpy(&r[NUM_FPU_REGS], ¤t->thread.fpu.fcr31,
+              sizeof(current->thread.fpu.fcr31));
 
        return 1;
 }
 
 int dump_task_fpu(struct task_struct *t, elf_fpregset_t *fpr)
 {
-       memcpy(fpr, &t->thread.fpu, sizeof(current->thread.fpu));
+       int i;
+
+       for (i = 0; i < NUM_FPU_REGS; i++)
+               memcpy(&fpr[i], &t->thread.fpu.fpr[i], sizeof(*fpr));
+
+       memcpy(&fpr[NUM_FPU_REGS], &t->thread.fpu.fcr31,
+              sizeof(t->thread.fpu.fcr31));
 
        return 1;
 }