diff options
| -rw-r--r-- | Makefile | 59 | ||||
| -rw-r--r-- | arch/i386/vmlinux.lds.S | 3 |
2 files changed, 23 insertions, 39 deletions
@@ -285,8 +285,8 @@ export MODLIB vmlinux-objs := $(HEAD) $(init-y) $(core-y) $(libs-y) $(drivers-y) $(net-y) -quiet_cmd_ld_tmp_vmlinux = LD $@ -define cmd_ld_tmp_vmlinux +quiet_cmd_link_vmlinux = LD $@ +define cmd_link_vmlinux $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) $(HEAD) $(init-y) \ --start-group \ $(core-y) \ @@ -294,19 +294,21 @@ define cmd_ld_tmp_vmlinux $(drivers-y) \ $(net-y) \ --end-group \ + $(filter $(kallsyms.o),$^) \ -o $@ endef # set -e makes the rule exit immediately on error -define rule_ld_tmp_vmlinux +define rule_vmlinux set -e echo ' Generating build number' . scripts/mkversion > .tmp_version mv -f .tmp_version .version +$(call descend,init,) - $(call cmd,ld_tmp_vmlinux) - echo 'cmd_$@ := $(cmd_ld_tmp_vmlinux)' > $(@D)/.$(@F).cmd + $(call cmd,link_vmlinux) + echo 'cmd_$@ := $(cmd_link_vmlinux)' > $(@D)/.$(@F).cmd + $(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map endef LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s @@ -325,9 +327,10 @@ LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s ifdef CONFIG_KALLSYMS -final-objs += .tmp_kallsyms.o +kallsyms.o := .tmp_kallsyms.o quiet_cmd_kallsyms = KSYM $@ +cmd_kallsyms = $(KALLSYMS) $< > $@ cmd_kallsyms = \ $(KALLSYMS) $< > .tmp_kallsyms1.o; \ $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) .tmp_vmlinux .tmp_kallsyms1.o \ @@ -338,32 +341,25 @@ cmd_kallsyms = \ .tmp_kallsyms.o: .tmp_vmlinux $(call cmd,kallsyms) -endif +# After generating .tmp_vmlinux just like vmlinux, decrement the version +# number again, so the final vmlinux gets the same one. +# Ignore return value of 'expr'. -# Link a temporary vmlinux for postprocessing -# (e.g. kallsyms) +define rule_.tmp_vmlinux + $(rule_vmlinux) + if expr 0`cat .version` - 1 > .tmp_version; then true; fi + mv -f .tmp_version .version +endef .tmp_vmlinux: $(vmlinux-objs) arch/$(ARCH)/vmlinux.lds.s FORCE - $(call if_changed_rule,ld_tmp_vmlinux) - -# Finally the vmlinux rule - -quiet_cmd_ld_vmlinux = LD $(echo_target) -cmd_ld_vmlinux = $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \ - $(filter-out FORCE,$^) -o $@ + $(call if_changed_rule,.tmp_vmlinux) -define rule_ld_vmlinux - set -e - $(call cmd,ld_vmlinux) - echo 'cmd_$@ := $(cmd_ld_vmlinux)' > $(@D)/.$(@F).cmd - $(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map -endef +endif -# Link the actual vmlinux, which is temporary one from above, -# and possibly additional sections given in $(final-objs) +# Finally the vmlinux rule -vmlinux: .tmp_vmlinux $(final-objs) arch/$(ARCH)/vmlinux.lds.s FORCE - $(call if_changed_rule,ld_vmlinux) +vmlinux: $(vmlinux-objs) $(kallsyms.o) arch/$(ARCH)/vmlinux.lds.s FORCE + $(call if_changed_rule,vmlinux) # The actual objects are generated when descending, # make sure no implicit rule kicks in @@ -881,17 +877,6 @@ ifneq ($(cmd_files),) include $(cmd_files) endif -# function to only execute the passed command if necessary - -if_changed = $(if $(strip $? \ - $(filter-out $(cmd_$(1)),$(cmd_$@))\ - $(filter-out $(cmd_$@),$(cmd_$(1)))),\ - @set -e; \ - $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \ - $(cmd_$(1)); \ - echo 'cmd_$@ := $(cmd_$(1))' > $(@D)/.$(@F).cmd) - - # execute the command and also postprocess generated .d dependencies # file diff --git a/arch/i386/vmlinux.lds.S b/arch/i386/vmlinux.lds.S index 09570eab04d8..4469f4e5d584 100644 --- a/arch/i386/vmlinux.lds.S +++ b/arch/i386/vmlinux.lds.S @@ -49,7 +49,6 @@ SECTIONS __setup_end = .; __initcall_start = .; .initcall.init : { - *(.initcall.init) *(.initcall1.init) *(.initcall2.init) *(.initcall3.init) @@ -73,7 +72,7 @@ SECTIONS __nosave_end = .; . = ALIGN(4096); - .data.page_aligned : { *(.data.page_aligned) *(.data.idt) } + .data.page_aligned : { *(.data.idt) } . = ALIGN(32); .data.cacheline_aligned : { *(.data.cacheline_aligned) } |
