From: NIIBE Y. <gn...@m1...> - 2001-10-01 02:02:58
|
Added __put_user_u64 and inclusion of <linux/personality.h>. I'll commit this change with 2.4.10. Index: include/asm-sh/uaccess.h =================================================================== RCS file: /cvsroot/linuxsh/kernel/include/asm-sh/uaccess.h,v retrieving revision 1.12 diff -u -r1.12 uaccess.h --- include/asm-sh/uaccess.h 2001/07/27 06:09:47 1.12 +++ include/asm-sh/uaccess.h 2001/10/01 01:51:18 @@ -150,6 +150,7 @@ case 1: __put_user_asm("b"); break; \ case 2: __put_user_asm("w"); break; \ case 4: __put_user_asm("l"); break; \ +case 8: __put_user_u64(__pu_val,__pu_addr,__pu_err); break; \ default: __put_user_unknown(); break; \ } __pu_err; }) @@ -165,6 +166,7 @@ case 1: __put_user_asm("b"); break; \ case 2: __put_user_asm("w"); break; \ case 4: __put_user_asm("l"); break; \ +case 8: __put_user_u64(__pu_val,__pu_addr,__pu_err); break; \ default: __put_user_unknown(); break; \ } } __pu_err; }) @@ -189,6 +191,53 @@ :"=&r" (__pu_err) \ :"r" (__pu_val), "m" (__m(__pu_addr)), "i" (-EFAULT) \ :"memory"); }) + +#if defined(__LITTLE_ENDIAN__) +#define __put_user_u64(val,addr,retval) \ +({ \ +__asm__ __volatile__( \ + "1:\n\t" \ + "mov.l %R1,%2\n\t" \ + "mov.l %S1,%T2\n\t" \ + "mov #0,%0\n" \ + "2:\n" \ + ".section .fixup,\"ax\"\n" \ + "3:\n\t" \ + "nop\n\t" \ + "mov.l 4f,%0\n\t" \ + "jmp @%0\n\t" \ + " mov %3,%0\n" \ + "4: .long 2b\n\t" \ + ".previous\n" \ + ".section __ex_table,\"a\"\n\t" \ + ".long 1b, 3b\n\t" \ + ".previous" \ + : "=r" (retval) \ + : "r" (val), "m" (__m(addr)), "i" (-EFAULT) \ + : "memory"); }) +#else +({ \ +__asm__ __volatile__( \ + "1:\n\t" \ + "mov.l %S1,%2\n\t" \ + "mov.l %R1,%T2\n\t" \ + "mov #0,%0\n" \ + "2:\n" \ + ".section .fixup,\"ax\"\n" \ + "3:\n\t" \ + "nop\n\t" \ + "mov.l 4f,%0\n\t" \ + "jmp @%0\n\t" \ + " mov %3,%0\n" \ + "4: .long 2b\n\t" \ + ".previous\n" \ + ".section __ex_table,\"a\"\n\t" \ + ".long 1b, 3b\n\t" \ + ".previous" \ + : "=r" (retval) \ + : "r" (val), "m" (__m(addr)), "i" (-EFAULT) \ + : "memory"); }) +#endif extern void __put_user_unknown(void); Index: arch/sh/kernel/signal.c =================================================================== RCS file: /cvsroot/linuxsh/kernel/arch/sh/kernel/signal.c,v retrieving revision 1.15 diff -u -r1.15 signal.c --- arch/sh/kernel/signal.c 2001/01/29 00:39:12 1.15 +++ arch/sh/kernel/signal.c 2001/10/01 01:49:24 @@ -21,6 +21,7 @@ #include <linux/ptrace.h> #include <linux/unistd.h> #include <linux/stddef.h> +#include <linux/personality.h> #include <asm/ucontext.h> #include <asm/uaccess.h> #include <asm/pgtable.h> -- |