Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / asm-s390 / elf.h
index 4368a55..710646e 100644 (file)
  * ELF register definitions..
  */
 
+#include <linux/sched.h>       /* for task_struct */
 #include <asm/ptrace.h>
 #include <asm/user.h>
+#include <asm/system.h>                /* for save_access_regs */
 
 
 typedef s390_fp_regs elf_fpregset_t;
@@ -152,6 +154,7 @@ typedef s390_regs elf_gregset_t;
 static inline int dump_regs(struct pt_regs *ptregs, elf_gregset_t *regs)
 {
        memcpy(&regs->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs));
+       save_access_regs(regs->acrs);
        regs->orig_gpr2 = ptregs->orig_gpr2;
        return 1;
 }
@@ -160,8 +163,10 @@ static inline int dump_regs(struct pt_regs *ptregs, elf_gregset_t *regs)
 
 static inline int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
 {
-       dump_regs(__KSTK_PTREGS(tsk), regs);
+       struct pt_regs *ptregs = task_pt_regs(tsk);
+       memcpy(&regs->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs));
        memcpy(regs->acrs, tsk->thread.acrs, sizeof(regs->acrs));
+       regs->orig_gpr2 = ptregs->orig_gpr2;
        return 1;
 }
 
@@ -169,7 +174,10 @@ static inline int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
 
 static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs)
 {
-       memcpy(fpregs, &tsk->thread.fp_regs, sizeof(elf_fpregset_t));
+       if (tsk == current)
+               save_fp_regs(fpregs);
+       else
+               memcpy(fpregs, &tsk->thread.fp_regs, sizeof(elf_fpregset_t));
        return 1;
 }