The top Makefile does not need to export KBUILD_VMLINUX_INIT and KBUILD_VMLINUX_MAIN separately. Put every built-in.a into KBUILD_VMLINUX_OBJS. The order of $(head-y), $(init-y), $(core-y), ... is still retained.
Unified · Split
| @@ -232,17 +232,12 @@ KBUILD_LDS · 231 unmodified lines | ||
| 232 | 232 | -------------------------------------------------- |
| 233 | 233 | The linker script with full path. Assigned by the top-level Makefile. |
| 234 | 234 | |
| 235 | −KBUILD_VMLINUX_INIT | |
| 235 | +KBUILD_VMLINUX_OBJS | |
| 236 | 236 | -------------------------------------------------- |
| 237 | −All object files for the init (first) part of vmlinux. | |
| 238 | −Files specified with KBUILD_VMLINUX_INIT are linked first. | |
| 239 | − | |
| 240 | −KBUILD_VMLINUX_MAIN | |
| 241 | −-------------------------------------------------- | |
| 242 | −All object files for the main part of vmlinux. | |
| 237 | +All object files for vmlinux. They are linked to vmlinux in the same | |
| 238 | +order as listed in KBUILD_VMLINUX_OBJS. | |
| 243 | 239 | |
| 244 | 240 | KBUILD_VMLINUX_LIBS |
| 245 | 241 | -------------------------------------------------- |
| 246 | −All .a "lib" files for vmlinux. | |
| 247 | −KBUILD_VMLINUX_INIT, KBUILD_VMLINUX_MAIN, and KBUILD_VMLINUX_LIBS together | |
| 248 | −specify all the object files used to link vmlinux. | |
| 242 | +All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and KBUILD_VMLINUX_LIBS | |
| 243 | +together specify all the object files used to link vmlinux. | |
| @@ -976,15 +976,15 @@ libs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y))) · 975 unmodified lines | ||
| 976 | 976 | virt-y := $(patsubst %/, %/built-in.a, $(virt-y)) |
| 977 | 977 | |
| 978 | 978 | # Externally visible symbols (used by link-vmlinux.sh) |
| 979 | −export KBUILD_VMLINUX_INIT := $(head-y) $(init-y) | |
| 980 | −export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y2) $(drivers-y) $(net-y) $(virt-y) | |
| 979 | +export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \ | |
| 980 | + $(drivers-y) $(net-y) $(virt-y) | |
| 981 | 981 | export KBUILD_VMLINUX_LIBS := $(libs-y1) |
| 982 | 982 | export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds |
| 983 | 983 | export LDFLAGS_vmlinux |
| 984 | 984 | # used by scripts/package/Makefile |
| 985 | 985 | export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) arch Documentation include samples scripts tools) |
| 986 | 986 | |
| 987 | −vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN) $(KBUILD_VMLINUX_LIBS) | |
| 987 | +vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) | |
| 988 | 988 | |
| 989 | 989 | # Recurse until adjust_autoksyms.sh is satisfied |
| 990 | 990 | PHONY += autoksyms_recursive |
| @@ -3,22 +3,17 @@ · 2 unmodified lines | ||
| 3 | 3 | # |
| 4 | 4 | # link vmlinux |
| 5 | 5 | # |
| 6 | −# vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_INIT) and | |
| 7 | −# $(KBUILD_VMLINUX_MAIN) and $(KBUILD_VMLINUX_LIBS). Most are built-in.a files | |
| 8 | −# from top-level directories in the kernel tree, others are specified in | |
| 9 | −# arch/$(ARCH)/Makefile. Ordering when linking is important, and | |
| 10 | −# $(KBUILD_VMLINUX_INIT) must be first. $(KBUILD_VMLINUX_LIBS) are archives | |
| 11 | −# which are linked conditionally (not within --whole-archive), and do not | |
| 12 | −# require symbol indexes added. | |
| 6 | +# vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_OBJS) and | |
| 7 | +# $(KBUILD_VMLINUX_LIBS). Most are built-in.a files from top-level directories | |
| 8 | +# in the kernel tree, others are specified in arch/$(ARCH)/Makefile. | |
| 9 | +# $(KBUILD_VMLINUX_LIBS) are archives which are linked conditionally | |
| 10 | +# (not within --whole-archive), and do not require symbol indexes added. | |
| 13 | 11 | # |
| 14 | 12 | # vmlinux |
| 15 | 13 | # ^ |
| 16 | 14 | # | |
| 17 | −# +-< $(KBUILD_VMLINUX_INIT) | |
| 18 | −# | +--< init/version.o + more | |
| 19 | −# | | |
| 20 | −# +--< $(KBUILD_VMLINUX_MAIN) | |
| 21 | −# | +--< drivers/built-in.a mm/built-in.a + more | |
| 15 | +# +--< $(KBUILD_VMLINUX_OBJS) | |
| 16 | +# | +--< init/built-in.a drivers/built-in.a mm/built-in.a + more | |
| 22 | 17 | # | |
| 23 | 18 | # +--< $(KBUILD_VMLINUX_LIBS) |
| 24 | 19 | # | +--< lib/lib.a + more |
| @@ -51,8 +46,7 @@ modpost_link() · 26 unmodified lines | ||
| 51 | 46 | local objects |
| 52 | 47 | |
| 53 | 48 | objects="--whole-archive \ |
| 54 | − ${KBUILD_VMLINUX_INIT} \ | |
| 55 | − ${KBUILD_VMLINUX_MAIN} \ | |
| 49 | + ${KBUILD_VMLINUX_OBJS} \ | |
| 56 | 50 | --no-whole-archive \ |
| 57 | 51 | --start-group \ |
| 58 | 52 | ${KBUILD_VMLINUX_LIBS} \ |
| @@ -71,8 +65,7 @@ vmlinux_link() · 12 unmodified lines | ||
| 71 | 65 | |
| 72 | 66 | if [ "${SRCARCH}" != "um" ]; then |
| 73 | 67 | objects="--whole-archive \ |
| 74 | − ${KBUILD_VMLINUX_INIT} \ | |
| 75 | − ${KBUILD_VMLINUX_MAIN} \ | |
| 68 | + ${KBUILD_VMLINUX_OBJS} \ | |
| 76 | 69 | --no-whole-archive \ |
| 77 | 70 | --start-group \ |
| 78 | 71 | ${KBUILD_VMLINUX_LIBS} \ |
| @@ -83,8 +76,7 @@ vmlinux_link() · 4 unmodified lines | ||
| 83 | 76 | -T ${lds} ${objects} |
| 84 | 77 | else |
| 85 | 78 | objects="-Wl,--whole-archive \ |
| 86 | − ${KBUILD_VMLINUX_INIT} \ | |
| 87 | − ${KBUILD_VMLINUX_MAIN} \ | |
| 79 | + ${KBUILD_VMLINUX_OBJS} \ | |
| 88 | 80 | -Wl,--no-whole-archive \ |
| 89 | 81 | -Wl,--start-group \ |
| 90 | 82 | ${KBUILD_VMLINUX_LIBS} \ |