diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2015-03-18 02:29:32 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-03-28 11:46:14 -0400 |
commit | bf35706f3d0929b413e90b32cf9dd453f200a570 (patch) | |
tree | 3d2105ed637a1b8cd47e7dd9a66db11a81fe1060 /arch/arm/kernel | |
parent | 0a6a78b8b3c1c1757fbeca4bbf518e44c70c9e4b (diff) |
ARM: 8314/1: replace PROCINFO embedded branch with relative offset
This patch replaces the 'branch to setup()' instructions embedded
in the PROCINFO structs with the offset to that setup function
relative to the base of the struct. This preserves the position
independent nature of that field, but uses a data item rather
than an instruction.
This is mainly done to prevent linker failures on large kernels,
where the setup function is out of reach for the branch.
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/head.S | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 01963273c07a..3637973a9708 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -138,9 +138,9 @@ ENTRY(stext) | |||
138 | @ mmu has been enabled | 138 | @ mmu has been enabled |
139 | adr lr, BSYM(1f) @ return (PIC) address | 139 | adr lr, BSYM(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 | ARM( add pc, r10, #PROCINFO_INITFUNC ) | 141 | ldr r12, [r10, #PROCINFO_INITFUNC] |
142 | THUMB( add r12, r10, #PROCINFO_INITFUNC ) | 142 | add r12, r12, r10 |
143 | THUMB( ret r12 ) | 143 | ret r12 |
144 | 1: b __enable_mmu | 144 | 1: b __enable_mmu |
145 | ENDPROC(stext) | 145 | ENDPROC(stext) |
146 | .ltorg | 146 | .ltorg |
@@ -386,10 +386,10 @@ ENTRY(secondary_startup) | |||
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 | adr lr, BSYM(__enable_mmu) @ return address |
388 | mov r13, r12 @ __secondary_switched address | 388 | mov r13, r12 @ __secondary_switched address |
389 | ARM( add pc, r10, #PROCINFO_INITFUNC ) @ initialise processor | 389 | ldr r12, [r10, #PROCINFO_INITFUNC] |
390 | @ (return control reg) | 390 | add r12, r12, r10 @ initialise processor |
391 | THUMB( add r12, r10, #PROCINFO_INITFUNC ) | 391 | @ (return control reg) |
392 | THUMB( ret r12 ) | 392 | ret r12 |
393 | ENDPROC(secondary_startup) | 393 | ENDPROC(secondary_startup) |
394 | ENDPROC(secondary_startup_arm) | 394 | ENDPROC(secondary_startup_arm) |
395 | 395 | ||