aboutsummaryrefslogtreecommitdiffstats
path: root/linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch
diff options
context:
space:
mode:
Diffstat (limited to 'linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch')
-rw-r--r--linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch b/linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch
index e69de29bb2..7c3e538e1e 100644
--- a/linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch
+++ b/linux/nslu2-linksys-2.4.22/gcc-registerparanoia.patch
@@ -0,0 +1,57 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux-2.4.22/include/asm-arm/system.h~gcc-registerparanoia 2004-09-08 19:45:34.000000000 -0500
++++ linux-2.4.22/include/asm-arm/system.h 2004-09-08 19:53:01.000000000 -0500
+@@ -3,6 +3,15 @@
+
+ #ifdef __KERNEL__
+
++/*
++ * This is used to ensure the compiler did actually allocate the register we
++ * asked it for some inline assembly sequences. Apparently we can't trust
++ * the compiler from one version to another so a bit of paranoia won't hurt.
++ * This string is meant to be concatenated with the inline asm string and
++ * will cause compilation to stop on mismatch.
++ */
++#define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t"
++
+ #include <linux/config.h>
+ #include <linux/kernel.h>
+
+--- linux-2.4.22/include/asm-arm/uaccess.h~gcc-registerparanoia 2004-09-08 19:45:34.000000000 -0500
++++ linux-2.4.22/include/asm-arm/uaccess.h 2004-09-08 19:59:20.000000000 -0500
+@@ -6,6 +6,7 @@
+ */
+ #include <linux/sched.h>
+ #include <asm/errno.h>
++#include <asm/system.h>
+
+ #define VERIFY_READ 0
+ #define VERIFY_WRITE 1
+@@ -71,7 +72,9 @@
+ extern int __get_user_bad(void);
+
+ #define __get_user_x(__r1,__p,__e,__s,__i...) \
+- __asm__ __volatile__ ("bl __get_user_" #__s \
++ __asm__ __volatile__ ( \
++ __asmeq("%0", "r0") __asmeq("%1", "r1") \
++ "bl __get_user_" #__s \
+ : "=&r" (__e), "=r" (__r1) \
+ : "0" (__p) \
+ : __i)
+@@ -110,7 +113,9 @@
+ extern int __put_user_bad(void);
+
+ #define __put_user_x(__r1,__p,__e,__s,__i...) \
+- __asm__ __volatile__ ("bl __put_user_" #__s \
++ __asm__ __volatile__ ( \
++ __asmeq("%0", "r0") __asmeq("%2", "r1") \
++ "bl __put_user_" #__s \
+ : "=&r" (__e) \
+ : "0" (__p), "r" (__r1) \
+ : __i)
+--- linux-2.4.22/-~gcc-registerparanoia
++++ linux-2.4.22/-