From: James S. <jsi...@us...> - 2001-09-26 16:54:02
|
Update of /cvsroot/linux-mips/linux/include/asm-mips64 In directory usw-pr-cvs1:/tmp/cvs-serv28208 Modified Files: uaccess.h Log Message: Attempt at fixing register corruption. Index: uaccess.h =================================================================== RCS file: /cvsroot/linux-mips/linux/include/asm-mips64/uaccess.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- uaccess.h 2001/09/04 16:17:22 1.3 +++ uaccess.h 2001/09/26 16:53:59 1.4 @@ -221,105 +221,93 @@ #define __copy_to_user(to,from,n) \ ({ \ - void *__cu_to; \ - const void *__cu_from; \ - long __cu_len; \ + register void *__cu_to __asm__ ("$4"); \ + register const void *__cu_from __asm__ ("$5"); \ + register long __cu_len __asm__ ("$6"); \ \ __cu_to = (to); \ __cu_from = (from); \ __cu_len = (n); \ __asm__ __volatile__( \ - "move\t$4, %1\n\t" \ - "move\t$5, %2\n\t" \ - "move\t$6, %3\n\t" \ __MODULE_JAL(__copy_user) \ - "move\t%0, $6" \ - : "=r" (__cu_len) \ - : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ - : "$4", "$5", "$6", "$8", "$9", "$10", "$11", "$12", \ - "$15", "$24", "$31","memory"); \ + : "+r" (__cu_to), "+r" (__cu_from), "+r" (__cu_len) \ + : \ + : "$8", "$9", "$10", "$11", "$12", "$15", "$24", "$31", \ + "memory"); \ __cu_len; \ }) #define __copy_from_user(to,from,n) \ ({ \ - void *__cu_to; \ - const void *__cu_from; \ - long __cu_len; \ + register void *__cu_to __asm__ ("$4"); \ + register const void *__cu_from __asm__ ("$5"); \ + register long __cu_len __asm__ ("$6"); \ \ __cu_to = (to); \ __cu_from = (from); \ __cu_len = (n); \ __asm__ __volatile__( \ - "move\t$4, %1\n\t" \ - "move\t$5, %2\n\t" \ - "move\t$6, %3\n\t" \ ".set\tnoreorder\n\t" \ __MODULE_JAL(__copy_user) \ ".set\tnoat\n\t" \ - "daddu\t$1, %2, %3\n\t" \ + "daddu\t$1, %1, %2\n\t" \ ".set\tat\n\t" \ ".set\treorder\n\t" \ "move\t%0, $6" \ - : "=r" (__cu_len) \ - : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ - : "$4", "$5", "$6", "$8", "$9", "$10", "$11", "$12", \ - "$15", "$24", "$31","memory"); \ + : "+r" (__cu_to), "+r" (__cu_from), "+r" (__cu_len) \ + : \ + : "$8", "$9", "$10", "$11", "$12", "$15", "$24", "$31", \ + "memory"); \ __cu_len; \ }) #define copy_to_user(to,from,n) \ ({ \ - void *__cu_to; \ - const void *__cu_from; \ - long __cu_len; \ + register void *__cu_to __asm__ ("$4"); \ + register const void *__cu_from __asm__ ("$5"); \ + register long __cu_len __asm__ ("$6"); \ \ __cu_to = (to); \ __cu_from = (from); \ __cu_len = (n); \ if (access_ok(VERIFY_WRITE, __cu_to, __cu_len)) \ __asm__ __volatile__( \ - "move\t$4, %1\n\t" \ - "move\t$5, %2\n\t" \ - "move\t$6, %3\n\t" \ __MODULE_JAL(__copy_user) \ - "move\t%0, $6" \ - : "=r" (__cu_len) \ - : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ - : "$4", "$5", "$6", "$8", "$9", "$10", "$11", \ - "$12", "$15", "$24", "$31","memory"); \ + : "+r" (__cu_to), "+r" (__cu_from), \ + "+r" (__cu_len) \ + : \ + : "$8", "$9", "$10", "$11", "$12", "$15", \ + "$24", "$31","memory"); \ __cu_len; \ }) #define copy_from_user(to,from,n) \ ({ \ - void *__cu_to; \ - const void *__cu_from; \ - long __cu_len; \ + register void *__cu_to __asm__ ("$4"); \ + register const void *__cu_from __asm__ ("$5"); \ + register long __cu_len __asm__ ("$6"); \ \ __cu_to = (to); \ __cu_from = (from); \ __cu_len = (n); \ if (access_ok(VERIFY_READ, __cu_from, __cu_len)) \ __asm__ __volatile__( \ - "move\t$4, %1\n\t" \ - "move\t$5, %2\n\t" \ - "move\t$6, %3\n\t" \ ".set\tnoreorder\n\t" \ __MODULE_JAL(__copy_user) \ ".set\tnoat\n\t" \ - "daddu\t$1, %2, %3\n\t" \ + "daddu\t$1, %1, %2\n\t" \ ".set\tat\n\t" \ ".set\treorder\n\t" \ "move\t%0, $6" \ - : "=r" (__cu_len) \ - : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ - : "$4", "$5", "$6", "$8", "$9", "$10", "$11", \ - "$12", "$15", "$24", "$31","memory"); \ + : "+r" (__cu_to), "+r" (__cu_from), \ + "+r" (__cu_len) \ + : \ + : "$8", "$9", "$10", "$11", "$12", "$15", \ + "$24", "$31","memory"); \ __cu_len; \ }) -extern inline __kernel_size_t +static inline __kernel_size_t __clear_user(void *addr, __kernel_size_t size) { __kernel_size_t res; |