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] / arch / ia64 / ia32 / elfcore32.h
index 36f8d42..a47f63b 100644 (file)
@@ -9,6 +9,7 @@
 #define _ELFCORE32_H_
 
 #include <asm/intrinsics.h>
+#include <asm/uaccess.h>
 
 #define USE_ELF_CORE_DUMP 1
 
@@ -94,8 +95,7 @@ static inline void elf_core_copy_regs(elf_gregset_t *elfregs,
 static inline int elf_core_copy_task_regs(struct task_struct *t,
                                          elf_gregset_t* elfregs)
 {
-       struct pt_regs *pp = ia64_task_regs(t);
-       ELF_CORE_COPY_REGS((*elfregs), pp);
+       ELF_CORE_COPY_REGS((*elfregs), task_pt_regs(t));
        return 1;
 }
 
@@ -103,11 +103,15 @@ static inline int
 elf_core_copy_task_fpregs(struct task_struct *tsk, struct pt_regs *regs, elf_fpregset_t *fpu)
 {
        struct ia32_user_i387_struct *fpstate = (void*)fpu;
+       mm_segment_t old_fs;
 
-       if (!tsk->used_math)
+       if (!tsk_used_math(tsk))
                return 0;
-
-       save_ia32_fpstate(tsk, fpstate);
+       
+       old_fs = get_fs();
+       set_fs(KERNEL_DS);
+       save_ia32_fpstate(tsk, (struct ia32_user_i387_struct __user *) fpstate);
+       set_fs(old_fs);
 
        return 1;
 }
@@ -117,11 +121,15 @@ static inline int
 elf_core_copy_task_xfpregs(struct task_struct *tsk, elf_fpxregset_t *xfpu)
 {
        struct ia32_user_fxsr_struct *fpxstate = (void*) xfpu;
+       mm_segment_t old_fs;
 
-       if (!tsk->used_math)
+       if (!tsk_used_math(tsk))
                return 0;
 
-       save_ia32_fpxstate(tsk, fpxstate);
+       old_fs = get_fs();
+       set_fs(KERNEL_DS);
+       save_ia32_fpxstate(tsk, (struct ia32_user_fxsr_struct __user *) fpxstate);
+       set_fs(old_fs);
 
        return 1;
 }