lkml.org 
[lkml]   [2022]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 25/27] kbuild: embed symbol versions at final link of vmlinux or modules
    Date
    Do not update objects with version CRCs while the directory descending.

    Do it at the final link stage.

    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    ---

    scripts/Makefile.build | 19 +++----------------
    scripts/Makefile.modfinal | 3 ++-
    scripts/link-vmlinux.sh | 4 +++-
    3 files changed, 8 insertions(+), 18 deletions(-)

    diff --git a/scripts/Makefile.build b/scripts/Makefile.build
    index e03e85c90b26..aadc16e04632 100644
    --- a/scripts/Makefile.build
    +++ b/scripts/Makefile.build
    @@ -162,12 +162,9 @@ ifdef CONFIG_MODVERSIONS
    # o if <file>.o doesn't contain a __ksymtab version, i.e. does
    # not export symbols, it's done.
    # o otherwise, we calculate symbol versions using the good old
    -# genksyms on the preprocessed source and postprocess them in a way
    -# that they are usable as a linker script
    -# o generate .tmp_<file>.o from <file>.o using the linker to
    -# replace the unresolved symbols __crc_exported_symbol with
    -# the actual value of the checksum generated by genksyms
    -# o remove .tmp_<file>.o to <file>.o
    +# genksyms on the preprocessed source and dump them into .cmd file.
    +# modpost will parse .cmd files to retrieve versions to create linker
    +# scripts that are fed to the final linking of vmlinux or modules.

    # Generate .o.symversions files for each .o with exported symbols, and link these
    # to the kernel and/or modules at the end.
    @@ -183,12 +180,6 @@ gen_symversions = \

    cmd_gen_symversions_c = $(call gen_symversions,c)

    -cmd_modversions = \
    - if [ -r $@.symversions ]; then \
    - $(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \
    - -T $@.symversions; \
    - mv -f $(@D)/.tmp_$(@F) $@; \
    - fi
    endif

    ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
    @@ -268,7 +259,6 @@ define rule_cc_o_c
    $(call cmd,checkdoc)
    $(call cmd,gen_objtooldep)
    $(call cmd,gen_symversions_c)
    - $(if $(CONFIG_LTO_CLANG),,$(call cmd,modversions))
    $(call cmd,record_mcount)
    endef

    @@ -277,7 +267,6 @@ define rule_as_o_S
    $(call cmd,gen_ksymdeps)
    $(call cmd,gen_objtooldep)
    $(call cmd,gen_symversions_S)
    - $(call cmd,modversions)
    endef

    # Built-in and composite module parts
    @@ -291,8 +280,6 @@ ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
    quiet_cmd_cc_prelink_modules = LD [M] $@
    cmd_cc_prelink_modules = \
    $(LD) $(ld_flags) -r -o $@ \
    - $(shell [ -s $(@:.prelink.o=.o.symversions) ] && \
    - echo -T $(@:.prelink.o=.o.symversions)) \
    --whole-archive $(filter-out FORCE,$^) \
    $(cmd_objtool)

    diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal
    index 7f39599e9fae..d429e3f9ae1d 100644
    --- a/scripts/Makefile.modfinal
    +++ b/scripts/Makefile.modfinal
    @@ -34,6 +34,7 @@ quiet_cmd_ld_ko_o = LD [M] $@
    cmd_ld_ko_o += \
    $(LD) -r $(KBUILD_LDFLAGS) \
    $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
    + $(addprefix -T, $(filter %.symver.lds, $(real-prereqs)))\
    -T scripts/module.lds -o $@ $(filter %.o, $^); \
    $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)

    @@ -56,7 +57,7 @@ if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check), \


    # Re-generate module BTFs if either module's .ko or vmlinux changed
    -$(modules): %.ko: %$(mod-prelink-ext).o %.mod.o scripts/module.lds $(if $(KBUILD_BUILTIN),vmlinux) FORCE
    +$(modules): %.ko: %$(mod-prelink-ext).o %.mod.o $(if $(CONFIG_MODVERSIONS), %.symver.lds) scripts/module.lds $(if $(KBUILD_BUILTIN),vmlinux) FORCE
    +$(call if_changed_except,ld_ko_o,vmlinux)
    ifdef CONFIG_DEBUG_INFO_BTF_MODULES
    +$(if $(newer-prereqs),$(call cmd,btf_ko))
    diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
    index d2c193f82004..66a115f204eb 100755
    --- a/scripts/link-vmlinux.sh
    +++ b/scripts/link-vmlinux.sh
    @@ -90,7 +90,6 @@ modpost_link()

    if is_enabled CONFIG_MODVERSIONS; then
    gen_symversions
    - lds="${lds} -T .tmp_symversions.lds"
    fi

    # This might take a while, so indicate that we're doing
    @@ -196,6 +195,9 @@ vmlinux_link()
    fi

    ldflags="${ldflags} ${wl}--script=${objtree}/${KBUILD_LDS}"
    + if is_enabled CONFIG_MODVERSIONS; then
    + ldflags="${ldflags} ${wl}--script=vmlinux.symver.lds"
    + fi

    # The kallsyms linking does not need debug symbols included.
    if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then
    --
    2.32.0
    \
     
     \ /
      Last update: 2022-04-24 21:12    [W:3.169 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site