Skip to content
Snippets Groups Projects
  • Wiebe, Wladislav (Nokia - DE/Ulm)'s avatar
    83da1bed
    modpost: make KBUILD_MODPOST_WARN also configurable for external modules · 83da1bed
    Wiebe, Wladislav (Nokia - DE/Ulm) authored
    
    Commit ea837f1c ("kbuild: make modpost processing configurable")
    was intended to give KBUILD_MODPOST_WARN flexibility to be configurable.
    Right now KBUILD_MODPOST_WARN gets just ignored when KBUILD_EXTMOD is
    set which happens per default when building modules out of the tree.
    
    This change gives the opportunity to define module build behaving also
    in case of out of tree builds and default will become exit on error.
    Errors which can be detected by the build should be trapped out of the box
    there, unless somebody wants to notice broken stuff later at runtime.
    
    As this patch changes the default behaving from warning to error,
    users can consider to fix it for external module builds by:
    - providing module symbol table via KBUILD_EXTRA_SYMBOLS for
      modules which are dependent
    - OR getting old behaving back by passing KBUILD_MODPOST_WARN to the build
    
    Signed-off-by: default avatarWladislav Wiebe <wladislav.wiebe@nokia.com>
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    83da1bed
    History
    modpost: make KBUILD_MODPOST_WARN also configurable for external modules
    Wiebe, Wladislav (Nokia - DE/Ulm) authored
    
    Commit ea837f1c ("kbuild: make modpost processing configurable")
    was intended to give KBUILD_MODPOST_WARN flexibility to be configurable.
    Right now KBUILD_MODPOST_WARN gets just ignored when KBUILD_EXTMOD is
    set which happens per default when building modules out of the tree.
    
    This change gives the opportunity to define module build behaving also
    in case of out of tree builds and default will become exit on error.
    Errors which can be detected by the build should be trapped out of the box
    there, unless somebody wants to notice broken stuff later at runtime.
    
    As this patch changes the default behaving from warning to error,
    users can consider to fix it for external module builds by:
    - providing module symbol table via KBUILD_EXTRA_SYMBOLS for
      modules which are dependent
    - OR getting old behaving back by passing KBUILD_MODPOST_WARN to the build
    
    Signed-off-by: default avatarWladislav Wiebe <wladislav.wiebe@nokia.com>
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Makefile.modpost 5.28 KiB
# SPDX-License-Identifier: GPL-2.0
# ===========================================================================
# Module versions
# ===========================================================================
#
# Stage one of module building created the following:
# a) The individual .o files used for the module
# b) A <module>.o file which is the .o files above linked together
# c) A <module>.mod file in $(MODVERDIR)/, listing the name of the
#    the preliminary <module>.o file, plus all .o files

# Stage 2 is handled by this file and does the following
# 1) Find all modules from the files listed in $(MODVERDIR)/
# 2) modpost is then used to
# 3)  create one <module>.mod.c file pr. module
# 4)  create one Module.symvers file with CRC for all exported symbols
# 5) compile all <module>.mod.c files
# 6) final link of the module to a <module.ko> file

# Step 3 is used to place certain information in the module's ELF
# section, including information such as:
#   Version magic (see include/linux/vermagic.h for full details)
#     - Kernel release
#     - SMP is CONFIG_SMP
#     - PREEMPT is CONFIG_PREEMPT
#     - GCC Version
#   Module info
#     - Module version (MODULE_VERSION)
#     - Module alias'es (MODULE_ALIAS)
#     - Module license (MODULE_LICENSE)
#     - See include/linux/module.h for more details

# Step 4 is solely used to allow module versioning in external modules,
# where the CRC of each module is retrieved from the Module.symvers file.

# KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined
# symbols in the final module linking stage
# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
# This is solely useful to speed up test compiles
PHONY := _modpost
_modpost: __modpost

include include/config/auto.conf
include scripts/Kbuild.include

# When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info
ifneq ($(KBUILD_EXTMOD),)

# set src + obj - they may be used when building the .mod.c file
obj := $(KBUILD_EXTMOD)
src := $(obj)

# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \
             $(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile)
endif

include scripts/Makefile.lib

kernelsymfile := $(objtree)/Module.symvers
modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers

# Step 1), find all modules listed in $(MODVERDIR)/
MODLISTCMD := find $(MODVERDIR) -name '*.mod' | xargs -r grep -h '\.ko$$' | sort -u
__modules := $(shell $(MODLISTCMD))
modules   := $(patsubst %.o,%.ko, $(wildcard $(__modules:.ko=.o)))

# Stop after building .o files if NOFINAL is set. Makes compile tests quicker
_modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))