Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/64: Linker on-demand sfpr functions for modules

For final link, the powerpc64 linker generates fpr save/restore
functions on-demand, placing them in the .sfpr section. Starting with
binutils 2.25, these can be provided for non-final links with
--save-restore-funcs. Use that where possible for module links.

This saves about 200 bytes per module (~60kB) on powernv defconfig
build.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

authored by

Nicholas Piggin and committed by
Michael Ellerman
efe0160c cde9f2f4

+18 -5
+10
arch/powerpc/Makefile
··· 189 189 CHECKFLAGS += -D__LITTLE_ENDIAN__ 190 190 endif 191 191 192 + ifdef CONFIG_PPC32 192 193 KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o 194 + else 195 + ifeq ($(call ld-ifversion, -ge, 225000000, y),y) 196 + # Have the linker provide sfpr if possible. 197 + # There is a corresponding test in arch/powerpc/lib/Makefile 198 + KBUILD_LDFLAGS_MODULE += --save-restore-funcs 199 + else 200 + KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o 201 + endif 202 + endif 193 203 194 204 ifeq ($(CONFIG_476FPE_ERR46),y) 195 205 KBUILD_LDFLAGS_MODULE += --ppc476-workaround \
+8 -5
arch/powerpc/lib/Makefile
··· 11 11 12 12 obj-y += string.o alloc.o code-patching.o feature-fixups.o 13 13 14 - # 64-bit linker creates .sfpr on demand for final link (vmlinux), 15 - # so it is only needed for modules. 16 - obj-$(CONFIG_PPC32) += crtsavres.o 17 - extra-$(CONFIG_PPC64) += crtsavres.o 14 + obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o 18 15 19 - obj-$(CONFIG_PPC32) += div64.o copy_32.o 16 + # See corresponding test in arch/powerpc/Makefile 17 + # 64-bit linker creates .sfpr on demand for final link (vmlinux), 18 + # so it is only needed for modules, and only for older linkers which 19 + # do not support --save-restore-funcs 20 + ifeq ($(call ld-ifversion, -lt, 225000000, y),y) 21 + extra-$(CONFIG_PPC64) += crtsavres.o 22 + endif 20 23 21 24 obj64-y += copypage_64.o copyuser_64.o mem_64.o hweight_64.o \ 22 25 copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \