From patchwork Thu Aug 19 00:57:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445749 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A1C82C4320A for ; Thu, 19 Aug 2021 00:58:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 84A81608FE for ; Thu, 19 Aug 2021 00:58:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234261AbhHSA65 (ORCPT ); Wed, 18 Aug 2021 20:58:57 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:59856 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232954AbhHSA6x (ORCPT ); Wed, 18 Aug 2021 20:58:53 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4k017219; Thu, 19 Aug 2021 09:57:47 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4k017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334668; bh=PVxZwZza2Bwkv7dBpcaLQNZGPpDeheJxOo2r93CeIqE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=N+GqvQNu/si67k8jdd7tyUw0KDpz4xlhmzZtX5ViCyaO/7FY8KSmV4jkyg0FCWEjG u6lSRZ4aAUAPoeOjMhClqhQ/iDPp5AiDgoHNVtqbk6bHaj+7tyRaTgw1tzt9XZURsN QwkgjnwEN7gvdt3HdGXGl2L+f/CaTdwoPeDUuklm+uPUxzMtdHdBsMEfvjkXkBr2zi iB4WtuNewJDP/8JM482U9DhRDFqfwWJYOEVmf+lTlyEyCkmFvy85jm7oWK2deDYLwQ Z77DCCv4xvC0XgKUQZA2HS6lGl9uGDwcWLjr2AdTIhIb4tOwWVLLZ5qZsXOR9ZCCGQ VnW57SQ0ObJhA== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 01/13] kbuild: move objtool_args back to scripts/Makefile.build Date: Thu, 19 Aug 2021 09:57:32 +0900 Message-Id: <20210819005744.644908-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org Commit b1a1a1a09b46 ("kbuild: lto: postpone objtool") moved objtool_args to Makefile.lib, so the arguments can be used in Makefile.modfinal as well as Makefile.build. With commit 2b1d7fc05467 ("kbuild: Fix TRIM_UNUSED_KSYMS with LTO_CLANG"), module LTO linking came back to scripts/Makefile.build again. So, there is no more reason to keep objtool_args separately in scripts/Makefile.lib. Get it back to the original place, close to the objtool command. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 13 +++++++++++++ scripts/Makefile.lib | 12 ------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index ea549579bfb7..31154e44c251 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -222,6 +222,19 @@ cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT ifdef CONFIG_STACK_VALIDATION + +# Objtool arguments are also needed for modfinal with LTO, so we define +# then here to avoid duplication. +objtool_args = \ + $(if $(CONFIG_UNWINDER_ORC),orc generate,check) \ + $(if $(part-of-module), --module,) \ + $(if $(CONFIG_FRAME_POINTER),, --no-fp) \ + $(if $(or $(CONFIG_GCOV_KERNEL),$(CONFIG_LTO_CLANG)), \ + --no-unreachable,) \ + $(if $(CONFIG_RETPOLINE), --retpoline,) \ + $(if $(CONFIG_X86_SMAP), --uaccess,) \ + $(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount,) + ifndef CONFIG_LTO_CLANG __objtool_obj := $(objtree)/tools/objtool/objtool diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index af1c920a585c..34c4c11c4bc1 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -232,18 +232,6 @@ ifeq ($(CONFIG_LTO_CLANG),y) mod-prelink-ext := .lto endif -# Objtool arguments are also needed for modfinal with LTO, so we define -# then here to avoid duplication. -objtool_args = \ - $(if $(CONFIG_UNWINDER_ORC),orc generate,check) \ - $(if $(part-of-module), --module,) \ - $(if $(CONFIG_FRAME_POINTER),, --no-fp) \ - $(if $(or $(CONFIG_GCOV_KERNEL),$(CONFIG_LTO_CLANG)), \ - --no-unreachable,) \ - $(if $(CONFIG_RETPOLINE), --retpoline,) \ - $(if $(CONFIG_X86_SMAP), --uaccess,) \ - $(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount,) - # Useful for describing the dependency of composite objects # Usage: # $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add) From patchwork Thu Aug 19 00:57:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445753 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E61C6C432BE for ; Thu, 19 Aug 2021 00:58:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C61C2610E9 for ; Thu, 19 Aug 2021 00:58:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235035AbhHSA7N (ORCPT ); Wed, 18 Aug 2021 20:59:13 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60148 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234965AbhHSA7L (ORCPT ); Wed, 18 Aug 2021 20:59:11 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4l017219; Thu, 19 Aug 2021 09:57:48 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4l017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334669; bh=z5Enux3X+2bxuEr7VV8Kw02JAFcpN8X+hEDG69gW3MI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hgT+MEhaLtUUwZYJum0sLX0NN+DTtcKN6Hd1N1YnTvYwkZHJCai7ieYZd69yYTlqJ 1qRm9B/WyIZyz6hjfltXHYa4lpg+pEl4sCvYPxChqnTu/QqkkCzFc0tmZ1YlPO+lQx nOxLIfBgRbnjFufJBnpO9zbDgnjPXq5O3fpLOPQ3suk6GhXP5b8pIKuzrVUEu6E0gl yt9egM4I4B7bdgX26uO8yEk33gYFgbVkYbU8au+7WvyvGc0Ba0jONgKp4I0jcOdiNy 7R6PJBmrOG1LbwNqrABwf/D5PWGDtLWz79upgLBYVO5Eplo75IFHnPm9W+gwgjXhfy TJB1bRIERueHA== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , clang-built-linux@googlegroups.com Subject: [PATCH 02/13] gen_compile_commands: extract compiler command from a series of commands Date: Thu, 19 Aug 2021 09:57:33 +0900 Message-Id: <20210819005744.644908-3-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org The current gen_compile_commands.py assumes that objects are always built by a single command. It makes sense to support cases where objects are built by a series of commands: cmd_ := ; One use-case is is a compiler command, and is an objtool command. It allows *.cmd files to contain an objtool command so that any change in it triggers object rebuilds. If ; appears after the C source file, take the first command. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/clang-tools/gen_compile_commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/clang-tools/gen_compile_commands.py b/scripts/clang-tools/gen_compile_commands.py index b7e9ecf16e56..0033eedce003 100755 --- a/scripts/clang-tools/gen_compile_commands.py +++ b/scripts/clang-tools/gen_compile_commands.py @@ -18,7 +18,7 @@ _DEFAULT_OUTPUT = 'compile_commands.json' _DEFAULT_LOG_LEVEL = 'WARNING' _FILENAME_PATTERN = r'^\..*\.cmd$' -_LINE_PATTERN = r'^cmd_[^ ]*\.o := (.* )([^ ]*\.c)$' +_LINE_PATTERN = r'^cmd_[^ ]*\.o := (.* )([^ ]*\.c) *(;|$)' _VALID_LOG_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'] # The tools/ directory adopts a different build system, and produces .cmd # files in a different format. Do not support it. From patchwork Thu Aug 19 00:57:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445747 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF495C4338F for ; Thu, 19 Aug 2021 00:58:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C2652610E8 for ; Thu, 19 Aug 2021 00:58:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234194AbhHSA65 (ORCPT ); Wed, 18 Aug 2021 20:58:57 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:59855 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230180AbhHSA6x (ORCPT ); Wed, 18 Aug 2021 20:58:53 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4m017219; Thu, 19 Aug 2021 09:57:49 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4m017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334669; bh=DubxqZkgQvnO3PgHtqG3et7QlJ4rVJ/qaJqyb8Cduvo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GglksW6wZjXDkkYW0nfXPktV/AXlSz4cttFtw4hiwgjZBi3WksFaFPgwNbpkCKivo 2YV1l1PmfO/q4jHD/gc+sS/XRIlGmu/+XtSdi+jbX4kJcVfPbMat7eNuFRhkgO41/G 52FSCTvKaIHsy8ghOY3CUwraUNZ38a/gQ3LXYqodRNswGQTMKCWWWJM39huu2OvQfK RuHkgKaVnpBrHsi52nCcT4U/TmL1yNvVJCfIGXDPAQM+sid+8uL6tbZarl+mUcpqK/ 4Ksdu3JhfBcBrS4VP/GGERVogSHEebNm/qApUwi6WZ8hJ5odLiylSspyJDwUWHADgj YPxRQFEyVaNpg== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 03/13] kbuild: detect objtool changes correctly and remove .SECONDEXPANSION Date: Thu, 19 Aug 2021 09:57:34 +0900 Message-Id: <20210819005744.644908-4-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org This reverts commit 8852c5524029 ("kbuild: Fix objtool dependency for 'OBJECT_FILES_NON_STANDARD_ := n'"), and fix the dependency in a cleaner way. Using .SECONDEXPANSION is expensive since Makefile.build is parsed twice every time, and the escaping dollars makes the code unreadable. Adding include/config/* as dependency is not maintainable either because objtool_args is dependent on more CONFIG options. A better fix is to include the objtool command in *.cmd files so any command change is naturally detected by if_change. Signed-off-by: Masahiro Yamada --- scripts/Makefile.build | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 31154e44c251..3e4cd1439cd4 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -155,7 +155,7 @@ $(obj)/%.ll: $(src)/%.c FORCE # (See cmd_cc_o_c + relevant part of rule_cc_o_c) quiet_cmd_cc_o_c = CC $(quiet_modtag) $@ - cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< + cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< $(cmd_objtool) ifdef CONFIG_MODVERSIONS # When module versioning is enabled the following steps are executed: @@ -223,6 +223,8 @@ endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT ifdef CONFIG_STACK_VALIDATION +objtool := $(objtree)/tools/objtool/objtool + # Objtool arguments are also needed for modfinal with LTO, so we define # then here to avoid duplication. objtool_args = \ @@ -237,26 +239,19 @@ objtool_args = \ ifndef CONFIG_LTO_CLANG -__objtool_obj := $(objtree)/tools/objtool/objtool - # 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory # 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file # 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file cmd_objtool = $(if $(patsubst y%,, \ $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ - $(__objtool_obj) $(objtool_args) $@) -objtool_obj = $(if $(patsubst y%,, \ - $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ - $(__objtool_obj)) + ; $(objtool) $(objtool_args) $@) + +# Rebuild all objects when objtool is updated +objtool_dep = $(objtool) endif # CONFIG_LTO_CLANG endif # CONFIG_STACK_VALIDATION -# Rebuild all objects when objtool changes, or is enabled/disabled. -objtool_dep = $(objtool_obj) \ - $(wildcard include/config/ORC_UNWINDER \ - include/config/STACK_VALIDATION) - ifdef CONFIG_TRIM_UNUSED_KSYMS cmd_gen_ksymdeps = \ $(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd @@ -270,7 +265,6 @@ define rule_cc_o_c $(call cmd,gen_ksymdeps) $(call cmd,checksrc) $(call cmd,checkdoc) - $(call cmd,objtool) $(call cmd,modversions_c) $(call cmd,record_mcount) endef @@ -278,13 +272,11 @@ endef define rule_as_o_S $(call cmd_and_fixdep,as_o_S) $(call cmd,gen_ksymdeps) - $(call cmd,objtool) $(call cmd,modversions_S) endef # Built-in and composite module parts -.SECONDEXPANSION: -$(obj)/%.o: $(src)/%.c $(recordmcount_source) $$(objtool_dep) FORCE +$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE $(call if_changed_rule,cc_o_c) $(call cmd,force_checksrc) @@ -367,7 +359,7 @@ $(obj)/%.s: $(src)/%.S FORCE $(call if_changed_dep,cpp_s_S) quiet_cmd_as_o_S = AS $(quiet_modtag) $@ - cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< + cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< $(cmd_objtool) ifdef CONFIG_ASM_MODVERSIONS @@ -386,7 +378,7 @@ cmd_modversions_S = \ fi endif -$(obj)/%.o: $(src)/%.S $$(objtool_dep) FORCE +$(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE $(call if_changed_rule,as_o_S) targets += $(filter-out $(subdir-builtin), $(real-obj-y)) From patchwork Thu Aug 19 00:57:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445755 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C7D00C432BE for ; Thu, 19 Aug 2021 00:58:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AA367610E9 for ; Thu, 19 Aug 2021 00:58:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235055AbhHSA7V (ORCPT ); Wed, 18 Aug 2021 20:59:21 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60437 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234866AbhHSA7S (ORCPT ); Wed, 18 Aug 2021 20:59:18 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4n017219; Thu, 19 Aug 2021 09:57:49 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4n017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334670; bh=gaqwRy+nMDx+G9AJw0KH7WOLfyzuERLberPC9n6U4x4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=StzZXVCDTkKp4tp+dPnbRMWYf6lqRT4P9RXft+VXXt3XVuy+WanY2egGU7bmQhoKK EswhCqtNaovuG2zWv5rYBLRdjH3uAjRVjpQgCVmDMTUZNB7V3RwKpYqV70hyZfioUR ufwgHx/0UNbh6SZSsj5ZighhHHutrlbzMUqfJhxJYPa72PUQUPyF8Hg9Ag6sLzLlJl P7AxFwsmZYbGU+HmG65gvp0J9csWm8jD9RHjYIPuzevlZAurPXot8A6f20J0ysg2+2 rYa69dJOTIgnQz3uyWPj+tM8DLlLb6GdGvrp2biaM05OWmjr6imNkA/t4cmgUzz+bK yLDTamJXwAzsw== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 04/13] kbuild: remove unused quiet_cmd_update_lto_symversions Date: Thu, 19 Aug 2021 09:57:35 +0900 Message-Id: <20210819005744.644908-5-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org This is not used anywhere. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 3e4cd1439cd4..279363266455 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -411,7 +411,6 @@ $(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ; $(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ; # combine symversions for later processing -quiet_cmd_update_lto_symversions = SYMVER $@ ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y) cmd_update_lto_symversions = \ rm -f $@.symversions \ From patchwork Thu Aug 19 00:57:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445763 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7FDA5C43214 for ; Thu, 19 Aug 2021 00:58:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6AF8E610E9 for ; Thu, 19 Aug 2021 00:58:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234600AbhHSA7X (ORCPT ); Wed, 18 Aug 2021 20:59:23 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60444 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234931AbhHSA7T (ORCPT ); Wed, 18 Aug 2021 20:59:19 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4o017219; Thu, 19 Aug 2021 09:57:50 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4o017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334670; bh=aFQt+IVlSY7VLNtdSb4DtL9wrHmQt9RjdrLQzGtwW6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jXmbQ+3NQYTpjLgAXW5VhO4u/wFf6hZrg/rxg8hrD7UGWLLF9l6Npdw8OGdiQ2H/g ++1fE+NwuZ+L3uq+IkkpkVrqL9BJRxh3J0NIY+rKQAlJf2TiLUaidypx07KneIyfXa DW2VMVTpMAfOk3jm+LaTm7NE+65r+hq5avA5kaSH5boFYFlDrPE6iTxpI9rks5UC14 vUOwMMnpzH5mZVdxC/SzNAJ37TKzBkKxRUeHRsdxr/LZDx1cTopDaODWrpHKQTaKnJ 4WGKWF688N+hj5FtlencfSqHU5Pt7MQsgVRhEduYG55PpnA9BTY8clFkeOhRG91GCs Ofp+lPuCXTlfg== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 05/13] kbuild: remove stale *.symversions Date: Thu, 19 Aug 2021 09:57:36 +0900 Message-Id: <20210819005744.644908-6-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org cmd_update_lto_symversions merges all the existing *.symversions, but some of them might be stale. If the last EXPORT_SYMBOL is removed from a C file, the *.symversions file is not deleted or updated. It contains stale CRCs, which will be used for linking the vmlinux or modules. It is not a big deal when the EXPORT_SYMBOL is really removed. However, when the EXPORT_SYMBOL is moved to another file, the same __crc_ will appear twice in the merged *.symversions, possibly with different CRCs if the function argument is changed at the same time. It would cause potential breakage of module versioning. If no EXPORT_SYMBOL is found, let's remove *.symversions explicitly. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 279363266455..585dae34746a 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -177,6 +177,8 @@ cmd_modversions_c = \ if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \ $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ > $@.symversions; \ + else \ + rm -f $@.symversions; \ fi; else cmd_modversions_c = \ From patchwork Thu Aug 19 00:57:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445769 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C87DC432BE for ; Thu, 19 Aug 2021 00:58:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2317F610E9 for ; Thu, 19 Aug 2021 00:58:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235385AbhHSA7b (ORCPT ); Wed, 18 Aug 2021 20:59:31 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60770 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235459AbhHSA73 (ORCPT ); Wed, 18 Aug 2021 20:59:29 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4p017219; Thu, 19 Aug 2021 09:57:51 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4p017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334671; bh=VvcOubkXOX4J0f3OkqzcDKTBLlnxU8IhaGu8KDtg/Ng=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T/yfefgkVlzpMKWgUcutzo6ci360DwJwou0ptm0VQtw8T6LXvtPFy+le+1VV5YrGp njDMZYwioXs77sQSU7Irbo5JlpJEZPD40NXkP92yH5OpEShqszaHEt8fmOcEU0TTFp yIlkasXocLwvmd4y2NohFnXDJB5yBHnOaWJeGFyVHTdwqyC60VoUXuMTBICkyaNvNR SGxES4rd+pEYR1t6zJftldhAoWcaZURzTe+8nH9mpd+92WTNU9g/aKUW1e4vKid1kB vqdld3Nl2U2uqpUb7dmqli+jFWzApyMfMf0WfTMvDN3N3RJzIq+eEXJk+1zUQTZxFq tSO7she8o0VhQ== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nathan Chancellor , Nick Desaulniers , clang-built-linux@googlegroups.com Subject: [PATCH 06/13] kbuild: merge vmlinux_link() between the ordinary link and Clang LTO Date: Thu, 19 Aug 2021 09:57:37 +0900 Message-Id: <20210819005744.644908-7-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org When Clang LTO is enabled, vmlinux_link() reuses vmlinux.o instead of linking ${KBUILD_VMLINUX_OBJS} and ${KBUILD_VMLINUX_LIBS} again. That is the only difference here, so merge the similar code. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/link-vmlinux.sh | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index 36ef7b37fc5d..a6c4d0bce3ba 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -154,12 +154,23 @@ vmlinux_link() local objects local strip_debug local map_option + local objs + local libs info LD ${output} # skip output file argument shift + if [ -n "${CONFIG_LTO_CLANG}" ]; then + # Use vmlinux.o instead of performing the slow LTO link again. + objs=vmlinux.o + libs= + else + objs="${KBUILD_VMLINUX_OBJS}" + libs="${KBUILD_VMLINUX_LIBS}" + fi + # The kallsyms linking does not need debug symbols included. if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then strip_debug=-Wl,--strip-debug @@ -170,22 +181,9 @@ vmlinux_link() fi if [ "${SRCARCH}" != "um" ]; then - if [ -n "${CONFIG_LTO_CLANG}" ]; then - # Use vmlinux.o instead of performing the slow LTO - # link again. - objects="--whole-archive \ - vmlinux.o \ - --no-whole-archive \ - ${@}" - else - objects="--whole-archive \ - ${KBUILD_VMLINUX_OBJS} \ - --no-whole-archive \ - --start-group \ - ${KBUILD_VMLINUX_LIBS} \ - --end-group \ - ${@}" - fi + objects="--whole-archive ${objs} --no-whole-archive \ + --start-group ${libs} --end-group \ + $@" ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \ ${strip_debug#-Wl,} \ From patchwork Thu Aug 19 00:57:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445757 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28BB1C4338F for ; Thu, 19 Aug 2021 00:58:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 12A25610E8 for ; Thu, 19 Aug 2021 00:58:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234965AbhHSA7V (ORCPT ); Wed, 18 Aug 2021 20:59:21 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60438 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234849AbhHSA7S (ORCPT ); Wed, 18 Aug 2021 20:59:18 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4q017219; Thu, 19 Aug 2021 09:57:51 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4q017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334672; bh=6Gejaa7YZQrrpkNS/TloVBLSNqnj6Sl0GHlM3FPkJW0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=StqXUc+iWJIxnxyf1ckk1PYb49aLCe3E4xcKdQmP8jI5SMLkQJ/8V3UxHnsdr9Agh Sz2TwEJwYVBCXxdZyghpLXfyPMliCh/6ofWY8w0lUC0t5X47lkA2sYCZ5d9/7ULS4M NR9YDCXl70q+Pigp09WmfaCVmJEelvl2TvYQDuziL6s+sSVhD/YKryLiSUyhVdKibD 1ykrwKVkMqwcpSGzzPqjFtb0nYBn/Zs7Vgk8fRI3TP3ZjJSj6KJWbCCFt/DaYl5n7j z2xIPECB7hqyZOOeNLc1za9ArBxTIrtW2Hve7yZT3By92ALFEpuPYG8uiPa1imsryU sdnvp6Q4bU5Ug== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 07/13] kbuild: do not remove 'linux' link in scripts/link-vmlinux.sh Date: Thu, 19 Aug 2021 09:57:38 +0900 Message-Id: <20210819005744.644908-8-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org arch/um/Makefile passes the -f option to the ln command: $(Q)ln -f $< $@ So, the hard link is always re-created, and the old one is removed anyway. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/link-vmlinux.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index a6c4d0bce3ba..7b9c62e4d54a 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -206,7 +206,6 @@ vmlinux_link() -Wl,-T,${lds} \ ${objects} \ -lutil -lrt -lpthread - rm -f linux fi } From patchwork Thu Aug 19 00:57:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445765 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 439AEC43216 for ; Thu, 19 Aug 2021 00:58:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2F53B6113C for ; Thu, 19 Aug 2021 00:58:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235306AbhHSA7X (ORCPT ); Wed, 18 Aug 2021 20:59:23 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60450 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235034AbhHSA7T (ORCPT ); Wed, 18 Aug 2021 20:59:19 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4r017219; Thu, 19 Aug 2021 09:57:52 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4r017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334672; bh=RUDO4jzJry61qVqT4mfs6ssC07k4WQc2EZ9PdUGGmXk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qEStO2Ppo9aS6cgTM+D2bW6Ky95lJqK/y3BwLrk630esyDmxdPcfSWFG/TQOXsM+Y RIu1v0/RHIzRxWM13xcBbR93Kacf/lq/XCph1AwuUeHcQgY4lRHK6/RmEEKaJAyAog xd9vfdQgTDPcLUGKpClcLOAUS6HwfzttqYGIU3TII6U1jbjq7t50+oOE0P3KDm4PDI plx/CFgEIRGo7f9saapkx1Zrh8s1NjDlRzX1DbldYjFEHcht5TzmDdS7zG2qc90gKU QoKq9kPQQ1gmLm3gUwvv/5eIrGYIAmFcVxuXZloTyW7H2vv6sevHMjK2zGW80jsFsR H5uiA7Xg/LA6Q== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 08/13] kbuild: merge vmlinux_link() between ARCH=um and other architectures Date: Thu, 19 Aug 2021 09:57:39 +0900 Message-Id: <20210819005744.644908-9-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org For ARCH=um, ${CC} is used as the linker driver. Hence, the linker options are prefixed with -Wl, . Merge the similar code. I replaced the -T option with the long option --script= so that it works well with/without ${wl}. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/link-vmlinux.sh | 56 +++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index 7b9c62e4d54a..d74cee5c4326 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -149,13 +149,12 @@ objtool_link() # ${2}, ${3}, ... - optional extra .o files vmlinux_link() { - local lds="${objtree}/${KBUILD_LDS}" local output=${1} - local objects - local strip_debug - local map_option local objs local libs + local ld + local ldflags + local ldlibs info LD ${output} @@ -171,42 +170,33 @@ vmlinux_link() libs="${KBUILD_VMLINUX_LIBS}" fi + if [ "${SRCARCH}" = "um" ]; then + wl=-Wl, + ld="${CC}" + ldflags="${CFLAGS_vmlinux}" + ldlibs="-lutil -lrt -lpthread" + else + wl= + ld="${LD}" + ldflags="${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}" + ldlibs= + fi + + ldflags="${ldflags} ${wl}--script=${objtree}/${KBUILD_LDS}" + # The kallsyms linking does not need debug symbols included. if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then - strip_debug=-Wl,--strip-debug + ldflags="${ldflags} ${wl}--strip-debug" fi if [ -n "${CONFIG_VMLINUX_MAP}" ]; then - map_option="-Map=${output}.map" + ldflags="${ldflags} ${wl}-Map=${output}.map" fi - if [ "${SRCARCH}" != "um" ]; then - objects="--whole-archive ${objs} --no-whole-archive \ - --start-group ${libs} --end-group \ - $@" - - ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \ - ${strip_debug#-Wl,} \ - -o ${output} \ - ${map_option} \ - -T ${lds} ${objects} - else - objects="-Wl,--whole-archive \ - ${KBUILD_VMLINUX_OBJS} \ - -Wl,--no-whole-archive \ - -Wl,--start-group \ - ${KBUILD_VMLINUX_LIBS} \ - -Wl,--end-group \ - ${@}" - - ${CC} ${CFLAGS_vmlinux} \ - ${strip_debug} \ - -o ${output} \ - ${map_option:+-Wl,${map_option}} \ - -Wl,-T,${lds} \ - ${objects} \ - -lutil -lrt -lpthread - fi + ${ld} ${ldflags} -o ${output} \ + ${wl}--whole-archive ${objs} ${wl}--no-whole-archive \ + ${wl}--start-group ${libs} ${wl}--end-group \ + $@ ${ldlibs} } # generate .BTF typeinfo from DWARF debuginfo From patchwork Thu Aug 19 00:57:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445761 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A22A5C4320A for ; Thu, 19 Aug 2021 00:58:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 883E9610E8 for ; Thu, 19 Aug 2021 00:58:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235265AbhHSA7V (ORCPT ); Wed, 18 Aug 2021 20:59:21 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60449 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234824AbhHSA7T (ORCPT ); Wed, 18 Aug 2021 20:59:19 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4s017219; Thu, 19 Aug 2021 09:57:53 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4s017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334673; bh=DRNxRpsX6v3sRE7LHBWEe79xZacYol4xWprhfU+M1UA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jOnXaT2WSYXbNGjHay06GAvXr51PfP53DEAuQ3FHoTE59dG1gSyFgN9qA0lbgDFEU VQ7sO6Wf12xYo0q4SbFXnQpc5syEHmoCYy9/swu9eO3BBdj8C2wueJ7N5qh4kzhZRu lC1HOoYfK6JzPbxTbrd2erEIdCCxAzL2GtOsmiMxU7juMiXC986PaIcBwzS40DoorT 82cGvQHr3lVVMQ95ezUIbLrwzXA5+us0je2uFeFVZr3/kb4WHtylSyoEp0yKvs5ymv QIt3pfx4kEeU6tdY/B75R1+a4+rgGwgEym7n6RoT7/7EJ1/ooQjtt0SOB7SV+CSr3V cgCNZ3cFSgrJg== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 09/13] kbuild: do not create built-in.a.symversions or lib.a.symversions Date: Thu, 19 Aug 2021 09:57:40 +0900 Message-Id: <20210819005744.644908-10-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org Merge all *.o.symversions in scripts/link-vmlinux.sh instead of merging them in the unit of built-in.a or lib.a. This is a preparation for further code cleanups. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 10 ++-------- scripts/link-vmlinux.sh | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 585dae34746a..37d6f6da34d6 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -430,11 +430,8 @@ endif quiet_cmd_ar_builtin = AR $@ cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) -quiet_cmd_ar_and_symver = AR $@ - cmd_ar_and_symver = $(cmd_update_lto_symversions); $(cmd_ar_builtin) - $(obj)/built-in.a: $(real-obj-y) FORCE - $(call if_changed,ar_and_symver) + $(call if_changed,ar_builtin) # # Rule to create modules.order file @@ -454,11 +451,8 @@ $(obj)/modules.order: $(obj-m) FORCE # # Rule to compile a set of .o files into one .a file (with symbol table) # -quiet_cmd_ar_lib = AR $@ - cmd_ar_lib = $(cmd_update_lto_symversions); $(cmd_ar) - $(obj)/lib.a: $(lib-y) FORCE - $(call if_changed,ar_lib) + $(call if_changed,ar) # NOTE: # Do not replace $(filter %.o,^) with $(real-prereqs). When a single object diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index d74cee5c4326..17976609c2d8 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -52,6 +52,13 @@ gen_initcalls() > .tmp_initcalls.lds } +append_symversion() +{ + if [ -f ${1}.symversions ]; then + cat ${1}.symversions >> .tmp_symversions.lds + fi +} + # If CONFIG_LTO_CLANG is selected, collect generated symbol versions into # .tmp_symversions.lds gen_symversions() @@ -59,10 +66,17 @@ gen_symversions() info GEN .tmp_symversions.lds rm -f .tmp_symversions.lds - for o in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do - if [ -f ${o}.symversions ]; then - cat ${o}.symversions >> .tmp_symversions.lds - fi + for a in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do + case $a in + *.a) + for o in $(${AR} t ${a}); do + append_symversion ${o} + done + ;; + *) + append_symversion ${a} + ;; + esac done } From patchwork Thu Aug 19 00:57:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445771 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6C2AC4338F for ; Thu, 19 Aug 2021 00:59:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A0D0D608FE for ; Thu, 19 Aug 2021 00:59:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235499AbhHSA7b (ORCPT ); Wed, 18 Aug 2021 20:59:31 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60782 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235481AbhHSA7a (ORCPT ); Wed, 18 Aug 2021 20:59:30 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4t017219; Thu, 19 Aug 2021 09:57:53 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4t017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334674; bh=HwNkxravsiti3cPH3/pynEvNeo61f93j4rWZZTlauzs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RGZjPaYIKwKIyLm6dCKZjGG2fGlheiZ51fRWPfHlR0Kc2jtVXVlebgOm17a9ZEiBc kjcYbXl3lAOOH0IDTG08kyxISsgouZuE60grXZgwIaNGanArt6EFakiQaLAHpiwwe2 dZk3wOrNH9kZX4nDyCDs4dXodN7zA7iCUtmd9uxoID8B6MnLFq1TjtaL08n11lmh9d v9sZBmz4Vot3JSzz+6aSShvNyM+41LNQDt7JGl/KpJKEfqfWtQBSrm9Fcy8aDChWtH HCNwf9Tr/OSbKsTFzlNpUBgmNnzXDY+GloS4FT5t8DLa/hV3HQY+T7bQr/oBBerN5w 5dw83MvIzHt/A== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nathan Chancellor , Nick Desaulniers , clang-built-linux@googlegroups.com Subject: [PATCH 10/13] kbuild: build modules in the same way with/without Clang LTO Date: Thu, 19 Aug 2021 09:57:41 +0900 Message-Id: <20210819005744.644908-11-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org When Clang LTO is enabled, additional intermediate files *.lto.o are created because LLVM bitcode must be converted to ELF before modpost. For non-LTO builds: $(LD) $(LD) objects ---> .o -----> .ko | .mod.o ---/ For Clang LTO builds: $(AR) $(LD) $(LD) objects ---> .o ---> .lto.o -----> .ko | .mod.o --/ Since the Clang LTO introduction, ugly CONFIG_LTO_CLANG conditionals are sprinkled everywhere in the kbuild code. Another confusion for Clang LTO builds is, .o is an archive that contains LLVM bitcode files. The suffix should have been .a instead of .o To clean up the code, unify the build process of modules, as follows: $(AR) $(LD) $(LD) objects ---> .a ---> .prelink.o -----> .ko | .mod.o ------/ Here, 'objects' are either ELF or LLVM bitcode. .a is an archive, .prelink.o is ELF. Signed-off-by: Masahiro Yamada --- scripts/Makefile.build | 103 ++++++++++++++++++-------------------- scripts/Makefile.lib | 11 ++-- scripts/Makefile.modfinal | 4 +- scripts/Makefile.modpost | 7 +-- scripts/mod/modpost.c | 6 +-- scripts/mod/sumversion.c | 6 +-- 6 files changed, 61 insertions(+), 76 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 37d6f6da34d6..957addea830b 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -88,9 +88,7 @@ endif targets-for-modules := $(patsubst %.o, %.mod, $(filter %.o, $(obj-m))) -ifdef CONFIG_LTO_CLANG -targets-for-modules += $(patsubst %.o, %.lto.o, $(filter %.o, $(obj-m))) -endif +targets-for-modules += $(patsubst %.o, %.prelink.o, $(filter %.o, $(obj-m))) ifdef need-modorder targets-for-modules += $(obj)/modules.order @@ -282,33 +280,12 @@ $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE $(call if_changed_rule,cc_o_c) $(call cmd,force_checksrc) -ifdef CONFIG_LTO_CLANG -# Module .o files may contain LLVM bitcode, compile them into native code -# before ELF processing -quiet_cmd_cc_lto_link_modules = LTO [M] $@ -cmd_cc_lto_link_modules = \ - $(LD) $(ld_flags) -r -o $@ \ - $(shell [ -s $(@:.lto.o=.o.symversions) ] && \ - echo -T $(@:.lto.o=.o.symversions)) \ - --whole-archive $(filter-out FORCE,$^) - -ifdef CONFIG_STACK_VALIDATION -# objtool was skipped for LLVM bitcode, run it now that we have compiled -# modules into native code -cmd_cc_lto_link_modules += ; \ - $(objtree)/tools/objtool/objtool $(objtool_args) --module $@ -endif - -$(obj)/%.lto.o: $(obj)/%.o FORCE - $(call if_changed,cc_lto_link_modules) -endif - cmd_mod = { \ echo $(if $($*-objs)$($*-y)$($*-m), $(addprefix $(obj)/, $($*-objs) $($*-y) $($*-m)), $(@:.mod=.o)); \ $(undefined_syms) echo; \ } > $@ -$(obj)/%.mod: $(obj)/%$(mod-prelink-ext).o FORCE +$(obj)/%.mod: $(obj)/%.prelink.o FORCE $(call if_changed,mod) quiet_cmd_cc_lst_c = MKLST $@ @@ -412,17 +389,6 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler $(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ; $(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ; -# combine symversions for later processing -ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y) - cmd_update_lto_symversions = \ - rm -f $@.symversions \ - $(foreach n, $(filter-out FORCE,$^), \ - $(if $(shell test -s $(n).symversions && echo y), \ - ; cat $(n).symversions >> $@.symversions)) -else - cmd_update_lto_symversions = echo >/dev/null -endif - # # Rule to compile a set of .o files into one .a file (without symbol table) # @@ -442,10 +408,10 @@ $(obj)/built-in.a: $(real-obj-y) FORCE # modules.order unless contained modules are updated. cmd_modules_order = { $(foreach m, $(real-prereqs), \ - $(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \ + $(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.a,%.ko,$m));) :; } \ | $(AWK) '!x[$$0]++' - > $@ -$(obj)/modules.order: $(obj-m) FORCE +$(obj)/modules.order: $(modules) FORCE $(call if_changed,modules_order) # @@ -454,26 +420,55 @@ $(obj)/modules.order: $(obj-m) FORCE $(obj)/lib.a: $(lib-y) FORCE $(call if_changed,ar) -# NOTE: -# Do not replace $(filter %.o,^) with $(real-prereqs). When a single object -# module is turned into a multi object module, $^ will contain header file -# dependencies recorded in the .*.cmd file. +# +# Rule to prelink modules +# + +ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y) + +cmd_merge_symver = \ + rm -f $@; \ + touch $@; \ + for o in $$($(AR) t $<); do \ + if [ -s $${o}.symversions ]; then \ + cat $${o}.symversions >> $@; \ + fi; \ + done + +$(obj)/%.prelink.symversions: $(obj)/%.a FORCE + $(call if_changed,merge_symver) + +$(obj)/%.prelink.o: ld_flags += --script=$(filter %.symversions,$^) +module-symver = $(obj)/%.prelink.symversions + +endif + +quiet_cmd_ld_o_a = LD [M] $@ + cmd_ld_o_a = $(LD) $(ld_flags) -r -o $@ --whole-archive $< + +$(obj)/%.prelink.o: $(obj)/%.a $(module-symver) FORCE + $(call if_changed,ld_o_a) + ifdef CONFIG_LTO_CLANG -quiet_cmd_link_multi-m = AR [M] $@ -cmd_link_multi-m = \ - $(cmd_update_lto_symversions); \ - rm -f $@; \ - $(AR) cDPrsT $@ $(filter %.o,$^) -else -quiet_cmd_link_multi-m = LD [M] $@ - cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^) +ifdef CONFIG_STACK_VALIDATION +# objtool was skipped for LLVM bitcode, run it now that we have compiled +# modules into native code +cmd_ld_o_a += ; $(objtool) $(objtool_args) --module $@ endif +endif + +quiet_cmd_ar_module = AR [M] $@ + cmd_ar_module = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) + +$(modules-single): %.a: %.o FORCE + $(call if_changed,ar_module) + +$(modules-multi): FORCE + $(call if_changed,ar_module) +$(call multi_depend, $(modules-multi), .a, -objs -y -m) -$(multi-obj-m): FORCE - $(call if_changed,link_multi-m) -$(call multi_depend, $(multi-obj-m), .o, -objs -y -m) +targets += $(modules-single) $(modules-multi) -targets += $(multi-obj-m) targets := $(filter-out $(PHONY), $(targets)) # Add intermediate targets: diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 34c4c11c4bc1..f604d2d01cad 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -106,6 +106,10 @@ multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y)) real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y)) subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) +modules := $(patsubst %.o, %.a, $(obj-m)) +modules-multi := $(patsubst %.o, %.a, $(multi-obj-m)) +modules-single := $(filter-out $(modules-multi), $(filter %.a, $(modules))) + # Finds the multi-part object the current object will be linked into. # If the object belongs to two or more multi-part objects, list them all. modname-multi = $(sort $(foreach m,$(multi-obj-ym),\ @@ -225,13 +229,6 @@ dtc_cpp_flags = -Wp,-MMD,$(depfile).pre.tmp -nostdinc \ $(addprefix -I,$(DTC_INCLUDE)) \ -undef -D__DTS__ -ifeq ($(CONFIG_LTO_CLANG),y) -# With CONFIG_LTO_CLANG, .o files in modules might be LLVM bitcode, so we -# need to run LTO to compile them into native code (.lto.o) before further -# processing. -mod-prelink-ext := .lto -endif - # Useful for describing the dependency of composite objects # Usage: # $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add) diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal index ff805777431c..1b6401f53662 100644 --- a/scripts/Makefile.modfinal +++ b/scripts/Makefile.modfinal @@ -9,7 +9,7 @@ __modfinal: include include/config/auto.conf include $(srctree)/scripts/Kbuild.include -# for c_flags and mod-prelink-ext +# for c_flags include $(srctree)/scripts/Makefile.lib # find all modules listed in modules.order @@ -55,7 +55,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: %.prelink.o %.mod.o 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/Makefile.modpost b/scripts/Makefile.modpost index eef56d629799..11883b31c615 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -41,9 +41,6 @@ __modpost: include include/config/auto.conf include $(srctree)/scripts/Kbuild.include -# for mod-prelink-ext -include $(srctree)/scripts/Makefile.lib - MODPOST = scripts/mod/modpost \ $(if $(CONFIG_MODVERSIONS),-m) \ $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \ @@ -128,9 +125,9 @@ endif # Read out modules.order to pass in modpost. # Otherwise, allmodconfig would fail with "Argument list too long". quiet_cmd_modpost = MODPOST $@ - cmd_modpost = sed 's/\.ko$$/$(mod-prelink-ext)\.o/' $< | $(MODPOST) -T - + cmd_modpost = sed 's/ko$$/prelink.o/' $< | $(MODPOST) -T - -$(output-symdump): $(MODORDER) $(input-symdump) $(modules:.ko=$(mod-prelink-ext).o) FORCE +$(output-symdump): $(MODORDER) $(input-symdump) $(modules:ko=prelink.o) FORCE $(call if_changed,modpost) targets += $(output-symdump) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 270a7df898e2..8c63c52af88d 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1991,9 +1991,9 @@ static void read_symbols(const char *modname) /* strip trailing .o */ tmp = NOFAIL(strdup(modname)); tmp[strlen(tmp) - 2] = '\0'; - /* strip trailing .lto */ - if (strends(tmp, ".lto")) - tmp[strlen(tmp) - 4] = '\0'; + /* strip trailing .prelink */ + if (strends(tmp, ".prelink")) + tmp[strlen(tmp) - 8] = '\0'; mod = new_module(tmp); free(tmp); } diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c index 760e6baa7eda..8ea0f7b23c63 100644 --- a/scripts/mod/sumversion.c +++ b/scripts/mod/sumversion.c @@ -391,14 +391,10 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen) struct md4_ctx md; char *fname; char filelist[PATH_MAX + 1]; - int postfix_len = 1; - - if (strends(modname, ".lto.o")) - postfix_len = 5; /* objects for a module are listed in the first line of *.mod file. */ snprintf(filelist, sizeof(filelist), "%.*smod", - (int)strlen(modname) - postfix_len, modname); + (int)(strlen(modname) - strlen("prelink.o")), modname); buf = read_text_file(filelist); From patchwork Thu Aug 19 00:57:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445773 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD87BC4338F for ; Thu, 19 Aug 2021 00:59:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 97C33610E9 for ; Thu, 19 Aug 2021 00:59:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235517AbhHSA7e (ORCPT ); Wed, 18 Aug 2021 20:59:34 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60780 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234824AbhHSA7a (ORCPT ); Wed, 18 Aug 2021 20:59:30 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4u017219; Thu, 19 Aug 2021 09:57:54 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4u017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334674; bh=xt2zcw+pYyWVZAgR/pWyQdOfFm5v/zBCFRnsJjm5W+g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EVYycanf/Px0e8PoW2lFFed+KqN6sn0XjbLd8Th2HUihUtpB6zedb+tpPNmmT/lYv tMZX+fLiLAEENxxda+NsCARijTUPMaLjSMYXvZnZwktFU8n/GTN6rAQX9k/B27eQLH J2Fibx45GU7V/8SPWcjqaoCCuWzwgT4Oe+FGCY2oeUzAfa2xUU+e3DbdOza5RNS3G0 eqw6kSPoyHg1igdZt/nfl5CGlDMqS5NTc5xylz3I7k44EQdEGGxEpOEKmo9SeTn2Fv PBOQNxKjKTDcAPWlE0zU4fojAfKtNHC/WVeLDGZr+wORuPXvXR/6CumwUEb9pYtytJ /z5GcTXvUZRAA== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nathan Chancellor , Nick Desaulniers , clang-built-linux@googlegroups.com Subject: [PATCH 11/13] kbuild: always postpone CRC links for module versioning Date: Thu, 19 Aug 2021 09:57:42 +0900 Message-Id: <20210819005744.644908-12-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org When CONFIG_MODVERSIONS=y, the CRCs of EXPORT_SYMBOL are linked into *.o files in-place. It is impossible for Clang LTO because *.o files are not ELF, but LLVM bitcode. The CRCs are stored in separate *.symversions files, and then supplied to the modpost link. Let's do so for CONFIG_LTO_CLANG=n is possible, and unify the module versioning code. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 32 ++++++-------------------------- scripts/link-vmlinux.sh | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 957addea830b..874e84a1f3fc 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -158,17 +158,12 @@ quiet_cmd_cc_o_c = CC $(quiet_modtag) $@ ifdef CONFIG_MODVERSIONS # When module versioning is enabled the following steps are executed: # o compile a .o from .c -# o if .o doesn't contain a __ksymtab version, i.e. does -# not export symbols, it's done. +# o if .o doesn't contain __ksymtab* symbols, i.e. does +# not export symbols, create an empty *.symversions # 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 -ifdef CONFIG_LTO_CLANG # Generate .o.symversions files for each .o with exported symbols, and link these # to the kernel and/or modules at the end. cmd_modversions_c = \ @@ -178,18 +173,6 @@ cmd_modversions_c = \ else \ rm -f $@.symversions; \ fi; -else -cmd_modversions_c = \ - if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ - $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ - > $(@D)/.tmp_$(@F:.o=.ver); \ - \ - $(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \ - -T $(@D)/.tmp_$(@F:.o=.ver); \ - mv -f $(@D)/.tmp_$(@F) $@; \ - rm -f $(@D)/.tmp_$(@F:.o=.ver); \ - fi -endif endif ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT @@ -348,12 +331,9 @@ ifdef CONFIG_ASM_MODVERSIONS cmd_modversions_S = \ if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ $(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ - > $(@D)/.tmp_$(@F:.o=.ver); \ - \ - $(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \ - -T $(@D)/.tmp_$(@F:.o=.ver); \ - mv -f $(@D)/.tmp_$(@F) $@; \ - rm -f $(@D)/.tmp_$(@F:.o=.ver); \ + > $@.symversions; \ + else \ + rm -rf $@.symversions; \ fi endif @@ -424,7 +404,7 @@ $(obj)/lib.a: $(lib-y) FORCE # Rule to prelink modules # -ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y) +ifdef CONFIG_MODVERSIONS cmd_merge_symver = \ rm -f $@; \ diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index 17976609c2d8..66ced6ff8e65 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -59,8 +59,7 @@ append_symversion() fi } -# If CONFIG_LTO_CLANG is selected, collect generated symbol versions into -# .tmp_symversions.lds +# Collect generated symbol versions into .tmp_symversions.lds gen_symversions() { info GEN .tmp_symversions.lds @@ -94,14 +93,13 @@ modpost_link() ${KBUILD_VMLINUX_LIBS} \ --end-group" + if [ -n "${CONFIG_MODVERSIONS}" ]; then + lds="${lds} -T .tmp_symversions.lds" + fi + if [ -n "${CONFIG_LTO_CLANG}" ]; then gen_initcalls - lds="-T .tmp_initcalls.lds" - - if [ -n "${CONFIG_MODVERSIONS}" ]; then - gen_symversions - lds="${lds} -T .tmp_symversions.lds" - fi + lds="${lds} -T .tmp_initcalls.lds" # This might take a while, so indicate that we're doing # an LTO link @@ -198,6 +196,10 @@ vmlinux_link() ldflags="${ldflags} ${wl}--script=${objtree}/${KBUILD_LDS}" + if [ -n "${CONFIG_MODVERSIONS}" ]; then + ldflags="${ldflags} ${wl}--script=.tmp_symversions.lds" + fi + # The kallsyms linking does not need debug symbols included. if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then ldflags="${ldflags} ${wl}--strip-debug" @@ -351,6 +353,10 @@ fi; # final build of init/ ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init need-builtin=1 +if [ -n "${CONFIG_MODVERSIONS}" ]; then + gen_symversions +fi + #link vmlinux.o modpost_link vmlinux.o objtool_link vmlinux.o From patchwork Thu Aug 19 00:57:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445767 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F678C4320A for ; Thu, 19 Aug 2021 00:58:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 16E40610E8 for ; Thu, 19 Aug 2021 00:58:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235541AbhHSA7a (ORCPT ); Wed, 18 Aug 2021 20:59:30 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60764 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235445AbhHSA72 (ORCPT ); Wed, 18 Aug 2021 20:59:28 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4v017219; Thu, 19 Aug 2021 09:57:55 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4v017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334675; bh=KLWNtWoQX5iPqAI7oX4v3voqgZg5h4Fqa51BzWNUUW8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=yWgZRPmbMbnn13jT/bEgVsi3rPpo27UJvvJfS5WltzGWbTj9JTPCObIK9LVy0RxgL 2imoI94x27iFJAdYVdvk6IEjrYJwLzVL8eyr14ogmMuc8EJkES6hWMxPNAeTV42tdZ mj9y5rLM2P5DmQ6jRCpTaJTNuMSvHIswtDLIMgZ7p6EliwUSWEAYRcSE6Z8CPEdfML xbkLu8rzaEFwPHwB2N5FMb/sO3jDB3u5c7vIhHE0v1M4LS1JWKgr4IU7j/KYa6df2d poBU5i2Zkq3iDmLcJCMrKaxmSAm58gTDL0GynNR0RYHHqga2KFd5Y726a0n/C/DDgH XkN+3RwE8olEQ== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nathan Chancellor , Nick Desaulniers , clang-built-linux@googlegroups.com Subject: [PATCH 12/13] kbuild: merge cmd_modversions_c and cmd_modversions_S Date: Thu, 19 Aug 2021 09:57:43 +0900 Message-Id: <20210819005744.644908-13-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org Now cmd_modversions_c and cmd_modversions_S are similar. The latter uses $(OBJDUMP) -h, but it can be replaced with $(NM). $(NM) works for both ELF and LLVM bitcode (if $(NM) is llvm-nm). Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 874e84a1f3fc..97392c26ebd7 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -166,13 +166,16 @@ ifdef CONFIG_MODVERSIONS # Generate .o.symversions files for each .o with exported symbols, and link these # to the kernel and/or modules at the end. -cmd_modversions_c = \ +cmd_modversions = \ if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \ - $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ + $(call cmd_gensymtypes_$(1),$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ > $@.symversions; \ else \ rm -f $@.symversions; \ fi; + +cmd_modversions_c = $(call cmd_modversions,c) + endif ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT @@ -327,14 +330,8 @@ ifdef CONFIG_ASM_MODVERSIONS # versioning matches the C process described above, with difference that # we parse asm-prototypes.h C header to get function definitions. +cmd_modversions_S = $(call cmd_modversions,S) -cmd_modversions_S = \ - if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ - $(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ - > $@.symversions; \ - else \ - rm -rf $@.symversions; \ - fi endif $(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE From patchwork Thu Aug 19 00:57:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12445759 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1703C4320E for ; Thu, 19 Aug 2021 00:58:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DB3FE608FE for ; Thu, 19 Aug 2021 00:58:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235348AbhHSA7W (ORCPT ); Wed, 18 Aug 2021 20:59:22 -0400 Received: from conuserg-10.nifty.com ([210.131.2.77]:60441 "EHLO conuserg-10.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234903AbhHSA7T (ORCPT ); Wed, 18 Aug 2021 20:59:19 -0400 Received: from localhost.localdomain (133-32-232-101.west.xps.vectant.ne.jp [133.32.232.101]) (authenticated) by conuserg-10.nifty.com with ESMTP id 17J0vl4w017219; Thu, 19 Aug 2021 09:57:55 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-10.nifty.com 17J0vl4w017219 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1629334676; bh=DBA8ZODOzf9FIJUCzgtveE3U7Vc1g/1uNw8IkUnWotA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZXUUkbuBCSKhb65cp9SgZO4y+MbX/32WwqLo0fgIfMyOQUtycS0slYvSfAzCMTGlQ 69XBqEkXYXwEbFFDXPVrMUK2JYWfl1k3pMlQe7IQ6etIR2lEHIYhOcnRZp8q/hR79g z90vxOQ/DQf4dhb+5Hf/q1GuZ+hUAaeDDd5NZsPjJKzlQ92N1l9+hueH/Sxi5QIDz1 G0C8fyL70jOQ3HM0jNx37c6v6nNBiSPtMPYUuwjMDqwRihhzBWWozFldEqcqjYvqRw GpQl3ykOEAjh/hRczX8tezeAYWTumXeMO3PuG9tITuSXAm9jNDq7PzOU/wpWfnEWQb oqkIX1X1tGc0A== X-Nifty-SrcIP: [133.32.232.101] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Masahiro Yamada , Michal Marek , Nick Desaulniers Subject: [PATCH 13/13] kbuild: merge cmd_ar_builtin and cmd_ar_module Date: Thu, 19 Aug 2021 09:57:44 +0900 Message-Id: <20210819005744.644908-14-masahiroy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210819005744.644908-1-masahiroy@kernel.org> References: <20210819005744.644908-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org The difference between cmd_ar_builtin and cmd_ar_module is the '[M]' in the short log. Merge them into cmd_ar_thin. $(quiet_modtag) is expanded to '[M]' when it is merging module objects. Signed-off-by: Masahiro Yamada Reviewed-by: Kees Cook --- scripts/Makefile.build | 12 +++--------- scripts/Makefile.lib | 5 ++++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 97392c26ebd7..17ce37c3eceb 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -370,11 +370,8 @@ $(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ; # Rule to compile a set of .o files into one .a file (without symbol table) # -quiet_cmd_ar_builtin = AR $@ - cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) - $(obj)/built-in.a: $(real-obj-y) FORCE - $(call if_changed,ar_builtin) + $(call if_changed,ar_thin) # # Rule to create modules.order file @@ -434,14 +431,11 @@ cmd_ld_o_a += ; $(objtool) $(objtool_args) --module $@ endif endif -quiet_cmd_ar_module = AR [M] $@ - cmd_ar_module = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) - $(modules-single): %.a: %.o FORCE - $(call if_changed,ar_module) + $(call if_changed,ar_thin) $(modules-multi): FORCE - $(call if_changed,ar_module) + $(call if_changed,ar_thin) $(call multi_depend, $(modules-multi), .a, -objs -y -m) targets += $(modules-single) $(modules-multi) diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index f604d2d01cad..bd71a7d6fbc1 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -198,7 +198,7 @@ _cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) endif endif -part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m)),y) +part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m) $(obj-m)),y) quiet_modtag = $(if $(part-of-module),[M], ) modkern_cflags = \ @@ -276,6 +276,9 @@ quiet_cmd_ld = LD $@ quiet_cmd_ar = AR $@ cmd_ar = rm -f $@; $(AR) cDPrsT $@ $(real-prereqs) +quiet_cmd_ar_thin = AR $(quiet_modtag) $@ + cmd_ar_thin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) + # Objcopy # ---------------------------------------------------------------------------