diff options
-rw-r--r-- | arch/arm/boot/compressed/head.S | 4 | ||||
-rw-r--r-- | arch/arm/common/mcpm_head.S | 2 | ||||
-rw-r--r-- | arch/arm/include/asm/assembler.h | 17 | ||||
-rw-r--r-- | arch/arm/include/asm/entry-macro-multi.S | 4 | ||||
-rw-r--r-- | arch/arm/include/asm/unified.h | 2 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 12 | ||||
-rw-r--r-- | arch/arm/kernel/entry-common.S | 6 | ||||
-rw-r--r-- | arch/arm/kernel/entry-ftrace.S | 2 | ||||
-rw-r--r-- | arch/arm/kernel/head-nommu.S | 6 | ||||
-rw-r--r-- | arch/arm/kernel/head.S | 8 | ||||
-rw-r--r-- | arch/arm/kernel/sleep.S | 2 | ||||
-rw-r--r-- | arch/arm/lib/call_with_stack.S | 2 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7m.S | 2 |
13 files changed, 41 insertions, 28 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 2c45b5709fa4..06e983f59980 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -130,7 +130,7 @@ start: | |||
130 | .endr | 130 | .endr |
131 | ARM( mov r0, r0 ) | 131 | ARM( mov r0, r0 ) |
132 | ARM( b 1f ) | 132 | ARM( b 1f ) |
133 | THUMB( adr r12, BSYM(1f) ) | 133 | THUMB( badr r12, 1f ) |
134 | THUMB( bx r12 ) | 134 | THUMB( bx r12 ) |
135 | 135 | ||
136 | .word _magic_sig @ Magic numbers to help the loader | 136 | .word _magic_sig @ Magic numbers to help the loader |
@@ -447,7 +447,7 @@ dtb_check_done: | |||
447 | 447 | ||
448 | bl cache_clean_flush | 448 | bl cache_clean_flush |
449 | 449 | ||
450 | adr r0, BSYM(restart) | 450 | badr r0, restart |
451 | add r0, r0, r6 | 451 | add r0, r0, r6 |
452 | mov pc, r0 | 452 | mov pc, r0 |
453 | 453 | ||
diff --git a/arch/arm/common/mcpm_head.S b/arch/arm/common/mcpm_head.S index e02db4b81a66..08b3bb9bc6a2 100644 --- a/arch/arm/common/mcpm_head.S +++ b/arch/arm/common/mcpm_head.S | |||
@@ -49,7 +49,7 @@ | |||
49 | ENTRY(mcpm_entry_point) | 49 | ENTRY(mcpm_entry_point) |
50 | 50 | ||
51 | ARM_BE8(setend be) | 51 | ARM_BE8(setend be) |
52 | THUMB( adr r12, BSYM(1f) ) | 52 | THUMB( badr r12, 1f ) |
53 | THUMB( bx r12 ) | 53 | THUMB( bx r12 ) |
54 | THUMB( .thumb ) | 54 | THUMB( .thumb ) |
55 | 1: | 55 | 1: |
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index 186270b3e194..4abe57279c66 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
@@ -178,6 +178,21 @@ | |||
178 | .endm | 178 | .endm |
179 | 179 | ||
180 | /* | 180 | /* |
181 | * Assembly version of "adr rd, BSYM(sym)". This should only be used to | ||
182 | * reference local symbols in the same assembly file which are to be | ||
183 | * resolved by the assembler. Other usage is undefined. | ||
184 | */ | ||
185 | .irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo | ||
186 | .macro badr\c, rd, sym | ||
187 | #ifdef CONFIG_THUMB2_KERNEL | ||
188 | adr\c \rd, \sym + 1 | ||
189 | #else | ||
190 | adr\c \rd, \sym | ||
191 | #endif | ||
192 | .endm | ||
193 | .endr | ||
194 | |||
195 | /* | ||
181 | * Get current thread_info. | 196 | * Get current thread_info. |
182 | */ | 197 | */ |
183 | .macro get_thread_info, rd | 198 | .macro get_thread_info, rd |
@@ -326,7 +341,7 @@ | |||
326 | THUMB( orr \reg , \reg , #PSR_T_BIT ) | 341 | THUMB( orr \reg , \reg , #PSR_T_BIT ) |
327 | bne 1f | 342 | bne 1f |
328 | orr \reg, \reg, #PSR_A_BIT | 343 | orr \reg, \reg, #PSR_A_BIT |
329 | adr lr, BSYM(2f) | 344 | badr lr, 2f |
330 | msr spsr_cxsf, \reg | 345 | msr spsr_cxsf, \reg |
331 | __MSR_ELR_HYP(14) | 346 | __MSR_ELR_HYP(14) |
332 | __ERET | 347 | __ERET |
diff --git a/arch/arm/include/asm/entry-macro-multi.S b/arch/arm/include/asm/entry-macro-multi.S index 469a2b30fa27..609184f522ee 100644 --- a/arch/arm/include/asm/entry-macro-multi.S +++ b/arch/arm/include/asm/entry-macro-multi.S | |||
@@ -10,7 +10,7 @@ | |||
10 | @ | 10 | @ |
11 | @ routine called with r0 = irq number, r1 = struct pt_regs * | 11 | @ routine called with r0 = irq number, r1 = struct pt_regs * |
12 | @ | 12 | @ |
13 | adrne lr, BSYM(1b) | 13 | badrne lr, 1b |
14 | bne asm_do_IRQ | 14 | bne asm_do_IRQ |
15 | 15 | ||
16 | #ifdef CONFIG_SMP | 16 | #ifdef CONFIG_SMP |
@@ -23,7 +23,7 @@ | |||
23 | ALT_SMP(test_for_ipi r0, r2, r6, lr) | 23 | ALT_SMP(test_for_ipi r0, r2, r6, lr) |
24 | ALT_UP_B(9997f) | 24 | ALT_UP_B(9997f) |
25 | movne r1, sp | 25 | movne r1, sp |
26 | adrne lr, BSYM(1b) | 26 | badrne lr, 1b |
27 | bne do_IPI | 27 | bne do_IPI |
28 | #endif | 28 | #endif |
29 | 9997: | 29 | 9997: |
diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h index 200f9a7cd623..a91ae499614c 100644 --- a/arch/arm/include/asm/unified.h +++ b/arch/arm/include/asm/unified.h | |||
@@ -45,7 +45,6 @@ | |||
45 | #define THUMB(x...) x | 45 | #define THUMB(x...) x |
46 | #ifdef __ASSEMBLY__ | 46 | #ifdef __ASSEMBLY__ |
47 | #define W(instr) instr.w | 47 | #define W(instr) instr.w |
48 | #define BSYM(sym) sym + 1 | ||
49 | #else | 48 | #else |
50 | #define WASM(instr) #instr ".w" | 49 | #define WASM(instr) #instr ".w" |
51 | #endif | 50 | #endif |
@@ -59,7 +58,6 @@ | |||
59 | #define THUMB(x...) | 58 | #define THUMB(x...) |
60 | #ifdef __ASSEMBLY__ | 59 | #ifdef __ASSEMBLY__ |
61 | #define W(instr) instr | 60 | #define W(instr) instr |
62 | #define BSYM(sym) sym | ||
63 | #else | 61 | #else |
64 | #define WASM(instr) #instr | 62 | #define WASM(instr) #instr |
65 | #endif | 63 | #endif |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 570306c49406..f8f7398c74c2 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -40,7 +40,7 @@ | |||
40 | #ifdef CONFIG_MULTI_IRQ_HANDLER | 40 | #ifdef CONFIG_MULTI_IRQ_HANDLER |
41 | ldr r1, =handle_arch_irq | 41 | ldr r1, =handle_arch_irq |
42 | mov r0, sp | 42 | mov r0, sp |
43 | adr lr, BSYM(9997f) | 43 | badr lr, 9997f |
44 | ldr pc, [r1] | 44 | ldr pc, [r1] |
45 | #else | 45 | #else |
46 | arch_irq_handler_default | 46 | arch_irq_handler_default |
@@ -273,7 +273,7 @@ __und_svc: | |||
273 | str r4, [sp, #S_PC] | 273 | str r4, [sp, #S_PC] |
274 | orr r0, r9, r0, lsl #16 | 274 | orr r0, r9, r0, lsl #16 |
275 | #endif | 275 | #endif |
276 | adr r9, BSYM(__und_svc_finish) | 276 | badr r9, __und_svc_finish |
277 | mov r2, r4 | 277 | mov r2, r4 |
278 | bl call_fpe | 278 | bl call_fpe |
279 | 279 | ||
@@ -469,7 +469,7 @@ __und_usr: | |||
469 | @ instruction, or the more conventional lr if we are to treat | 469 | @ instruction, or the more conventional lr if we are to treat |
470 | @ this as a real undefined instruction | 470 | @ this as a real undefined instruction |
471 | @ | 471 | @ |
472 | adr r9, BSYM(ret_from_exception) | 472 | badr r9, ret_from_exception |
473 | 473 | ||
474 | @ IRQs must be enabled before attempting to read the instruction from | 474 | @ IRQs must be enabled before attempting to read the instruction from |
475 | @ user space since that could cause a page/translation fault if the | 475 | @ user space since that could cause a page/translation fault if the |
@@ -486,7 +486,7 @@ __und_usr: | |||
486 | @ r2 = PC value for the following instruction (:= regs->ARM_pc) | 486 | @ r2 = PC value for the following instruction (:= regs->ARM_pc) |
487 | @ r4 = PC value for the faulting instruction | 487 | @ r4 = PC value for the faulting instruction |
488 | @ lr = 32-bit undefined instruction function | 488 | @ lr = 32-bit undefined instruction function |
489 | adr lr, BSYM(__und_usr_fault_32) | 489 | badr lr, __und_usr_fault_32 |
490 | b call_fpe | 490 | b call_fpe |
491 | 491 | ||
492 | __und_usr_thumb: | 492 | __und_usr_thumb: |
@@ -522,7 +522,7 @@ ARM_BE8(rev16 r0, r0) @ little endian instruction | |||
522 | add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 | 522 | add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 |
523 | str r2, [sp, #S_PC] @ it's a 2x16bit instr, update | 523 | str r2, [sp, #S_PC] @ it's a 2x16bit instr, update |
524 | orr r0, r0, r5, lsl #16 | 524 | orr r0, r0, r5, lsl #16 |
525 | adr lr, BSYM(__und_usr_fault_32) | 525 | badr lr, __und_usr_fault_32 |
526 | @ r0 = the two 16-bit Thumb instructions which caused the exception | 526 | @ r0 = the two 16-bit Thumb instructions which caused the exception |
527 | @ r2 = PC value for the following Thumb instruction (:= regs->ARM_pc) | 527 | @ r2 = PC value for the following Thumb instruction (:= regs->ARM_pc) |
528 | @ r4 = PC value for the first 16-bit Thumb instruction | 528 | @ r4 = PC value for the first 16-bit Thumb instruction |
@@ -716,7 +716,7 @@ __und_usr_fault_32: | |||
716 | __und_usr_fault_16: | 716 | __und_usr_fault_16: |
717 | mov r1, #2 | 717 | mov r1, #2 |
718 | 1: mov r0, sp | 718 | 1: mov r0, sp |
719 | adr lr, BSYM(ret_from_exception) | 719 | badr lr, ret_from_exception |
720 | b __und_fault | 720 | b __und_fault |
721 | ENDPROC(__und_usr_fault_32) | 721 | ENDPROC(__und_usr_fault_32) |
722 | ENDPROC(__und_usr_fault_16) | 722 | ENDPROC(__und_usr_fault_16) |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index f8ccc21fa032..6ab159384667 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -88,7 +88,7 @@ ENTRY(ret_from_fork) | |||
88 | bl schedule_tail | 88 | bl schedule_tail |
89 | cmp r5, #0 | 89 | cmp r5, #0 |
90 | movne r0, r4 | 90 | movne r0, r4 |
91 | adrne lr, BSYM(1f) | 91 | badrne lr, 1f |
92 | retne r5 | 92 | retne r5 |
93 | 1: get_thread_info tsk | 93 | 1: get_thread_info tsk |
94 | b ret_slow_syscall | 94 | b ret_slow_syscall |
@@ -196,7 +196,7 @@ local_restart: | |||
196 | bne __sys_trace | 196 | bne __sys_trace |
197 | 197 | ||
198 | cmp scno, #NR_syscalls @ check upper syscall limit | 198 | cmp scno, #NR_syscalls @ check upper syscall limit |
199 | adr lr, BSYM(ret_fast_syscall) @ return address | 199 | badr lr, ret_fast_syscall @ return address |
200 | ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine | 200 | ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine |
201 | 201 | ||
202 | add r1, sp, #S_OFF | 202 | add r1, sp, #S_OFF |
@@ -231,7 +231,7 @@ __sys_trace: | |||
231 | add r0, sp, #S_OFF | 231 | add r0, sp, #S_OFF |
232 | bl syscall_trace_enter | 232 | bl syscall_trace_enter |
233 | 233 | ||
234 | adr lr, BSYM(__sys_trace_return) @ return address | 234 | badr lr, __sys_trace_return @ return address |
235 | mov scno, r0 @ syscall number (possibly new) | 235 | mov scno, r0 @ syscall number (possibly new) |
236 | add r1, sp, #S_R0 + S_OFF @ pointer to regs | 236 | add r1, sp, #S_R0 + S_OFF @ pointer to regs |
237 | cmp scno, #NR_syscalls @ check upper syscall limit | 237 | cmp scno, #NR_syscalls @ check upper syscall limit |
diff --git a/arch/arm/kernel/entry-ftrace.S b/arch/arm/kernel/entry-ftrace.S index fe57c73e70a4..c73c4030ca5d 100644 --- a/arch/arm/kernel/entry-ftrace.S +++ b/arch/arm/kernel/entry-ftrace.S | |||
@@ -87,7 +87,7 @@ | |||
87 | 87 | ||
88 | 1: mcount_get_lr r1 @ lr of instrumented func | 88 | 1: mcount_get_lr r1 @ lr of instrumented func |
89 | mcount_adjust_addr r0, lr @ instrumented function | 89 | mcount_adjust_addr r0, lr @ instrumented function |
90 | adr lr, BSYM(2f) | 90 | badr lr, 2f |
91 | mov pc, r2 | 91 | mov pc, r2 |
92 | 2: mcount_exit | 92 | 2: mcount_exit |
93 | .endm | 93 | .endm |
diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index aebfbf79a1a3..b6f3cb6333e4 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S | |||
@@ -46,7 +46,7 @@ ENTRY(stext) | |||
46 | .arm | 46 | .arm |
47 | ENTRY(stext) | 47 | ENTRY(stext) |
48 | 48 | ||
49 | THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. | 49 | THUMB( badr r9, 1f ) @ Kernel is always entered in ARM. |
50 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, | 50 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, |
51 | THUMB( .thumb ) @ switch to Thumb now. | 51 | THUMB( .thumb ) @ switch to Thumb now. |
52 | THUMB(1: ) | 52 | THUMB(1: ) |
@@ -79,7 +79,7 @@ ENTRY(stext) | |||
79 | #endif | 79 | #endif |
80 | ldr r13, =__mmap_switched @ address to jump to after | 80 | ldr r13, =__mmap_switched @ address to jump to after |
81 | @ initialising sctlr | 81 | @ initialising sctlr |
82 | adr lr, BSYM(1f) @ return (PIC) address | 82 | badr lr, 1f @ return (PIC) address |
83 | ldr r12, [r10, #PROCINFO_INITFUNC] | 83 | ldr r12, [r10, #PROCINFO_INITFUNC] |
84 | add r12, r12, r10 | 84 | add r12, r12, r10 |
85 | ret r12 | 85 | ret r12 |
@@ -115,7 +115,7 @@ ENTRY(secondary_startup) | |||
115 | bl __setup_mpu @ Initialize the MPU | 115 | bl __setup_mpu @ Initialize the MPU |
116 | #endif | 116 | #endif |
117 | 117 | ||
118 | adr lr, BSYM(__after_proc_init) @ return address | 118 | badr lr, __after_proc_init @ return address |
119 | mov r13, r12 @ __secondary_switched address | 119 | mov r13, r12 @ __secondary_switched address |
120 | ldr r12, [r10, #PROCINFO_INITFUNC] | 120 | ldr r12, [r10, #PROCINFO_INITFUNC] |
121 | add r12, r12, r10 | 121 | add r12, r12, r10 |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 3637973a9708..ab3c478aaced 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -80,7 +80,7 @@ | |||
80 | ENTRY(stext) | 80 | ENTRY(stext) |
81 | ARM_BE8(setend be ) @ ensure we are in BE8 mode | 81 | ARM_BE8(setend be ) @ ensure we are in BE8 mode |
82 | 82 | ||
83 | THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. | 83 | THUMB( badr r9, 1f ) @ Kernel is always entered in ARM. |
84 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, | 84 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, |
85 | THUMB( .thumb ) @ switch to Thumb now. | 85 | THUMB( .thumb ) @ switch to Thumb now. |
86 | THUMB(1: ) | 86 | THUMB(1: ) |
@@ -136,7 +136,7 @@ ENTRY(stext) | |||
136 | */ | 136 | */ |
137 | ldr r13, =__mmap_switched @ address to jump to after | 137 | ldr r13, =__mmap_switched @ address to jump to after |
138 | @ mmu has been enabled | 138 | @ mmu has been enabled |
139 | adr lr, BSYM(1f) @ return (PIC) address | 139 | badr lr, 1f @ return (PIC) address |
140 | mov r8, r4 @ set TTBR1 to swapper_pg_dir | 140 | mov r8, r4 @ set TTBR1 to swapper_pg_dir |
141 | ldr r12, [r10, #PROCINFO_INITFUNC] | 141 | ldr r12, [r10, #PROCINFO_INITFUNC] |
142 | add r12, r12, r10 | 142 | add r12, r12, r10 |
@@ -348,7 +348,7 @@ __turn_mmu_on_loc: | |||
348 | .text | 348 | .text |
349 | ENTRY(secondary_startup_arm) | 349 | ENTRY(secondary_startup_arm) |
350 | .arm | 350 | .arm |
351 | THUMB( adr r9, BSYM(1f) ) @ Kernel is entered in ARM. | 351 | THUMB( badr r9, 1f ) @ Kernel is entered in ARM. |
352 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, | 352 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, |
353 | THUMB( .thumb ) @ switch to Thumb now. | 353 | THUMB( .thumb ) @ switch to Thumb now. |
354 | THUMB(1: ) | 354 | THUMB(1: ) |
@@ -384,7 +384,7 @@ ENTRY(secondary_startup) | |||
384 | ldr r4, [r7, lr] @ get secondary_data.pgdir | 384 | ldr r4, [r7, lr] @ get secondary_data.pgdir |
385 | add r7, r7, #4 | 385 | add r7, r7, #4 |
386 | ldr r8, [r7, lr] @ get secondary_data.swapper_pg_dir | 386 | ldr r8, [r7, lr] @ get secondary_data.swapper_pg_dir |
387 | adr lr, BSYM(__enable_mmu) @ return address | 387 | badr lr, __enable_mmu @ return address |
388 | mov r13, r12 @ __secondary_switched address | 388 | mov r13, r12 @ __secondary_switched address |
389 | ldr r12, [r10, #PROCINFO_INITFUNC] | 389 | ldr r12, [r10, #PROCINFO_INITFUNC] |
390 | add r12, r12, r10 @ initialise processor | 390 | add r12, r12, r10 @ initialise processor |
diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S index 7d37bfc50830..76bb3128e135 100644 --- a/arch/arm/kernel/sleep.S +++ b/arch/arm/kernel/sleep.S | |||
@@ -81,7 +81,7 @@ ENTRY(__cpu_suspend) | |||
81 | mov r1, r4 @ size of save block | 81 | mov r1, r4 @ size of save block |
82 | add r0, sp, #8 @ pointer to save block | 82 | add r0, sp, #8 @ pointer to save block |
83 | bl __cpu_suspend_save | 83 | bl __cpu_suspend_save |
84 | adr lr, BSYM(cpu_suspend_abort) | 84 | badr lr, cpu_suspend_abort |
85 | ldmfd sp!, {r0, pc} @ call suspend fn | 85 | ldmfd sp!, {r0, pc} @ call suspend fn |
86 | ENDPROC(__cpu_suspend) | 86 | ENDPROC(__cpu_suspend) |
87 | .ltorg | 87 | .ltorg |
diff --git a/arch/arm/lib/call_with_stack.S b/arch/arm/lib/call_with_stack.S index ed1a421813cb..bf3a40889205 100644 --- a/arch/arm/lib/call_with_stack.S +++ b/arch/arm/lib/call_with_stack.S | |||
@@ -35,7 +35,7 @@ ENTRY(call_with_stack) | |||
35 | mov r2, r0 | 35 | mov r2, r0 |
36 | mov r0, r1 | 36 | mov r0, r1 |
37 | 37 | ||
38 | adr lr, BSYM(1f) | 38 | badr lr, 1f |
39 | ret r2 | 39 | ret r2 |
40 | 40 | ||
41 | 1: ldr lr, [sp] | 41 | 1: ldr lr, [sp] |
diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S index e08e1f2bab76..67d9209077c6 100644 --- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S | |||
@@ -98,7 +98,7 @@ __v7m_setup: | |||
98 | str r5, [r0, V7M_SCB_SHPR3] @ set PendSV priority | 98 | str r5, [r0, V7M_SCB_SHPR3] @ set PendSV priority |
99 | 99 | ||
100 | @ SVC to run the kernel in this mode | 100 | @ SVC to run the kernel in this mode |
101 | adr r1, BSYM(1f) | 101 | badr r1, 1f |
102 | ldr r5, [r12, #11 * 4] @ read the SVC vector entry | 102 | ldr r5, [r12, #11 * 4] @ read the SVC vector entry |
103 | str r1, [r12, #11 * 4] @ write the temporary SVC vector entry | 103 | str r1, [r12, #11 * 4] @ write the temporary SVC vector entry |
104 | mov r6, lr @ save LR | 104 | mov r6, lr @ save LR |