|
@@ -231,10 +231,6 @@ endif
|
|
# Where to locate arch specific headers
|
|
# Where to locate arch specific headers
|
|
hdr-arch := $(SRCARCH)
|
|
hdr-arch := $(SRCARCH)
|
|
|
|
|
|
-ifeq ($(ARCH),m68knommu)
|
|
|
|
- hdr-arch := m68k
|
|
|
|
-endif
|
|
|
|
-
|
|
|
|
KCONFIG_CONFIG ?= .config
|
|
KCONFIG_CONFIG ?= .config
|
|
export KCONFIG_CONFIG
|
|
export KCONFIG_CONFIG
|
|
|
|
|
|
@@ -341,7 +337,6 @@ AWK = awk
|
|
GENKSYMS = scripts/genksyms/genksyms
|
|
GENKSYMS = scripts/genksyms/genksyms
|
|
INSTALLKERNEL := installkernel
|
|
INSTALLKERNEL := installkernel
|
|
DEPMOD = /sbin/depmod
|
|
DEPMOD = /sbin/depmod
|
|
-KALLSYMS = scripts/kallsyms
|
|
|
|
PERL = perl
|
|
PERL = perl
|
|
CHECK = sparse
|
|
CHECK = sparse
|
|
|
|
|
|
@@ -739,197 +734,21 @@ libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
|
|
libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
|
|
libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
|
|
libs-y := $(libs-y1) $(libs-y2)
|
|
libs-y := $(libs-y1) $(libs-y2)
|
|
|
|
|
|
-# Build vmlinux
|
|
|
|
-# ---------------------------------------------------------------------------
|
|
|
|
-# vmlinux is built from the objects selected by $(vmlinux-init) and
|
|
|
|
-# $(vmlinux-main). Most are built-in.o files from top-level directories
|
|
|
|
-# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
|
|
|
|
-# Ordering when linking is important, and $(vmlinux-init) must be first.
|
|
|
|
-#
|
|
|
|
-# vmlinux
|
|
|
|
-# ^
|
|
|
|
-# |
|
|
|
|
-# +-< $(vmlinux-init)
|
|
|
|
-# | +--< init/version.o + more
|
|
|
|
-# |
|
|
|
|
-# +--< $(vmlinux-main)
|
|
|
|
-# | +--< driver/built-in.o mm/built-in.o + more
|
|
|
|
-# |
|
|
|
|
-# +-< kallsyms.o (see description in CONFIG_KALLSYMS section)
|
|
|
|
-#
|
|
|
|
-# vmlinux version (uname -v) cannot be updated during normal
|
|
|
|
-# descending-into-subdirs phase since we do not yet know if we need to
|
|
|
|
-# update vmlinux.
|
|
|
|
-# Therefore this step is delayed until just before final link of vmlinux -
|
|
|
|
-# except in the kallsyms case where it is done just before adding the
|
|
|
|
-# symbols to the kernel.
|
|
|
|
-#
|
|
|
|
-# System.map is generated to document addresses of all kernel symbols
|
|
|
|
-
|
|
|
|
-vmlinux-init := $(head-y) $(init-y)
|
|
|
|
-vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
|
|
|
|
-vmlinux-all := $(vmlinux-init) $(vmlinux-main)
|
|
|
|
-vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds
|
|
|
|
-export KBUILD_VMLINUX_OBJS := $(vmlinux-all)
|
|
|
|
-
|
|
|
|
-# Rule to link vmlinux - also used during CONFIG_KALLSYMS
|
|
|
|
-# May be overridden by arch/$(ARCH)/Makefile
|
|
|
|
-quiet_cmd_vmlinux__ ?= LD $@
|
|
|
|
- cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \
|
|
|
|
- -T $(vmlinux-lds) $(vmlinux-init) \
|
|
|
|
- --start-group $(vmlinux-main) --end-group \
|
|
|
|
- $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^)
|
|
|
|
-
|
|
|
|
-# Generate new vmlinux version
|
|
|
|
-quiet_cmd_vmlinux_version = GEN .version
|
|
|
|
- cmd_vmlinux_version = set -e; \
|
|
|
|
- if [ ! -r .version ]; then \
|
|
|
|
- rm -f .version; \
|
|
|
|
- echo 1 >.version; \
|
|
|
|
- else \
|
|
|
|
- mv .version .old_version; \
|
|
|
|
- expr 0$$(cat .old_version) + 1 >.version; \
|
|
|
|
- fi; \
|
|
|
|
- $(MAKE) $(build)=init
|
|
|
|
-
|
|
|
|
-# Generate System.map
|
|
|
|
-quiet_cmd_sysmap = SYSMAP
|
|
|
|
- cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
|
|
|
|
-
|
|
|
|
-# Sort exception table at build time
|
|
|
|
-quiet_cmd_sortextable = SORTEX
|
|
|
|
- cmd_sortextable = $(objtree)/scripts/sortextable
|
|
|
|
-
|
|
|
|
-# Link of vmlinux
|
|
|
|
-# If CONFIG_KALLSYMS is set .version is already updated
|
|
|
|
-# Generate System.map and verify that the content is consistent
|
|
|
|
-# Use + in front of the vmlinux_version rule to silent warning with make -j2
|
|
|
|
-# First command is ':' to allow us to use + in front of the rule
|
|
|
|
-define rule_vmlinux__
|
|
|
|
- :
|
|
|
|
- $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version))
|
|
|
|
-
|
|
|
|
- $(call cmd,vmlinux__)
|
|
|
|
- $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
|
|
|
|
-
|
|
|
|
- $(if $(CONFIG_BUILDTIME_EXTABLE_SORT), \
|
|
|
|
- $(Q)$(if $($(quiet)cmd_sortextable), \
|
|
|
|
- echo ' $($(quiet)cmd_sortextable) vmlinux' &&) \
|
|
|
|
- $(cmd_sortextable) vmlinux)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- $(Q)$(if $($(quiet)cmd_sysmap), \
|
|
|
|
- echo ' $($(quiet)cmd_sysmap) System.map' &&) \
|
|
|
|
- $(cmd_sysmap) $@ System.map; \
|
|
|
|
- if [ $$? -ne 0 ]; then \
|
|
|
|
- rm -f $@; \
|
|
|
|
- /bin/false; \
|
|
|
|
- fi;
|
|
|
|
- $(verify_kallsyms)
|
|
|
|
-endef
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-ifdef CONFIG_KALLSYMS
|
|
|
|
-# Generate section listing all symbols and add it into vmlinux $(kallsyms.o)
|
|
|
|
-# It's a three stage process:
|
|
|
|
-# o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is
|
|
|
|
-# empty
|
|
|
|
-# Running kallsyms on that gives us .tmp_kallsyms1.o with
|
|
|
|
-# the right size - vmlinux version (uname -v) is updated during this step
|
|
|
|
-# o .tmp_vmlinux2 now has a __kallsyms section of the right size,
|
|
|
|
-# but due to the added section, some addresses have shifted.
|
|
|
|
-# From here, we generate a correct .tmp_kallsyms2.o
|
|
|
|
-# o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
|
|
|
|
-# o Verify that the System.map from vmlinux matches the map from
|
|
|
|
-# .tmp_vmlinux2, just in case we did not generate kallsyms correctly.
|
|
|
|
-# o If 'make KALLSYMS_EXTRA_PASS=1" was used, do an extra pass using
|
|
|
|
-# .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a
|
|
|
|
-# temporary bypass to allow the kernel to be built while the
|
|
|
|
-# maintainers work out what went wrong with kallsyms.
|
|
|
|
-
|
|
|
|
-last_kallsyms := 2
|
|
|
|
-
|
|
|
|
-ifdef KALLSYMS_EXTRA_PASS
|
|
|
|
-ifneq ($(KALLSYMS_EXTRA_PASS),0)
|
|
|
|
-last_kallsyms := 3
|
|
|
|
-endif
|
|
|
|
-endif
|
|
|
|
-
|
|
|
|
-kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
|
|
|
|
-
|
|
|
|
-define verify_kallsyms
|
|
|
|
- $(Q)$(if $($(quiet)cmd_sysmap), \
|
|
|
|
- echo ' $($(quiet)cmd_sysmap) .tmp_System.map' &&) \
|
|
|
|
- $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map
|
|
|
|
- $(Q)cmp -s System.map .tmp_System.map || \
|
|
|
|
- (echo Inconsistent kallsyms data; \
|
|
|
|
- echo This is a bug - please report about it; \
|
|
|
|
- echo Try "make KALLSYMS_EXTRA_PASS=1" as a workaround; \
|
|
|
|
- rm .tmp_kallsyms* ; /bin/false )
|
|
|
|
-endef
|
|
|
|
-
|
|
|
|
-# Update vmlinux version before link
|
|
|
|
-# Use + in front of this rule to silent warning about make -j1
|
|
|
|
-# First command is ':' to allow us to use + in front of this rule
|
|
|
|
-cmd_ksym_ld = $(cmd_vmlinux__)
|
|
|
|
-define rule_ksym_ld
|
|
|
|
- :
|
|
|
|
- +$(call cmd,vmlinux_version)
|
|
|
|
- $(call cmd,vmlinux__)
|
|
|
|
- $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
|
|
|
|
-endef
|
|
|
|
-
|
|
|
|
-# Generate .S file with all kernel symbols
|
|
|
|
-quiet_cmd_kallsyms = KSYM $@
|
|
|
|
- cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
|
|
|
|
- $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
|
|
|
|
|
|
+# Externally visible symbols (used by link-vmlinux.sh)
|
|
|
|
+export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
|
|
|
|
+export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)
|
|
|
|
+export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
|
|
|
+export LDFLAGS_vmlinux
|
|
|
|
|
|
-.tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
|
|
|
|
- $(call if_changed_dep,as_o_S)
|
|
|
|
|
|
+vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)
|
|
|
|
|
|
-.tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS)
|
|
|
|
- $(call cmd,kallsyms)
|
|
|
|
|
|
+# Final link of vmlinux
|
|
|
|
+ cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)
|
|
|
|
+quiet_cmd_link-vmlinux = LINK $@
|
|
|
|
|
|
-# .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version
|
|
|
|
-.tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE
|
|
|
|
- $(call if_changed_rule,ksym_ld)
|
|
|
|
-
|
|
|
|
-.tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE
|
|
|
|
- $(call if_changed,vmlinux__)
|
|
|
|
-
|
|
|
|
-.tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE
|
|
|
|
- $(call if_changed,vmlinux__)
|
|
|
|
-
|
|
|
|
-# Needs to visit scripts/ before $(KALLSYMS) can be used.
|
|
|
|
-$(KALLSYMS): scripts ;
|
|
|
|
-
|
|
|
|
-# Generate some data for debugging strange kallsyms problems
|
|
|
|
-debug_kallsyms: .tmp_map$(last_kallsyms)
|
|
|
|
-
|
|
|
|
-.tmp_map%: .tmp_vmlinux% FORCE
|
|
|
|
- ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@
|
|
|
|
-
|
|
|
|
-.tmp_map3: .tmp_map2
|
|
|
|
-
|
|
|
|
-.tmp_map2: .tmp_map1
|
|
|
|
-
|
|
|
|
-endif # ifdef CONFIG_KALLSYMS
|
|
|
|
-
|
|
|
|
-# Do modpost on a prelinked vmlinux. The finally linked vmlinux has
|
|
|
|
-# relevant sections renamed as per the linker script.
|
|
|
|
-quiet_cmd_vmlinux-modpost = LD $@
|
|
|
|
- cmd_vmlinux-modpost = $(LD) $(LDFLAGS) -r -o $@ \
|
|
|
|
- $(vmlinux-init) --start-group $(vmlinux-main) --end-group \
|
|
|
|
- $(filter-out $(vmlinux-init) $(vmlinux-main) FORCE ,$^)
|
|
|
|
-define rule_vmlinux-modpost
|
|
|
|
- :
|
|
|
|
- +$(call cmd,vmlinux-modpost)
|
|
|
|
- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
|
|
|
|
- $(Q)echo 'cmd_$@ := $(cmd_vmlinux-modpost)' > $(dot-target).cmd
|
|
|
|
-endef
|
|
|
|
-
|
|
|
|
-# vmlinux image - including updated kernel symbols
|
|
|
|
-vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE
|
|
|
|
|
|
+# Include targets which we want to
|
|
|
|
+# execute if the rest of the kernel build went well.
|
|
|
|
+vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE
|
|
ifdef CONFIG_HEADERS_CHECK
|
|
ifdef CONFIG_HEADERS_CHECK
|
|
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
|
|
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
|
|
endif
|
|
endif
|
|
@@ -939,22 +758,11 @@ endif
|
|
ifdef CONFIG_BUILD_DOCSRC
|
|
ifdef CONFIG_BUILD_DOCSRC
|
|
$(Q)$(MAKE) $(build)=Documentation
|
|
$(Q)$(MAKE) $(build)=Documentation
|
|
endif
|
|
endif
|
|
- $(call vmlinux-modpost)
|
|
|
|
- $(call if_changed_rule,vmlinux__)
|
|
|
|
- $(Q)rm -f .old_version
|
|
|
|
-
|
|
|
|
-# build vmlinux.o first to catch section mismatch errors early
|
|
|
|
-ifdef CONFIG_KALLSYMS
|
|
|
|
-.tmp_vmlinux1: vmlinux.o
|
|
|
|
-endif
|
|
|
|
-
|
|
|
|
-modpost-init := $(filter-out init/built-in.o, $(vmlinux-init))
|
|
|
|
-vmlinux.o: $(modpost-init) $(vmlinux-main) FORCE
|
|
|
|
- $(call if_changed_rule,vmlinux-modpost)
|
|
|
|
|
|
+ +$(call if_changed,link-vmlinux)
|
|
|
|
|
|
# The actual objects are generated when descending,
|
|
# The actual objects are generated when descending,
|
|
# make sure no implicit rule kicks in
|
|
# make sure no implicit rule kicks in
|
|
-$(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
|
|
|
|
|
|
+$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
|
|
|
|
|
|
# Handle descending into subdirectories listed in $(vmlinux-dirs)
|
|
# Handle descending into subdirectories listed in $(vmlinux-dirs)
|
|
# Preset locale variables to speed up the build process. Limit locale
|
|
# Preset locale variables to speed up the build process. Limit locale
|
|
@@ -1181,8 +989,6 @@ endif # CONFIG_MODULES
|
|
|
|
|
|
# Directories & files removed with 'make clean'
|
|
# Directories & files removed with 'make clean'
|
|
CLEAN_DIRS += $(MODVERDIR)
|
|
CLEAN_DIRS += $(MODVERDIR)
|
|
-CLEAN_FILES += vmlinux System.map \
|
|
|
|
- .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
|
|
|
|
|
|
|
|
# Directories & files removed with 'make mrproper'
|
|
# Directories & files removed with 'make mrproper'
|
|
MRPROPER_DIRS += include/config usr/include include/generated \
|
|
MRPROPER_DIRS += include/config usr/include include/generated \
|
|
@@ -1428,6 +1234,7 @@ scripts: ;
|
|
endif # KBUILD_EXTMOD
|
|
endif # KBUILD_EXTMOD
|
|
|
|
|
|
clean: $(clean-dirs)
|
|
clean: $(clean-dirs)
|
|
|
|
+ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
|
|
$(call cmd,rmdirs)
|
|
$(call cmd,rmdirs)
|
|
$(call cmd,rmfiles)
|
|
$(call cmd,rmfiles)
|
|
@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
|
|
@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
|
|
@@ -1568,14 +1375,6 @@ quiet_cmd_depmod = DEPMOD $(KERNELRELEASE)
|
|
cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \
|
|
cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \
|
|
$(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
|
|
$(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
|
|
|
|
|
|
-a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
|
|
|
|
- $(KBUILD_AFLAGS_KERNEL) \
|
|
|
|
- $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
|
|
|
|
- $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
|
|
|
|
-
|
|
|
|
-quiet_cmd_as_o_S = AS $@
|
|
|
|
-cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
|
|
|
|
-
|
|
|
|
# read all saved command lines
|
|
# read all saved command lines
|
|
|
|
|
|
targets := $(wildcard $(sort $(targets)))
|
|
targets := $(wildcard $(sort $(targets)))
|