linux/arch
Ulrich Weigand a61674bdfc powerpc/module: Handle R_PPC64_ENTRY relocations
GCC 6 will include changes to generated code with -mcmodel=large,
which is used to build kernel modules on powerpc64le.  This was
necessary because the large model is supposed to allow arbitrary
sizes and locations of the code and data sections, but the ELFv2
global entry point prolog still made the unconditional assumption
that the TOC associated with any particular function can be found
within 2 GB of the function entry point:

func:
	addis r2,r12,(.TOC.-func)@ha
	addi  r2,r2,(.TOC.-func)@l
	.localentry func, .-func

To remove this assumption, GCC will now generate instead this global
entry point prolog sequence when using -mcmodel=large:

	.quad .TOC.-func
func:
	.reloc ., R_PPC64_ENTRY
	ld    r2, -8(r12)
	add   r2, r2, r12
	.localentry func, .-func

The new .reloc triggers an optimization in the linker that will
replace this new prolog with the original code (see above) if the
linker determines that the distance between .TOC. and func is in
range after all.

Since this new relocation is now present in module object files,
the kernel module loader is required to handle them too.  This
patch adds support for the new relocation and implements the
same optimization done by the GNU linker.

Cc: stable@vger.kernel.org
Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2016-01-13 12:37:05 +11:00
..
alpha mm: mlock: add mlock flags to enable VM_LOCKONFAULT usage 2015-11-05 19:34:48 -08:00
arc ARC fixes for 4.4-rc1 2015-11-14 09:09:37 -08:00
arm USB fixes for 4.4-rc2 2015-11-22 13:15:05 -08:00
arm64 arm64 fixes: 2015-11-19 12:21:23 -08:00
avr32 dmaengine updates for 4.4-rc1 2015-11-10 10:05:17 -08:00
blackfin
c6x
cris cris: Drop reference to get_cmos_time() 2015-11-02 20:03:05 +01:00
frv kmap_atomic_to_page() has no users, remove it 2015-11-09 15:11:24 -08:00
h8300 h8300 update for v4.4 2015-11-12 15:26:39 -08:00
hexagon
ia64 Power management and ACPI updates for v4.4-rc1 2015-11-04 18:10:13 -08:00
m32r
m68k block: change ->make_request_fn() and users to return a queue cookie 2015-11-07 10:40:46 -07:00
metag Metag architecture changes for v4.4 2015-11-10 16:24:25 -08:00
microblaze kmap_atomic_to_page() has no users, remove it 2015-11-09 15:11:24 -08:00
mips MIPS: ath79: Add a machine entry for booting OF machines 2015-11-20 15:44:57 +01:00
mn10300
nios2 nios2 update for v4.4-rc1 2015-11-09 16:36:10 -08:00
openrisc
parisc Merge branch 'parisc-4.4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux 2015-11-22 12:50:58 -08:00
powerpc powerpc/module: Handle R_PPC64_ENTRY relocations 2016-01-13 12:37:05 +11:00
s390 s390: remove SALIPL loader 2015-11-16 12:51:11 +01:00
score
sh Merge branch 'akpm' (patches from Andrew) 2015-11-07 14:32:45 -08:00
sparc sparc/sparc64: allocate sys_membarrier system call number 2015-11-09 15:11:24 -08:00
tile kmap_atomic_to_page() has no users, remove it 2015-11-09 15:11:24 -08:00
um um: Switch clocksource to hrtimers 2015-11-06 22:54:49 +01:00
unicore32 pwm: Changes for v4.4-rc1 2015-11-11 09:16:10 -08:00
x86 Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-11-22 12:00:12 -08:00
xtensa Merge branch 'for-4.4/io-poll' of git://git.kernel.dk/linux-block 2015-11-10 17:23:49 -08:00
.gitignore
Kconfig