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

Configure Feed

Select the types of activity you want to include in your feed.

kbuild: link lib-y objects to vmlinux forcibly even when CONFIG_MODULES=n

Since commit 7273ad2b08f8 ("kbuild: link lib-y objects to vmlinux
forcibly when CONFIG_MODULES=y"), all objects from lib-y have been
forcibly linked to vmlinux when CONFIG_MODULES=y.

To simplify future changes, this commit makes all objects from lib-y
be linked regardless of the CONFIG_MODULES setting.

Most use cases (CONFIG_MODULES=y) are not affected by this change.

The vmlinux size with ARCH=arm allnoconfig, where CONFIG_MODULES=n,
increases as follows:

text data bss dec hex filename
1368644 835104 206288 2410036 24c634 vmlinux.before
1379440 837064 206288 2422792 24f808 vmlinux.after

We no longer benefit from using static libraries, but the impact is
mitigated by supporting CONFIG_LD_DEAD_CODE_DATA_ELIMINATION.

For example, the size of vmlinux remains almost the same with ARCH=arm
tinyconfig, where CONFIG_MODULES=n and
CONFIG_LD_DEAD_CODE_DATA_ELIMINATION=y.

text data bss dec hex filename
455316 93404 15472 564192 89be0 vmlinux.before
455312 93404 15472 564188 89bdc vmlinux.after

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

+1 -6
+1 -6
Makefile
··· 1184 1184 export ARCH_DRIVERS := $(drivers-y) $(drivers-m) 1185 1185 # Externally visible symbols (used by link-vmlinux.sh) 1186 1186 1187 - KBUILD_VMLINUX_OBJS := ./built-in.a 1188 - ifdef CONFIG_MODULES 1189 - KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y))) 1187 + KBUILD_VMLINUX_OBJS := built-in.a $(patsubst %/, %/lib.a, $(filter %/, $(libs-y))) 1190 1188 KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y)) 1191 - else 1192 - KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y)) 1193 - endif 1194 1189 1195 1190 export KBUILD_VMLINUX_LIBS 1196 1191 export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds