forked from mirrors/linux
		
	kbuild: enable objtool for *.mod.o and additional kernel objects
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>
			
			
This commit is contained in:
		
							parent
							
								
									000e22a80d
								
							
						
					
					
						commit
						bede169618
					
				
					 4 changed files with 29 additions and 28 deletions
				
			
		| 
						 | 
					@ -129,12 +129,6 @@ $(obj)/%.ll: $(obj)/%.c FORCE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
is-single-obj-m = $(and $(part-of-module),$(filter $@, $(obj-m)),y)
 | 
					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
 | 
					ifdef CONFIG_MODVERSIONS
 | 
				
			||||||
# When module versioning is enabled the following steps are executed:
 | 
					# When module versioning is enabled the following steps are executed:
 | 
				
			||||||
# o compile a <file>.o from <file>.c
 | 
					# 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)))
 | 
					cmd_warn_shared_object = $(if $(word 2, $(modname-multi)),$(warning $(kbuild-file): $*.o is added to multiple modules: $(modname-multi)))
 | 
				
			||||||
endif
 | 
					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
 | 
					# Built-in and composite module parts
 | 
				
			||||||
$(obj)/%.o: $(obj)/%.c $(recordmcount_source) FORCE
 | 
					$(obj)/%.o: $(obj)/%.c $(recordmcount_source) FORCE
 | 
				
			||||||
	$(call if_changed_rule,cc_o_c)
 | 
						$(call if_changed_rule,cc_o_c)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -302,14 +302,38 @@ endef
 | 
				
			||||||
# ===========================================================================
 | 
					# ===========================================================================
 | 
				
			||||||
# These are shared by some Makefile.* files.
 | 
					# 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)  $@
 | 
					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_ld_single_m) \
 | 
							$(cmd_ld_single) \
 | 
				
			||||||
		$(cmd_objtool)
 | 
							$(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)  $@
 | 
					quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
 | 
				
			||||||
      cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< $(cmd_objtool)
 | 
					      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
 | 
					# Copy a file
 | 
				
			||||||
# ===========================================================================
 | 
					# ===========================================================================
 | 
				
			||||||
# 'cp' preserves permissions. If you use it to copy a file in read-only srctree,
 | 
					# 'cp' preserves permissions. If you use it to copy a file in read-only srctree,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,10 +24,10 @@ KCSAN_SANITIZE := n
 | 
				
			||||||
ccflags-remove-y := $(CC_FLAGS_CFI)
 | 
					ccflags-remove-y := $(CC_FLAGS_CFI)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%.mod.o: %.mod.c FORCE
 | 
					%.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
 | 
					.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]  $@
 | 
					quiet_cmd_ld_ko_o = LD [M]  $@
 | 
				
			||||||
      cmd_ld_ko_o =							\
 | 
					      cmd_ld_ko_o =							\
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,10 +10,10 @@ include $(srctree)/scripts/Makefile.lib
 | 
				
			||||||
targets :=
 | 
					targets :=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%.o: %.c FORCE
 | 
					%.o: %.c FORCE
 | 
				
			||||||
	$(call if_changed_dep,cc_o_c)
 | 
						$(call if_changed_rule,cc_o_c)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%.o: %.S FORCE
 | 
					%.o: %.S FORCE
 | 
				
			||||||
	$(call if_changed_dep,as_o_S)
 | 
						$(call if_changed_rule,as_o_S)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Built-in dtb
 | 
					# Built-in dtb
 | 
				
			||||||
# ---------------------------------------------------------------------------
 | 
					# ---------------------------------------------------------------------------
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue