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