vserver 1.9.5.x5
[linux-2.6.git] / arch / ia64 / ia32 / elfcore32.h
index 36f8d42..b73b8b6 100644 (file)
@@ -9,6 +9,7 @@
 #define _ELFCORE32_H_
 
 #include <asm/intrinsics.h>
+#include <asm/uaccess.h>
 
 #define USE_ELF_CORE_DUMP 1
 
@@ -103,11 +104,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 +122,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;
 }