powerpc/64: Handle linker stubs in low .text code
authorNicholas Piggin <npiggin@gmail.com>
Mon, 29 May 2017 07:39:40 +0000 (17:39 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 30 May 2017 04:59:51 +0000 (14:59 +1000)
commit951eedebcdea06fdcc742c82dc347509ce0e1ba4
treee019d53fbd8e6f4e4edd0644440e62a1f4c5f038
parent4ea80652dc75482dca1739762075dd5caa57ae29
powerpc/64: Handle linker stubs in low .text code

Very large kernels may require linker stubs for branches from HEAD
text code. The linker may place these stubs before the HEAD text
sections, which breaks the assumption that HEAD text is located at 0
(or the .text section being located at 0x7000/0x8000 on Book3S
kernels).

Provide an option to create a small section just before the .text
section with an empty 256 - 4 bytes, and adjust the start of the .text
section to match. The linker will tend to put stubs in that section
and not break our relative-to-absolute offset assumptions.

This causes a small waste of space on common kernels, but allows large
kernels to build and boot. For now, it is an EXPERT config option,
defaulting to =n, but a reference is provided for it in the build-time
check for such breakage. This is good enough for allyesconfig and
custom users / hackers.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/Kconfig
arch/powerpc/include/asm/head-64.h
arch/powerpc/kernel/vmlinux.lds.S