diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-04-19 05:15:03 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-04-21 03:45:21 -0400 |
commit | 4260415f6a3b92c5c986398d96c314df37a4ccbf (patch) | |
tree | 13db8d997677c70d7b3f880daafab41d0b6711f3 /arch/arm/include | |
parent | 05ce7bfe547c9fa967d9cab6c37867a9cb6fb3fa (diff) |
ARM: fix build error in arch/arm/kernel/process.c
/tmp/ccJ3ssZW.s: Assembler messages:
/tmp/ccJ3ssZW.s:1952: Error: can't resolve `.text' {.text section} - `.LFB1077'
This is caused because:
.section .data
.section .text
.section .text
.previous
does not return us to the .text section, but the .data section; this
makes use of .previous dangerous if the ordering of previous sections
is not known.
Fix up the other users of .previous; .pushsection and .popsection are
a safer pairing to use than .section and .previous.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/include')
-rw-r--r-- | arch/arm/include/asm/assembler.h | 12 | ||||
-rw-r--r-- | arch/arm/include/asm/futex.h | 16 | ||||
-rw-r--r-- | arch/arm/include/asm/uaccess.h | 40 |
3 files changed, 34 insertions, 34 deletions
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index 00f46d9ce299..6e8f05c8a1c8 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
@@ -149,10 +149,10 @@ | |||
149 | 149 | ||
150 | #define USER(x...) \ | 150 | #define USER(x...) \ |
151 | 9999: x; \ | 151 | 9999: x; \ |
152 | .section __ex_table,"a"; \ | 152 | .pushsection __ex_table,"a"; \ |
153 | .align 3; \ | 153 | .align 3; \ |
154 | .long 9999b,9001f; \ | 154 | .long 9999b,9001f; \ |
155 | .previous | 155 | .popsection |
156 | 156 | ||
157 | /* | 157 | /* |
158 | * SMP data memory barrier | 158 | * SMP data memory barrier |
@@ -193,10 +193,10 @@ | |||
193 | .error "Unsupported inc macro argument" | 193 | .error "Unsupported inc macro argument" |
194 | .endif | 194 | .endif |
195 | 195 | ||
196 | .section __ex_table,"a" | 196 | .pushsection __ex_table,"a" |
197 | .align 3 | 197 | .align 3 |
198 | .long 9999b, \abort | 198 | .long 9999b, \abort |
199 | .previous | 199 | .popsection |
200 | .endm | 200 | .endm |
201 | 201 | ||
202 | .macro usracc, instr, reg, ptr, inc, cond, rept, abort | 202 | .macro usracc, instr, reg, ptr, inc, cond, rept, abort |
@@ -234,10 +234,10 @@ | |||
234 | .error "Unsupported inc macro argument" | 234 | .error "Unsupported inc macro argument" |
235 | .endif | 235 | .endif |
236 | 236 | ||
237 | .section __ex_table,"a" | 237 | .pushsection __ex_table,"a" |
238 | .align 3 | 238 | .align 3 |
239 | .long 9999b, \abort | 239 | .long 9999b, \abort |
240 | .previous | 240 | .popsection |
241 | .endr | 241 | .endr |
242 | .endm | 242 | .endm |
243 | 243 | ||
diff --git a/arch/arm/include/asm/futex.h b/arch/arm/include/asm/futex.h index bfcc15929a7f..540a044153a5 100644 --- a/arch/arm/include/asm/futex.h +++ b/arch/arm/include/asm/futex.h | |||
@@ -21,14 +21,14 @@ | |||
21 | "2: strt %0, [%2]\n" \ | 21 | "2: strt %0, [%2]\n" \ |
22 | " mov %0, #0\n" \ | 22 | " mov %0, #0\n" \ |
23 | "3:\n" \ | 23 | "3:\n" \ |
24 | " .section __ex_table,\"a\"\n" \ | 24 | " .pushsection __ex_table,\"a\"\n" \ |
25 | " .align 3\n" \ | 25 | " .align 3\n" \ |
26 | " .long 1b, 4f, 2b, 4f\n" \ | 26 | " .long 1b, 4f, 2b, 4f\n" \ |
27 | " .previous\n" \ | 27 | " .popsection\n" \ |
28 | " .section .fixup,\"ax\"\n" \ | 28 | " .pushsection .fixup,\"ax\"\n" \ |
29 | "4: mov %0, %4\n" \ | 29 | "4: mov %0, %4\n" \ |
30 | " b 3b\n" \ | 30 | " b 3b\n" \ |
31 | " .previous" \ | 31 | " .popsection" \ |
32 | : "=&r" (ret), "=&r" (oldval) \ | 32 | : "=&r" (ret), "=&r" (oldval) \ |
33 | : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \ | 33 | : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \ |
34 | : "cc", "memory") | 34 | : "cc", "memory") |
@@ -102,14 +102,14 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | |||
102 | " it eq @ explicit IT needed for the 2b label\n" | 102 | " it eq @ explicit IT needed for the 2b label\n" |
103 | "2: streqt %2, [%3]\n" | 103 | "2: streqt %2, [%3]\n" |
104 | "3:\n" | 104 | "3:\n" |
105 | " .section __ex_table,\"a\"\n" | 105 | " .pushsection __ex_table,\"a\"\n" |
106 | " .align 3\n" | 106 | " .align 3\n" |
107 | " .long 1b, 4f, 2b, 4f\n" | 107 | " .long 1b, 4f, 2b, 4f\n" |
108 | " .previous\n" | 108 | " .popsection\n" |
109 | " .section .fixup,\"ax\"\n" | 109 | " .pushsection .fixup,\"ax\"\n" |
110 | "4: mov %0, %4\n" | 110 | "4: mov %0, %4\n" |
111 | " b 3b\n" | 111 | " b 3b\n" |
112 | " .previous" | 112 | " .popsection" |
113 | : "=&r" (val) | 113 | : "=&r" (val) |
114 | : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) | 114 | : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) |
115 | : "cc", "memory"); | 115 | : "cc", "memory"); |
diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h index 1d6bd40a4322..33e4a48fe103 100644 --- a/arch/arm/include/asm/uaccess.h +++ b/arch/arm/include/asm/uaccess.h | |||
@@ -229,16 +229,16 @@ do { \ | |||
229 | __asm__ __volatile__( \ | 229 | __asm__ __volatile__( \ |
230 | "1: ldrbt %1,[%2]\n" \ | 230 | "1: ldrbt %1,[%2]\n" \ |
231 | "2:\n" \ | 231 | "2:\n" \ |
232 | " .section .fixup,\"ax\"\n" \ | 232 | " .pushsection .fixup,\"ax\"\n" \ |
233 | " .align 2\n" \ | 233 | " .align 2\n" \ |
234 | "3: mov %0, %3\n" \ | 234 | "3: mov %0, %3\n" \ |
235 | " mov %1, #0\n" \ | 235 | " mov %1, #0\n" \ |
236 | " b 2b\n" \ | 236 | " b 2b\n" \ |
237 | " .previous\n" \ | 237 | " .popsection\n" \ |
238 | " .section __ex_table,\"a\"\n" \ | 238 | " .pushsection __ex_table,\"a\"\n" \ |
239 | " .align 3\n" \ | 239 | " .align 3\n" \ |
240 | " .long 1b, 3b\n" \ | 240 | " .long 1b, 3b\n" \ |
241 | " .previous" \ | 241 | " .popsection" \ |
242 | : "+r" (err), "=&r" (x) \ | 242 | : "+r" (err), "=&r" (x) \ |
243 | : "r" (addr), "i" (-EFAULT) \ | 243 | : "r" (addr), "i" (-EFAULT) \ |
244 | : "cc") | 244 | : "cc") |
@@ -265,16 +265,16 @@ do { \ | |||
265 | __asm__ __volatile__( \ | 265 | __asm__ __volatile__( \ |
266 | "1: ldrt %1,[%2]\n" \ | 266 | "1: ldrt %1,[%2]\n" \ |
267 | "2:\n" \ | 267 | "2:\n" \ |
268 | " .section .fixup,\"ax\"\n" \ | 268 | " .pushsection .fixup,\"ax\"\n" \ |
269 | " .align 2\n" \ | 269 | " .align 2\n" \ |
270 | "3: mov %0, %3\n" \ | 270 | "3: mov %0, %3\n" \ |
271 | " mov %1, #0\n" \ | 271 | " mov %1, #0\n" \ |
272 | " b 2b\n" \ | 272 | " b 2b\n" \ |
273 | " .previous\n" \ | 273 | " .popsection\n" \ |
274 | " .section __ex_table,\"a\"\n" \ | 274 | " .pushsection __ex_table,\"a\"\n" \ |
275 | " .align 3\n" \ | 275 | " .align 3\n" \ |
276 | " .long 1b, 3b\n" \ | 276 | " .long 1b, 3b\n" \ |
277 | " .previous" \ | 277 | " .popsection" \ |
278 | : "+r" (err), "=&r" (x) \ | 278 | : "+r" (err), "=&r" (x) \ |
279 | : "r" (addr), "i" (-EFAULT) \ | 279 | : "r" (addr), "i" (-EFAULT) \ |
280 | : "cc") | 280 | : "cc") |
@@ -310,15 +310,15 @@ do { \ | |||
310 | __asm__ __volatile__( \ | 310 | __asm__ __volatile__( \ |
311 | "1: strbt %1,[%2]\n" \ | 311 | "1: strbt %1,[%2]\n" \ |
312 | "2:\n" \ | 312 | "2:\n" \ |
313 | " .section .fixup,\"ax\"\n" \ | 313 | " .pushsection .fixup,\"ax\"\n" \ |
314 | " .align 2\n" \ | 314 | " .align 2\n" \ |
315 | "3: mov %0, %3\n" \ | 315 | "3: mov %0, %3\n" \ |
316 | " b 2b\n" \ | 316 | " b 2b\n" \ |
317 | " .previous\n" \ | 317 | " .popsection\n" \ |
318 | " .section __ex_table,\"a\"\n" \ | 318 | " .pushsection __ex_table,\"a\"\n" \ |
319 | " .align 3\n" \ | 319 | " .align 3\n" \ |
320 | " .long 1b, 3b\n" \ | 320 | " .long 1b, 3b\n" \ |
321 | " .previous" \ | 321 | " .popsection" \ |
322 | : "+r" (err) \ | 322 | : "+r" (err) \ |
323 | : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ | 323 | : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ |
324 | : "cc") | 324 | : "cc") |
@@ -343,15 +343,15 @@ do { \ | |||
343 | __asm__ __volatile__( \ | 343 | __asm__ __volatile__( \ |
344 | "1: strt %1,[%2]\n" \ | 344 | "1: strt %1,[%2]\n" \ |
345 | "2:\n" \ | 345 | "2:\n" \ |
346 | " .section .fixup,\"ax\"\n" \ | 346 | " .pushsection .fixup,\"ax\"\n" \ |
347 | " .align 2\n" \ | 347 | " .align 2\n" \ |
348 | "3: mov %0, %3\n" \ | 348 | "3: mov %0, %3\n" \ |
349 | " b 2b\n" \ | 349 | " b 2b\n" \ |
350 | " .previous\n" \ | 350 | " .popsection\n" \ |
351 | " .section __ex_table,\"a\"\n" \ | 351 | " .pushsection __ex_table,\"a\"\n" \ |
352 | " .align 3\n" \ | 352 | " .align 3\n" \ |
353 | " .long 1b, 3b\n" \ | 353 | " .long 1b, 3b\n" \ |
354 | " .previous" \ | 354 | " .popsection" \ |
355 | : "+r" (err) \ | 355 | : "+r" (err) \ |
356 | : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ | 356 | : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ |
357 | : "cc") | 357 | : "cc") |
@@ -371,16 +371,16 @@ do { \ | |||
371 | THUMB( "1: strt " __reg_oper1 ", [%1]\n" ) \ | 371 | THUMB( "1: strt " __reg_oper1 ", [%1]\n" ) \ |
372 | THUMB( "2: strt " __reg_oper0 ", [%1, #4]\n" ) \ | 372 | THUMB( "2: strt " __reg_oper0 ", [%1, #4]\n" ) \ |
373 | "3:\n" \ | 373 | "3:\n" \ |
374 | " .section .fixup,\"ax\"\n" \ | 374 | " .pushsection .fixup,\"ax\"\n" \ |
375 | " .align 2\n" \ | 375 | " .align 2\n" \ |
376 | "4: mov %0, %3\n" \ | 376 | "4: mov %0, %3\n" \ |
377 | " b 3b\n" \ | 377 | " b 3b\n" \ |
378 | " .previous\n" \ | 378 | " .popsection\n" \ |
379 | " .section __ex_table,\"a\"\n" \ | 379 | " .pushsection __ex_table,\"a\"\n" \ |
380 | " .align 3\n" \ | 380 | " .align 3\n" \ |
381 | " .long 1b, 4b\n" \ | 381 | " .long 1b, 4b\n" \ |
382 | " .long 2b, 4b\n" \ | 382 | " .long 2b, 4b\n" \ |
383 | " .previous" \ | 383 | " .popsection" \ |
384 | : "+r" (err), "+r" (__pu_addr) \ | 384 | : "+r" (err), "+r" (__pu_addr) \ |
385 | : "r" (x), "i" (-EFAULT) \ | 385 | : "r" (x), "i" (-EFAULT) \ |
386 | : "cc") | 386 | : "cc") |