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"); \
|