aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/boot/compressed/head.S4
-rw-r--r--arch/arm/common/mcpm_head.S2
-rw-r--r--arch/arm/include/asm/assembler.h17
-rw-r--r--arch/arm/include/asm/entry-macro-multi.S4
-rw-r--r--arch/arm/include/asm/unified.h2
-rw-r--r--arch/arm/kernel/entry-armv.S12
-rw-r--r--arch/arm/kernel/entry-common.S6
-rw-r--r--arch/arm/kernel/entry-ftrace.S2
-rw-r--r--arch/arm/kernel/head-nommu.S6
-rw-r--r--arch/arm/kernel/head.S8
-rw-r--r--arch/arm/kernel/sleep.S2
-rw-r--r--arch/arm/lib/call_with_stack.S2
-rw-r--r--arch/arm/mm/proc-v7m.S2
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 @@
49ENTRY(mcpm_entry_point) 49ENTRY(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 )
551: 551:
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 @@
326THUMB( orr \reg , \reg , #PSR_T_BIT ) 341THUMB( 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
299997: 299997:
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
7181: mov r0, sp 7181: mov r0, sp
719 adr lr, BSYM(ret_from_exception) 719 badr lr, ret_from_exception
720 b __und_fault 720 b __und_fault
721ENDPROC(__und_usr_fault_32) 721ENDPROC(__und_usr_fault_32)
722ENDPROC(__und_usr_fault_16) 722ENDPROC(__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
931: get_thread_info tsk 931: 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
881: mcount_get_lr r1 @ lr of instrumented func 881: 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
922: mcount_exit 922: 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
47ENTRY(stext) 47ENTRY(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 @@
80ENTRY(stext) 80ENTRY(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
349ENTRY(secondary_startup_arm) 349ENTRY(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
86ENDPROC(__cpu_suspend) 86ENDPROC(__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
411: ldr lr, [sp] 411: 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