From patchwork Sun Apr 24 19:08:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12825053 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 762FEC4332F for ; Sun, 24 Apr 2022 19:10:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237677AbiDXTNp (ORCPT ); Sun, 24 Apr 2022 15:13:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237881AbiDXTNl (ORCPT ); Sun, 24 Apr 2022 15:13:41 -0400 Received: from conuserg-10.nifty.com (conuserg-10.nifty.com [210.131.2.77]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24864E7B; Sun, 24 Apr 2022 12:10:12 -0700 (PDT) Received: from grover.sesame (133-32-177-133.west.xps.vectant.ne.jp [133.32.177.133]) (authenticated) by conuserg-10.nifty.com with ESMTP id 23OJ8o6J019069; Mon, 25 Apr 2022 04:09:06 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 23OJ8o6J019069 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1650827347; bh=WOe3oZ/NmIE8e4yEJrAXAYdjT2KGmqRh8o60iquhpCE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2nBxiTDuZHa2JK71yha/boSUZ/dkTpHf8jMbGBIpLISj/TjY/WvSTEMJqilieJcBD MqcUpIDL4gJWY37nDsReEo/h8MpqsmaJoJBBa3dNYNJArMbTGdIOR1I998WjN5Ft4O joBRzNNA2Fhz9JOYKiePT3BIjitjeA6eSLMKsKHQ1nUgLTfEAr2ZOMOPATkjcsbkGs MAnhyx/LUM7zuJHB9uRTrCQvFc/1/ijyeW3xddx7AHlLUHVzBN/dXHWaSx55v+9cSA KKV0jJXMMEBDdsYLJXyO+iM8EOLvacwrG9QVpPclTYlszYUdYE0IS05EvBZHhBOTVr tnD1etCjyuKQQ== X-Nifty-SrcIP: [133.32.177.133] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 25/27] kbuild: embed symbol versions at final link of vmlinux or modules Date: Mon, 25 Apr 2022 04:08:09 +0900 Message-Id: <20220424190811.1678416-26-masahiroy@kernel.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220424190811.1678416-1-masahiroy@kernel.org> References: <20220424190811.1678416-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org Do not update objects with version CRCs while the directory descending. Do it at the final link stage. Signed-off-by: Masahiro Yamada Reviewed-by: Nicolas Schier --- 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 .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_.o from .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_.o to .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