Skip to content

Commit efe0160

Browse files
npigginmpe
authored andcommitted
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 <[email protected]> Signed-off-by: Michael Ellerman <[email protected]>
1 parent cde9f2f commit efe0160

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

arch/powerpc/Makefile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,17 @@ else
189189
CHECKFLAGS += -D__LITTLE_ENDIAN__
190190
endif
191191

192+
ifdef CONFIG_PPC32
192193
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
193203

194204
ifeq ($(CONFIG_476FPE_ERR46),y)
195205
KBUILD_LDFLAGS_MODULE += --ppc476-workaround \

arch/powerpc/lib/Makefile

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@ CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE)
1111

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

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
1815

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
2023

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

0 commit comments

Comments
 (0)