patches/linux/2.4.26/linux-2.4.21-allow-gcc-3.3-arm-lib.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue May 01 16:49:15 2007 +0000 (2007-05-01)
changeset 56 07a6a48962b7
permissions -rw-r--r--
Merge patches sent by Robert P. J. Day <rpjday@mindspring.com>.
Warning: the buildroot folks purposedly removed the skip-comment patch but didn't really said why. Keeping it for the sake of having it in svn just in case (removing it will be easier thant not having it at all).
yann@1
     1
Reconstructed from http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2003-December/018647.html
yann@1
     2
See also http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=1540
yann@1
     3
yann@1
     4
Message-ID: <DDA001.8070502@de.bosch.com>
yann@1
     5
Subject: Help cross compiling the kernel for arm.
yann@1
     6
From: dirk.behme at de.bosch.com
yann@1
     7
yann@1
     8
Aitor Garcia wrote:
yann@1
     9
> Hello everybody,
yann@1
    10
> 
yann@1
    11
> I am having problems cross compiling the kernel for arm.
yann@1
    12
> 
yann@1
    13
> This is the error message I get:
yann@1
    14
> 
yann@1
    15
> blkpg.c: In function `blk_ioctl':
yann@1
    16
> blkpg.c:252: error: asm-specifier for variable `__r1' conflicts with asm clobber list
yann@1
    17
> blkpg.c:252: confused by earlier errors, bailing out make[3]: *** [blkpg.o] Error 1
yann@1
    18
> make[3]: Leaving directory `/root/toolchain/kernel-arm/linux-2.4.21/drivers/block'
yann@1
    19
> make[2]: *** [first_rule] Error 2
yann@1
    20
> make[2]: Leaving directory `/root/toolchain/kernel-arm/linux-2.4.21/drivers/block'
yann@1
    21
> make[1]: *** [_subdir_block] Error 2
yann@1
    22
> make[1]: Leaving directory `/root/toolchain/kernel-arm/linux-2.4.21/drivers'
yann@1
    23
> make: *** [_dir_drivers] Error 2
yann@1
    24
> 
yann@1
    25
> These are the toolchain versions I am using:
yann@1
    26
>  host=i686-pc-linux-gnu
yann@1
    27
>  binutils_version=2.14           
yann@1
    28
>  gcc_version=3.3.2                
yann@1
    29
>  glibc_version=2.3.2             
yann@1
    30
>  kernel_version=2.4.21  
yann@1
    31
> and applied the kernel patch for arm. 2.4.21-rmk1.
yann@1
    32
> ... 
yann@1
    33
> I have also seen references to this bug in ARM linux
yann@1
    34
> Developer. Patch Number = 1540. But this patch is
yann@1
    35
> classified as discarded.
yann@1
    36
yann@1
    37
You need something like 1540 to compile 2.4.21 with gcc 3.3.2. 1540 was 
yann@1
    38
discarded because of AFLAGS change.
yann@1
    39
yann@1
    40
Try the attachment.
yann@1
    41
yann@1
    42
Dirk
yann@1
    43
-------------- next part --------------
yann@1
    44
--- linux/arch/arm/lib/getuser.S.orig	Mon Nov 17 07:41:51 2003
yann@1
    45
+++ linux/arch/arm/lib/getuser.S	Mon Nov 17 07:43:16 2003
yann@1
    46
@@ -17,7 +17,7 @@
yann@1
    47
  *
yann@1
    48
  * Inputs:	r0 contains the address
yann@1
    49
  * Outputs:	r0 is the error code
yann@1
    50
- *		r1, r2 contains the zero-extended value
yann@1
    51
+ *		r1, ip contains the zero-extended value
yann@1
    52
  *		lr corrupted
yann@1
    53
  *
yann@1
    54
  * No other registers must be altered.  (see include/asm-arm/uaccess.h
yann@1
    55
@@ -42,14 +42,14 @@ __get_user_1:
yann@1
    56
 
yann@1
    57
 	.global	__get_user_2
yann@1
    58
 __get_user_2:
yann@1
    59
-	bic	r2, sp, #0x1f00
yann@1
    60
-	bic	r2, r2, #0x00ff
yann@1
    61
-	ldr	r2, [r2, #TSK_ADDR_LIMIT]
yann@1
    62
-	sub	r2, r2, #2
yann@1
    63
-	cmp	r0, r2
yann@1
    64
+	bic	ip, sp, #0x1f00
yann@1
    65
+	bic	ip, ip, #0x00ff
yann@1
    66
+	ldr	ip, [ip, #TSK_ADDR_LIMIT]
yann@1
    67
+	sub	ip, ip, #2
yann@1
    68
+	cmp	r0, ip
yann@1
    69
 2:	ldrlsbt	r1, [r0], #1
yann@1
    70
-3:	ldrlsbt	r2, [r0]
yann@1
    71
-	orrls	r1, r1, r2, lsl #8
yann@1
    72
+3:	ldrlsbt	ip, [r0]
yann@1
    73
+	orrls	r1, r1, ip, lsl #8
yann@1
    74
 	movls	r0, #0
yann@1
    75
 	movls	pc, lr
yann@1
    76
 	b	__get_user_bad
yann@1
    77
@@ -68,20 +68,20 @@ __get_user_4:
yann@1
    78
 
yann@1
    79
 	.global	__get_user_8
yann@1
    80
 __get_user_8:
yann@1
    81
-	bic	r2, sp, #0x1f00
yann@1
    82
-	bic	r2, r2, #0x00ff
yann@1
    83
-	ldr	r2, [r2, #TSK_ADDR_LIMIT]
yann@1
    84
-	sub	r2, r2, #8
yann@1
    85
-	cmp	r0, r2
yann@1
    86
+	bic	ip, sp, #0x1f00
yann@1
    87
+	bic	ip, ip, #0x00ff
yann@1
    88
+	ldr	ip, [ip, #TSK_ADDR_LIMIT]
yann@1
    89
+	sub	ip, ip, #8
yann@1
    90
+	cmp	r0, ip
yann@1
    91
 5:	ldrlst	r1, [r0], #4
yann@1
    92
-6:	ldrlst	r2, [r0]
yann@1
    93
+6:	ldrlst	ip, [r0]
yann@1
    94
 	movls	r0, #0
yann@1
    95
 	movls	pc, lr
yann@1
    96
 
yann@1
    97
 	/* fall through */
yann@1
    98
 
yann@1
    99
 __get_user_bad_8:
yann@1
   100
-	mov	r2, #0
yann@1
   101
+	mov	ip, #0
yann@1
   102
 __get_user_bad:
yann@1
   103
 	mov	r1, #0
yann@1
   104
 	mov	r0, #-14
yann@1
   105
--- linux/arch/arm/lib/putuser.S.orig	Mon Nov 17 07:41:57 2003
yann@1
   106
+++ linux/arch/arm/lib/putuser.S	Mon Nov 17 07:42:26 2003
yann@1
   107
@@ -16,7 +16,7 @@
yann@1
   108
  * __put_user_X
yann@1
   109
  *
yann@1
   110
  * Inputs:	r0 contains the address
yann@1
   111
- *		r1, r2 contains the value
yann@1
   112
+ *		r1, ip contains the value
yann@1
   113
  * Outputs:	r0 is the error code
yann@1
   114
  *		lr corrupted
yann@1
   115
  *
yann@1
   116
@@ -30,11 +30,11 @@
yann@1
   117
 
yann@1
   118
 	.global	__put_user_1
yann@1
   119
 __put_user_1:
yann@1
   120
-	bic	r2, sp, #0x1f00
yann@1
   121
-	bic	r2, r2, #0x00ff
yann@1
   122
-	ldr	r2, [r2, #TSK_ADDR_LIMIT]
yann@1
   123
-	sub	r2, r2, #1
yann@1
   124
-	cmp	r0, r2
yann@1
   125
+	bic	ip, sp, #0x1f00
yann@1
   126
+	bic	ip, ip, #0x00ff
yann@1
   127
+	ldr	ip, [ip, #TSK_ADDR_LIMIT]
yann@1
   128
+	sub	ip, ip, #1
yann@1
   129
+	cmp	r0, ip
yann@1
   130
 1:	strlsbt	r1, [r0]
yann@1
   131
 	movls	r0, #0
yann@1
   132
 	movls	pc, lr
yann@1
   133
@@ -42,11 +42,11 @@ __put_user_1:
yann@1
   134
 
yann@1
   135
 	.global	__put_user_2
yann@1
   136
 __put_user_2:
yann@1
   137
-	bic	r2, sp, #0x1f00
yann@1
   138
-	bic	r2, r2, #0x00ff
yann@1
   139
-	ldr	r2, [r2, #TSK_ADDR_LIMIT]
yann@1
   140
-	sub	r2, r2, #2
yann@1
   141
-	cmp	r0, r2
yann@1
   142
+	bic	ip, sp, #0x1f00
yann@1
   143
+	bic	ip, ip, #0x00ff
yann@1
   144
+	ldr	ip, [ip, #TSK_ADDR_LIMIT]
yann@1
   145
+	sub	ip, ip, #2
yann@1
   146
+	cmp	r0, ip
yann@1
   147
 2:	strlsbt	r1, [r0], #1
yann@1
   148
 	movls	r1, r1, lsr #8
yann@1
   149
 3:	strlsbt	r1, [r0]
yann@1
   150
@@ -56,11 +56,11 @@ __put_user_2:
yann@1
   151
 
yann@1
   152
 	.global	__put_user_4
yann@1
   153
 __put_user_4:
yann@1
   154
-	bic	r2, sp, #0x1f00
yann@1
   155
-	bic	r2, r2, #0x00ff
yann@1
   156
-	ldr	r2, [r2, #TSK_ADDR_LIMIT]
yann@1
   157
-	sub	r2, r2, #4
yann@1
   158
-	cmp	r0, r2
yann@1
   159
+	bic	ip, sp, #0x1f00
yann@1
   160
+	bic	ip, ip, #0x00ff
yann@1
   161
+	ldr	ip, [ip, #TSK_ADDR_LIMIT]
yann@1
   162
+	sub	ip, ip, #4
yann@1
   163
+	cmp	r0, ip
yann@1
   164
 4:	strlst	r1, [r0]
yann@1
   165
 	movls	r0, #0
yann@1
   166
 	movls	pc, lr
yann@1
   167
@@ -74,7 +74,7 @@ __put_user_8:
yann@1
   168
 	sub	ip, ip, #8
yann@1
   169
 	cmp	r0, ip
yann@1
   170
 5:	strlst	r1, [r0], #4
yann@1
   171
-6:	strlst	r2, [r0]
yann@1
   172
+6:	strlst	ip, [r0]
yann@1
   173
 	movls	r0, #0
yann@1
   174
 	movls	pc, lr
yann@1
   175
 
yann@1
   176
--- linux/include/asm-arm/uaccess.h.orig	Mon Nov 17 07:41:04 2003
yann@1
   177
+++ linux/include/asm-arm/uaccess.h	Mon Nov 17 07:41:37 2003
yann@1
   178
@@ -86,7 +86,7 @@ extern int __get_user_bad(void);
yann@1
   179
 			__get_user_x(__r1, __p, __e, 1, "lr");		\
yann@1
   180
 	       		break;						\
yann@1
   181
 		case 2:							\
yann@1
   182
-			__get_user_x(__r1, __p, __e, 2, "r2", "lr");	\
yann@1
   183
+			__get_user_x(__r1, __p, __e, 2, "ip", "lr");	\
yann@1
   184
 			break;						\
yann@1
   185
 		case 4:							\
yann@1
   186
 	       		__get_user_x(__r1, __p, __e, 4, "lr");		\
yann@1
   187
@@ -122,13 +122,13 @@ extern int __put_user_bad(void);
yann@1
   188
 		register int __e asm("r0");				\
yann@1
   189
 		switch (sizeof(*(p))) {					\
yann@1
   190
 		case 1:							\
yann@1
   191
-			__put_user_x(__r1, __p, __e, 1, "r2", "lr");	\
yann@1
   192
+			__put_user_x(__r1, __p, __e, 1, "ip", "lr");	\
yann@1
   193
 			break;						\
yann@1
   194
 		case 2:							\
yann@1
   195
-			__put_user_x(__r1, __p, __e, 2, "r2", "lr");	\
yann@1
   196
+			__put_user_x(__r1, __p, __e, 2, "ip", "lr");	\
yann@1
   197
 			break;						\
yann@1
   198
 		case 4:							\
yann@1
   199
-			__put_user_x(__r1, __p, __e, 4, "r2", "lr");	\
yann@1
   200
+			__put_user_x(__r1, __p, __e, 4, "ip", "lr");	\
yann@1
   201
 			break;						\
yann@1
   202
 		case 8:							\
yann@1
   203
 			__put_user_x(__r1, __p, __e, 8, "ip", "lr");	\