mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	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
	
	 Masahiro Yamada
						Masahiro Yamada