Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efe0160c authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

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: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent cde9f2f4
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -189,7 +189,17 @@ else
CHECKFLAGS	+= -D__LITTLE_ENDIAN__
endif

ifdef CONFIG_PPC32
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
else
ifeq ($(call ld-ifversion, -ge, 225000000, y),y)
# Have the linker provide sfpr if possible.
# There is a corresponding test in arch/powerpc/lib/Makefile
KBUILD_LDFLAGS_MODULE += --save-restore-funcs
else
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
endif
endif

ifeq ($(CONFIG_476FPE_ERR46),y)
	KBUILD_LDFLAGS_MODULE += --ppc476-workaround \
+8 −5
Original line number Diff line number Diff line
@@ -11,12 +11,15 @@ CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE)

obj-y += string.o alloc.o code-patching.o feature-fixups.o

obj-$(CONFIG_PPC32)	+= div64.o copy_32.o crtsavres.o

# See corresponding test in arch/powerpc/Makefile
# 64-bit linker creates .sfpr on demand for final link (vmlinux),
# so it is only needed for modules.
obj-$(CONFIG_PPC32) += crtsavres.o
# so it is only needed for modules, and only for older linkers which
# do not support --save-restore-funcs
ifeq ($(call ld-ifversion, -lt, 225000000, y),y)
extra-$(CONFIG_PPC64)	+= crtsavres.o

obj-$(CONFIG_PPC32)	+= div64.o copy_32.o
endif

obj64-y	+= copypage_64.o copyuser_64.o mem_64.o hweight_64.o \
	   copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \