summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasahiro Yamada <masahiroy@kernel.org>2021-08-31 16:39:56 +0900
committerMasahiro Yamada <masahiroy@kernel.org>2021-09-22 09:26:25 +0900
commitef62588c2c8611c196b780561610921b7b864bb2 (patch)
tree158403af4b941651df8d69745a1c2250353cafe1
parent918a6b7f68468ab80ec5e7ab7f3d2ef88905c20b (diff)
downloadlinux-stable-ef62588c2c8611c196b780561610921b7b864bb2.tar.gz
linux-stable-ef62588c2c8611c196b780561610921b7b864bb2.tar.bz2
linux-stable-ef62588c2c8611c196b780561610921b7b864bb2.zip
kbuild: detect objtool update without using .SECONDEXPANSION
Redo commit 8852c5524029 ("kbuild: Fix objtool dependency for 'OBJECT_FILES_NON_STANDARD_<obj> := n'") to add the objtool dependency in a cleaner way. Using .SECONDEXPANSION ends up with unreadable code due to escaped dollars. Also, it is not efficient because the second half of Makefile.build is parsed twice every time. Append the objtool dependency to the *.cmd files at the build time. This is what fixdep and gen_ksymdeps.sh already do. So, following the same pattern seems a natural solution. This allows us to drop $$(objtool_dep) entirely. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
-rw-r--r--scripts/Makefile.build12
1 files changed, 5 insertions, 7 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 720a86642f48..21b55f37a23f 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -246,14 +246,11 @@ objtool-enabled = $(if $(filter-out y%, \
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n),y)
cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool_args) $@)
-objtool_obj = $(if $(objtool-enabled), $(objtool))
+cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
endif # CONFIG_LTO_CLANG
endif # CONFIG_STACK_VALIDATION
-# Rebuild all objects when objtool changes
-objtool_dep = $(objtool_obj)
-
ifdef CONFIG_TRIM_UNUSED_KSYMS
cmd_gen_ksymdeps = \
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd
@@ -267,6 +264,7 @@ define rule_cc_o_c
$(call cmd,gen_ksymdeps)
$(call cmd,checksrc)
$(call cmd,checkdoc)
+ $(call cmd,gen_objtooldep)
$(call cmd,modversions_c)
$(call cmd,record_mcount)
endef
@@ -274,12 +272,12 @@ endef
define rule_as_o_S
$(call cmd_and_fixdep,as_o_S)
$(call cmd,gen_ksymdeps)
+ $(call cmd,gen_objtooldep)
$(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) FORCE
$(call if_changed_rule,cc_o_c)
$(call cmd,force_checksrc)
@@ -380,7 +378,7 @@ cmd_modversions_S = \
fi
endif
-$(obj)/%.o: $(src)/%.S $$(objtool_dep) FORCE
+$(obj)/%.o: $(src)/%.S FORCE
$(call if_changed_rule,as_o_S)
targets += $(filter-out $(subdir-builtin), $(real-obj-y))