kbuild: add arch specific post-link Makefile
Allow architectures to create arch/xxx/Makefile.postlink with targets for vmlinux, modules.ko, and clean, which will be invoked after final linking of vmlinux and modules. powerpc will use this to check vmlinux linker relocations for sanity, and may use it to fix up alternate instruction patch branch addresses. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michal Marek <mmarek@suse.com>
This commit is contained in:
Родитель
b67067f117
Коммит
fbe6e37dab
|
@ -41,6 +41,7 @@ This document describes the Linux kernel Makefiles.
|
|||
--- 6.8 Custom kbuild commands
|
||||
--- 6.9 Preprocessing linker scripts
|
||||
--- 6.10 Generic header files
|
||||
--- 6.11 Post-link pass
|
||||
|
||||
=== 7 Kbuild syntax for exported headers
|
||||
--- 7.1 header-y
|
||||
|
@ -1237,6 +1238,21 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
to list the file in the Kbuild file.
|
||||
See "7.4 generic-y" for further info on syntax etc.
|
||||
|
||||
--- 6.11 Post-link pass
|
||||
|
||||
If the file arch/xxx/Makefile.postlink exists, this makefile
|
||||
will be invoked for post-link objects (vmlinux and modules.ko)
|
||||
for architectures to run post-link passes on. Must also handle
|
||||
the clean target.
|
||||
|
||||
This pass runs after kallsyms generation. If the architecture
|
||||
needs to modify symbol locations, rather than manipulate the
|
||||
kallsyms, it may be easier to add another postlink target for
|
||||
.tmp_vmlinux? targets to be called from link-vmlinux.sh.
|
||||
|
||||
For example, powerpc uses this to check relocation sanity of
|
||||
the linked vmlinux file.
|
||||
|
||||
=== 7 Kbuild syntax for exported headers
|
||||
|
||||
The kernel includes a set of headers that is exported to userspace.
|
||||
|
|
10
Makefile
10
Makefile
|
@ -957,9 +957,12 @@ endif
|
|||
include/generated/autoksyms.h: FORCE
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh true
|
||||
|
||||
# Final link of vmlinux
|
||||
cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)
|
||||
quiet_cmd_link-vmlinux = LINK $@
|
||||
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
||||
|
||||
# Final link of vmlinux with optional arch pass after final link
|
||||
cmd_link-vmlinux = \
|
||||
$(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) ; \
|
||||
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
||||
|
||||
vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE
|
||||
+$(call if_changed,link-vmlinux)
|
||||
|
@ -1286,6 +1289,7 @@ $(clean-dirs):
|
|||
|
||||
vmlinuxclean:
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
|
||||
$(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
|
||||
|
||||
clean: archclean vmlinuxclean
|
||||
|
||||
|
|
|
@ -115,14 +115,18 @@ $(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE
|
|||
|
||||
targets += $(modules:.ko=.mod.o)
|
||||
|
||||
# Step 6), final link of the modules
|
||||
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
||||
|
||||
# Step 6), final link of the modules with optional arch pass after final link
|
||||
quiet_cmd_ld_ko_o = LD [M] $@
|
||||
cmd_ld_ko_o = $(LD) -r $(LDFLAGS) \
|
||||
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
||||
-o $@ $(filter-out FORCE,$^)
|
||||
cmd_ld_ko_o = \
|
||||
$(LD) -r $(LDFLAGS) \
|
||||
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
||||
-o $@ $(filter-out FORCE,$^) ; \
|
||||
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
||||
|
||||
$(modules): %.ko :%.o %.mod.o FORCE
|
||||
$(call if_changed,ld_ko_o)
|
||||
+$(call if_changed,ld_ko_o)
|
||||
|
||||
targets += $(modules)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче