cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Makefile.modpost (4297B)


      1# SPDX-License-Identifier: GPL-2.0
      2# ===========================================================================
      3# Module versions
      4# ===========================================================================
      5#
      6# Stage one of module building created the following:
      7# a) The individual .o files used for the module
      8# b) A <module>.o file which is the .o files above linked together
      9# c) A <module>.mod file, listing the name of the preliminary <module>.o file,
     10#    plus all .o files
     11# d) modules.order, which lists all the modules
     12
     13# Stage 2 is handled by this file and does the following
     14# 1) Find all modules listed in modules.order
     15# 2) modpost is then used to
     16# 3)  create one <module>.mod.c file per module
     17# 4)  create one Module.symvers file with CRC for all exported symbols
     18
     19# Step 3 is used to place certain information in the module's ELF
     20# section, including information such as:
     21#   Version magic (see include/linux/vermagic.h for full details)
     22#     - Kernel release
     23#     - SMP is CONFIG_SMP
     24#     - PREEMPT is CONFIG_PREEMPT[_RT]
     25#     - GCC Version
     26#   Module info
     27#     - Module version (MODULE_VERSION)
     28#     - Module alias'es (MODULE_ALIAS)
     29#     - Module license (MODULE_LICENSE)
     30#     - See include/linux/module.h for more details
     31
     32# Step 4 is solely used to allow module versioning in external modules,
     33# where the CRC of each module is retrieved from the Module.symvers file.
     34
     35# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
     36# This is solely useful to speed up test compiles
     37
     38PHONY := __modpost
     39__modpost:
     40
     41include include/config/auto.conf
     42include $(srctree)/scripts/Kbuild.include
     43
     44MODPOST = scripts/mod/modpost								\
     45	$(if $(CONFIG_MODVERSIONS),-m)							\
     46	$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a)					\
     47	$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E)					\
     48	-o $@
     49
     50ifdef MODPOST_VMLINUX
     51
     52quiet_cmd_modpost = MODPOST $@
     53      cmd_modpost = $(MODPOST) $<
     54
     55vmlinux.symvers: vmlinux.o
     56	$(call cmd,modpost)
     57
     58__modpost: vmlinux.symvers
     59
     60else
     61
     62ifeq ($(KBUILD_EXTMOD),)
     63
     64input-symdump := vmlinux.symvers
     65output-symdump := modules-only.symvers
     66
     67quiet_cmd_cat = GEN     $@
     68      cmd_cat = cat $(real-prereqs) > $@
     69
     70ifneq ($(wildcard vmlinux.symvers),)
     71
     72__modpost: Module.symvers
     73Module.symvers: vmlinux.symvers modules-only.symvers FORCE
     74	$(call if_changed,cat)
     75
     76targets += Module.symvers
     77
     78endif
     79
     80else
     81
     82# set src + obj - they may be used in the modules's Makefile
     83obj := $(KBUILD_EXTMOD)
     84src := $(obj)
     85
     86# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
     87include $(or $(wildcard $(src)/Kbuild), $(src)/Makefile)
     88
     89# modpost option for external modules
     90MODPOST += -e
     91
     92input-symdump := Module.symvers $(KBUILD_EXTRA_SYMBOLS)
     93output-symdump := $(KBUILD_EXTMOD)/Module.symvers
     94
     95endif
     96
     97existing-input-symdump := $(wildcard $(input-symdump))
     98
     99# modpost options for modules (both in-kernel and external)
    100MODPOST += \
    101	$(addprefix -i ,$(existing-input-symdump)) \
    102	$(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS)) \
    103	$(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N)
    104
    105# 'make -i -k' ignores compile errors, and builds as many modules as possible.
    106ifneq ($(findstring i,$(filter-out --%,$(MAKEFLAGS))),)
    107MODPOST += -n
    108endif
    109
    110# Clear VPATH to not search for *.symvers in $(srctree). Check only $(objtree).
    111VPATH :=
    112$(input-symdump):
    113	@echo >&2 'WARNING: Symbol version dump "$@" is missing.'
    114	@echo >&2 '         Modules may not have dependencies or modversions.'
    115	@echo >&2 '         You may get many unresolved symbol warnings.'
    116
    117# KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined symbols
    118ifneq ($(KBUILD_MODPOST_WARN)$(filter-out $(existing-input-symdump), $(input-symdump)),)
    119MODPOST += -w
    120endif
    121
    122# Read out modules.order to pass in modpost.
    123# Otherwise, allmodconfig would fail with "Argument list too long".
    124quiet_cmd_modpost = MODPOST $@
    125      cmd_modpost = sed 's/ko$$/o/' $< | $(MODPOST) -T -
    126
    127$(output-symdump): $(MODORDER) $(input-symdump) FORCE
    128	$(call if_changed,modpost)
    129
    130targets += $(output-symdump)
    131
    132__modpost: $(output-symdump)
    133ifneq ($(KBUILD_MODPOST_NOFINAL),1)
    134	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal
    135endif
    136
    137PHONY += FORCE
    138FORCE:
    139
    140existing-targets := $(wildcard $(sort $(targets)))
    141
    142-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
    143
    144endif
    145
    146.PHONY: $(PHONY)