kbuild: enable objtool for *.mod.o and additional kernel objects
authorMasahiro Yamada <masahiroy@kernel.org>
Wed, 13 Nov 2024 23:45:22 +0000 (08:45 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Wed, 27 Nov 2024 23:11:55 +0000 (08:11 +0900)
Currently, objtool is disabled in scripts/Makefile.{modfinal,vmlinux}.

This commit moves rule_cc_o_c and rule_as_o_S to scripts/Makefile.lib
and set objtool-enabled to y there.

With this change, *.mod.o, .module-common.o,  builtin-dtb.o, and
vmlinux.export.o will now be covered by objtool.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/Makefile.build
scripts/Makefile.lib
scripts/Makefile.modfinal
scripts/Makefile.vmlinux

index c0b61ae..f41ce21 100644 (file)
@@ -129,12 +129,6 @@ $(obj)/%.ll: $(obj)/%.c FORCE
 
 is-single-obj-m = $(and $(part-of-module),$(filter $@, $(obj-m)),y)
 
-# When a module consists of a single object, there is no reason to keep LLVM IR.
-# Make $(LD) covert LLVM IR to ELF here.
-ifdef CONFIG_LTO_CLANG
-cmd_ld_single_m = $(if $(is-single-obj-m), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
-endif
-
 ifdef CONFIG_MODVERSIONS
 # When module versioning is enabled the following steps are executed:
 # o compile a <file>.o from <file>.c
@@ -195,23 +189,6 @@ ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
 cmd_warn_shared_object = $(if $(word 2, $(modname-multi)),$(warning $(kbuild-file): $*.o is added to multiple modules: $(modname-multi)))
 endif
 
-define rule_cc_o_c
-       $(call cmd_and_fixdep,cc_o_c)
-       $(call cmd,checksrc)
-       $(call cmd,checkdoc)
-       $(call cmd,gen_objtooldep)
-       $(call cmd,gen_symversions_c)
-       $(call cmd,record_mcount)
-       $(call cmd,warn_shared_object)
-endef
-
-define rule_as_o_S
-       $(call cmd_and_fixdep,as_o_S)
-       $(call cmd,gen_objtooldep)
-       $(call cmd,gen_symversions_S)
-       $(call cmd,warn_shared_object)
-endef
-
 # Built-in and composite module parts
 $(obj)/%.o: $(obj)/%.c $(recordmcount_source) FORCE
        $(call if_changed_rule,cc_o_c)
index c0b485a..01040a7 100644 (file)
@@ -302,14 +302,38 @@ endef
 # ===========================================================================
 # These are shared by some Makefile.* files.
 
+objtool-enabled := y
+
+ifdef CONFIG_LTO_CLANG
+# objtool cannot process LLVM IR. Make $(LD) covert LLVM IR to ELF here.
+cmd_ld_single = $(if $(objtool-enabled), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
+endif
+
 quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
       cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< \
-               $(cmd_ld_single_m) \
+               $(cmd_ld_single) \
                $(cmd_objtool)
 
+define rule_cc_o_c
+       $(call cmd_and_fixdep,cc_o_c)
+       $(call cmd,checksrc)
+       $(call cmd,checkdoc)
+       $(call cmd,gen_objtooldep)
+       $(call cmd,gen_symversions_c)
+       $(call cmd,record_mcount)
+       $(call cmd,warn_shared_object)
+endef
+
 quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
       cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< $(cmd_objtool)
 
+define rule_as_o_S
+       $(call cmd_and_fixdep,as_o_S)
+       $(call cmd,gen_objtooldep)
+       $(call cmd,gen_symversions_S)
+       $(call cmd,warn_shared_object)
+endef
+
 # Copy a file
 # ===========================================================================
 # 'cp' preserves permissions. If you use it to copy a file in read-only srctree,
index f63410b..85d5fad 100644 (file)
@@ -24,10 +24,10 @@ KCSAN_SANITIZE := n
 ccflags-remove-y := $(CC_FLAGS_CFI)
 
 %.mod.o: %.mod.c FORCE
-       $(call if_changed_dep,cc_o_c)
+       $(call if_changed_rule,cc_o_c)
 
 .module-common.o: $(srctree)/scripts/module-common.c FORCE
-       $(call if_changed_dep,cc_o_c)
+       $(call if_changed_rule,cc_o_c)
 
 quiet_cmd_ld_ko_o = LD [M]  $@
       cmd_ld_ko_o =                                                    \
index 2ce61f6..997be5d 100644 (file)
@@ -10,10 +10,10 @@ include $(srctree)/scripts/Makefile.lib
 targets :=
 
 %.o: %.c FORCE
-       $(call if_changed_dep,cc_o_c)
+       $(call if_changed_rule,cc_o_c)
 
 %.o: %.S FORCE
-       $(call if_changed_dep,as_o_S)
+       $(call if_changed_rule,as_o_S)
 
 # Built-in dtb
 # ---------------------------------------------------------------------------