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>
This commit is contained in:
Родитель
05ce7bfe54
Коммит
4260415f6a
|
@ -149,10 +149,10 @@
|
|||
|
||||
#define USER(x...) \
|
||||
9999: x; \
|
||||
.section __ex_table,"a"; \
|
||||
.pushsection __ex_table,"a"; \
|
||||
.align 3; \
|
||||
.long 9999b,9001f; \
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
/*
|
||||
* SMP data memory barrier
|
||||
|
@ -193,10 +193,10 @@
|
|||
.error "Unsupported inc macro argument"
|
||||
.endif
|
||||
|
||||
.section __ex_table,"a"
|
||||
.pushsection __ex_table,"a"
|
||||
.align 3
|
||||
.long 9999b, \abort
|
||||
.previous
|
||||
.popsection
|
||||
.endm
|
||||
|
||||
.macro usracc, instr, reg, ptr, inc, cond, rept, abort
|
||||
|
@ -234,10 +234,10 @@
|
|||
.error "Unsupported inc macro argument"
|
||||
.endif
|
||||
|
||||
.section __ex_table,"a"
|
||||
.pushsection __ex_table,"a"
|
||||
.align 3
|
||||
.long 9999b, \abort
|
||||
.previous
|
||||
.popsection
|
||||
.endr
|
||||
.endm
|
||||
|
||||
|
|
|
@ -21,14 +21,14 @@
|
|||
"2: strt %0, [%2]\n" \
|
||||
" mov %0, #0\n" \
|
||||
"3:\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 4f, 2b, 4f\n" \
|
||||
" .previous\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
"4: mov %0, %4\n" \
|
||||
" b 3b\n" \
|
||||
" .previous" \
|
||||
" .popsection" \
|
||||
: "=&r" (ret), "=&r" (oldval) \
|
||||
: "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \
|
||||
: "cc", "memory")
|
||||
|
@ -102,14 +102,14 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
|||
" it eq @ explicit IT needed for the 2b label\n"
|
||||
"2: streqt %2, [%3]\n"
|
||||
"3:\n"
|
||||
" .section __ex_table,\"a\"\n"
|
||||
" .pushsection __ex_table,\"a\"\n"
|
||||
" .align 3\n"
|
||||
" .long 1b, 4f, 2b, 4f\n"
|
||||
" .previous\n"
|
||||
" .section .fixup,\"ax\"\n"
|
||||
" .popsection\n"
|
||||
" .pushsection .fixup,\"ax\"\n"
|
||||
"4: mov %0, %4\n"
|
||||
" b 3b\n"
|
||||
" .previous"
|
||||
" .popsection"
|
||||
: "=&r" (val)
|
||||
: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
|
||||
: "cc", "memory");
|
||||
|
|
|
@ -229,16 +229,16 @@ do { \
|
|||
__asm__ __volatile__( \
|
||||
"1: ldrbt %1,[%2]\n" \
|
||||
"2:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"3: mov %0, %3\n" \
|
||||
" mov %1, #0\n" \
|
||||
" b 2b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 3b\n" \
|
||||
" .previous" \
|
||||
" .popsection" \
|
||||
: "+r" (err), "=&r" (x) \
|
||||
: "r" (addr), "i" (-EFAULT) \
|
||||
: "cc")
|
||||
|
@ -265,16 +265,16 @@ do { \
|
|||
__asm__ __volatile__( \
|
||||
"1: ldrt %1,[%2]\n" \
|
||||
"2:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"3: mov %0, %3\n" \
|
||||
" mov %1, #0\n" \
|
||||
" b 2b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 3b\n" \
|
||||
" .previous" \
|
||||
" .popsection" \
|
||||
: "+r" (err), "=&r" (x) \
|
||||
: "r" (addr), "i" (-EFAULT) \
|
||||
: "cc")
|
||||
|
@ -310,15 +310,15 @@ do { \
|
|||
__asm__ __volatile__( \
|
||||
"1: strbt %1,[%2]\n" \
|
||||
"2:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"3: mov %0, %3\n" \
|
||||
" b 2b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 3b\n" \
|
||||
" .previous" \
|
||||
" .popsection" \
|
||||
: "+r" (err) \
|
||||
: "r" (x), "r" (__pu_addr), "i" (-EFAULT) \
|
||||
: "cc")
|
||||
|
@ -343,15 +343,15 @@ do { \
|
|||
__asm__ __volatile__( \
|
||||
"1: strt %1,[%2]\n" \
|
||||
"2:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"3: mov %0, %3\n" \
|
||||
" b 2b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 3b\n" \
|
||||
" .previous" \
|
||||
" .popsection" \
|
||||
: "+r" (err) \
|
||||
: "r" (x), "r" (__pu_addr), "i" (-EFAULT) \
|
||||
: "cc")
|
||||
|
@ -371,16 +371,16 @@ do { \
|
|||
THUMB( "1: strt " __reg_oper1 ", [%1]\n" ) \
|
||||
THUMB( "2: strt " __reg_oper0 ", [%1, #4]\n" ) \
|
||||
"3:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"4: mov %0, %3\n" \
|
||||
" b 3b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 4b\n" \
|
||||
" .long 2b, 4b\n" \
|
||||
" .previous" \
|
||||
" .popsection" \
|
||||
: "+r" (err), "+r" (__pu_addr) \
|
||||
: "r" (x), "i" (-EFAULT) \
|
||||
: "cc")
|
||||
|
|
|
@ -523,16 +523,16 @@ ENDPROC(__und_usr)
|
|||
/*
|
||||
* The out of line fixup for the ldrt above.
|
||||
*/
|
||||
.section .fixup, "ax"
|
||||
.pushsection .fixup, "ax"
|
||||
4: mov pc, r9
|
||||
.previous
|
||||
.section __ex_table,"a"
|
||||
.popsection
|
||||
.pushsection __ex_table,"a"
|
||||
.long 1b, 4b
|
||||
#if __LINUX_ARM_ARCH__ >= 7
|
||||
.long 2b, 4b
|
||||
.long 3b, 4b
|
||||
#endif
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
/*
|
||||
* Check whether the instruction is a co-processor instruction.
|
||||
|
@ -679,7 +679,7 @@ do_fpe:
|
|||
.data
|
||||
ENTRY(fp_enter)
|
||||
.word no_fp
|
||||
.previous
|
||||
.text
|
||||
|
||||
ENTRY(no_fp)
|
||||
mov pc, lr
|
||||
|
|
|
@ -62,15 +62,15 @@ int ftrace_modify_code(unsigned long pc, unsigned char *old_code,
|
|||
" movne %0, #2 \n"
|
||||
"3:\n"
|
||||
|
||||
".section .fixup, \"ax\"\n"
|
||||
".pushsection .fixup, \"ax\"\n"
|
||||
"4: mov %0, #1 \n"
|
||||
" b 3b \n"
|
||||
".previous\n"
|
||||
".popsection\n"
|
||||
|
||||
".section __ex_table, \"a\"\n"
|
||||
".pushsection __ex_table, \"a\"\n"
|
||||
" .long 1b, 4b \n"
|
||||
" .long 2b, 4b \n"
|
||||
".previous\n"
|
||||
".popsection\n"
|
||||
|
||||
: "=r"(err), "=r"(replaced)
|
||||
: "r"(pc), "r"(new), "r"(old), "0"(err), "1"(replaced)
|
||||
|
|
|
@ -355,7 +355,7 @@ EXPORT_SYMBOL(dump_fpu);
|
|||
* the thread function, and r3 points to the exit function.
|
||||
*/
|
||||
extern void kernel_thread_helper(void);
|
||||
asm( ".section .text\n"
|
||||
asm( ".pushsection .text\n"
|
||||
" .align\n"
|
||||
" .type kernel_thread_helper, #function\n"
|
||||
"kernel_thread_helper:\n"
|
||||
|
@ -363,11 +363,11 @@ asm( ".section .text\n"
|
|||
" mov lr, r3\n"
|
||||
" mov pc, r2\n"
|
||||
" .size kernel_thread_helper, . - kernel_thread_helper\n"
|
||||
" .previous");
|
||||
" .popsection");
|
||||
|
||||
#ifdef CONFIG_ARM_UNWIND
|
||||
extern void kernel_thread_exit(long code);
|
||||
asm( ".section .text\n"
|
||||
asm( ".pushsection .text\n"
|
||||
" .align\n"
|
||||
" .type kernel_thread_exit, #function\n"
|
||||
"kernel_thread_exit:\n"
|
||||
|
@ -377,7 +377,7 @@ asm( ".section .text\n"
|
|||
" nop\n"
|
||||
" .fnend\n"
|
||||
" .size kernel_thread_exit, . - kernel_thread_exit\n"
|
||||
" .previous");
|
||||
" .popsection");
|
||||
#else
|
||||
#define kernel_thread_exit do_exit
|
||||
#endif
|
||||
|
|
|
@ -110,13 +110,13 @@ no_frame: ldmfd sp!, {r4 - r8, pc}
|
|||
ENDPROC(__backtrace)
|
||||
ENDPROC(c_backtrace)
|
||||
|
||||
.section __ex_table,"a"
|
||||
.pushsection __ex_table,"a"
|
||||
.align 3
|
||||
.long 1001b, 1006b
|
||||
.long 1002b, 1006b
|
||||
.long 1003b, 1006b
|
||||
.long 1004b, 1006b
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
#define instr r4
|
||||
#define reg r5
|
||||
|
|
|
@ -46,8 +46,8 @@ USER( strnebt r2, [r0])
|
|||
ldmfd sp!, {r1, pc}
|
||||
ENDPROC(__clear_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
9001: ldmfd sp!, {r0, pc}
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ ENTRY(__copy_from_user)
|
|||
|
||||
ENDPROC(__copy_from_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
copy_abort_preamble
|
||||
ldmfd sp!, {r1, r2}
|
||||
|
@ -100,5 +100,5 @@ ENDPROC(__copy_from_user)
|
|||
bl __memzero
|
||||
ldr r0, [sp], #4
|
||||
copy_abort_end
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
|
|
|
@ -94,12 +94,12 @@ WEAK(__copy_to_user)
|
|||
|
||||
ENDPROC(__copy_to_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
copy_abort_preamble
|
||||
ldmfd sp!, {r1, r2, r3}
|
||||
sub r0, r0, r1
|
||||
rsb r0, r0, r2
|
||||
copy_abort_end
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
* so properly, we would have to add in whatever registers were loaded before
|
||||
* the fault, which, with the current asm above is not predictable.
|
||||
*/
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 4
|
||||
9001: mov r4, #-EFAULT
|
||||
ldr r5, [fp, #4] @ *err_ptr
|
||||
|
@ -80,4 +80,4 @@
|
|||
strneb r0, [r1], #1
|
||||
bne 9002b
|
||||
load_regs
|
||||
.previous
|
||||
.popsection
|
||||
|
|
|
@ -64,9 +64,9 @@ __get_user_bad:
|
|||
mov pc, lr
|
||||
ENDPROC(__get_user_bad)
|
||||
|
||||
.section __ex_table, "a"
|
||||
.pushsection __ex_table, "a"
|
||||
.long 1b, __get_user_bad
|
||||
.long 2b, __get_user_bad
|
||||
.long 3b, __get_user_bad
|
||||
.long 4b, __get_user_bad
|
||||
.previous
|
||||
.popsection
|
||||
|
|
|
@ -81,11 +81,11 @@ __put_user_bad:
|
|||
mov pc, lr
|
||||
ENDPROC(__put_user_bad)
|
||||
|
||||
.section __ex_table, "a"
|
||||
.pushsection __ex_table, "a"
|
||||
.long 1b, __put_user_bad
|
||||
.long 2b, __put_user_bad
|
||||
.long 3b, __put_user_bad
|
||||
.long 4b, __put_user_bad
|
||||
.long 5b, __put_user_bad
|
||||
.long 6b, __put_user_bad
|
||||
.previous
|
||||
.popsection
|
||||
|
|
|
@ -33,11 +33,11 @@ ENTRY(__strncpy_from_user)
|
|||
mov pc, lr
|
||||
ENDPROC(__strncpy_from_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
9001: mov r3, #0
|
||||
strb r3, [r0, #0] @ null terminate
|
||||
mov r0, #-EFAULT
|
||||
mov pc, lr
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
|
|
|
@ -33,8 +33,8 @@ ENTRY(__strnlen_user)
|
|||
mov pc, lr
|
||||
ENDPROC(__strnlen_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
9001: mov r0, #0
|
||||
mov pc, lr
|
||||
.previous
|
||||
.popsection
|
||||
|
|
|
@ -279,10 +279,10 @@ USER( strgtbt r3, [r0], #1) @ May fault
|
|||
b .Lc2u_finished
|
||||
ENDPROC(__copy_to_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
9001: ldmfd sp!, {r0, r4 - r7, pc}
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
/* Prototype: unsigned long __copy_from_user(void *to,const void *from,unsigned long n);
|
||||
* Purpose : copy a block from user memory to kernel memory
|
||||
|
@ -545,7 +545,7 @@ USER( ldrgtbt r3, [r1], #1) @ May fault
|
|||
b .Lcfu_finished
|
||||
ENDPROC(__copy_from_user)
|
||||
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 0
|
||||
/*
|
||||
* We took an exception. r0 contains a pointer to
|
||||
|
@ -559,5 +559,5 @@ ENDPROC(__copy_from_user)
|
|||
blne __memzero
|
||||
mov r0, r4
|
||||
ldmfd sp!, {r4 - r7, pc}
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
|
|
|
@ -166,15 +166,15 @@ union offset_union {
|
|||
THUMB( "1: "ins" %1, [%2]\n" ) \
|
||||
THUMB( " add %2, %2, #1\n" ) \
|
||||
"2:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"3: mov %0, #1\n" \
|
||||
" b 2b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 3b\n" \
|
||||
" .previous\n" \
|
||||
" .popsection\n" \
|
||||
: "=r" (err), "=&r" (val), "=r" (addr) \
|
||||
: "0" (err), "2" (addr))
|
||||
|
||||
|
@ -226,16 +226,16 @@ union offset_union {
|
|||
" mov %1, %1, "NEXT_BYTE"\n" \
|
||||
"2: "ins" %1, [%2]\n" \
|
||||
"3:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"4: mov %0, #1\n" \
|
||||
" b 3b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 4b\n" \
|
||||
" .long 2b, 4b\n" \
|
||||
" .previous\n" \
|
||||
" .popsection\n" \
|
||||
: "=r" (err), "=&r" (v), "=&r" (a) \
|
||||
: "0" (err), "1" (v), "2" (a)); \
|
||||
if (err) \
|
||||
|
@ -266,18 +266,18 @@ union offset_union {
|
|||
" mov %1, %1, "NEXT_BYTE"\n" \
|
||||
"4: "ins" %1, [%2]\n" \
|
||||
"5:\n" \
|
||||
" .section .fixup,\"ax\"\n" \
|
||||
" .pushsection .fixup,\"ax\"\n" \
|
||||
" .align 2\n" \
|
||||
"6: mov %0, #1\n" \
|
||||
" b 5b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .popsection\n" \
|
||||
" .pushsection __ex_table,\"a\"\n" \
|
||||
" .align 3\n" \
|
||||
" .long 1b, 6b\n" \
|
||||
" .long 2b, 6b\n" \
|
||||
" .long 3b, 6b\n" \
|
||||
" .long 4b, 6b\n" \
|
||||
" .previous\n" \
|
||||
" .popsection\n" \
|
||||
: "=r" (err), "=&r" (v), "=&r" (a) \
|
||||
: "0" (err), "1" (v), "2" (a)); \
|
||||
if (err) \
|
||||
|
|
|
@ -45,7 +45,7 @@ ENTRY(cpu_sa1100_proc_init)
|
|||
mcr p15, 0, r0, c9, c0, 5 @ Allow read-buffer operations from userland
|
||||
mov pc, lr
|
||||
|
||||
.previous
|
||||
.section .text
|
||||
|
||||
/*
|
||||
* cpu_sa1100_proc_fin()
|
||||
|
|
|
@ -111,12 +111,12 @@ next:
|
|||
@ to fault. Emit the appropriate exception gunk to fix things up.
|
||||
@ ??? For some reason, faults can happen at .Lx2 even with a
|
||||
@ plain LDR instruction. Weird, but it seems harmless.
|
||||
.section .fixup,"ax"
|
||||
.pushsection .fixup,"ax"
|
||||
.align 2
|
||||
.Lfix: mov pc, r9 @ let the user eat segfaults
|
||||
.previous
|
||||
.popsection
|
||||
|
||||
.section __ex_table,"a"
|
||||
.pushsection __ex_table,"a"
|
||||
.align 3
|
||||
.long .Lx1, .Lfix
|
||||
.previous
|
||||
.popsection
|
||||
|
|
Загрузка…
Ссылка в новой задаче