mirror of
https://github.com/torvalds/linux.git
synced 2026-01-24 23:16:46 +00:00
kbuild: fix Clang LTO with CONFIG_OBJTOOL=n
Since commitbede169618("kbuild: enable objtool for *.mod.o and additional kernel objects"), Clang LTO builds do not perform any optimizations when CONFIG_OBJTOOL is disabled (e.g., for ARCH=arm64). This is because every LLVM bitcode file is immediately converted to ELF format before the object files are linked together. This commit fixes the breakage. Fixes:bede169618("kbuild: enable objtool for *.mod.o and additional kernel objects") Reported-by: Yonghong Song <yonghong.song@linux.dev> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Tested-by: Yonghong Song <yonghong.song@linux.dev>
This commit is contained in:
@@ -287,6 +287,8 @@ delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT))
|
||||
cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool-args) $@)
|
||||
cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
|
||||
|
||||
objtool-enabled := y
|
||||
|
||||
endif # CONFIG_OBJTOOL
|
||||
|
||||
# Useful for describing the dependency of composite objects
|
||||
@@ -302,11 +304,11 @@ 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) $@)
|
||||
# Run $(LD) here to covert LLVM IR to ELF in the following cases:
|
||||
# - when this object needs objtool processing, as objtool cannot process LLVM IR
|
||||
# - when this is a single-object module, as modpost cannot process LLVM IR
|
||||
cmd_ld_single = $(if $(objtool-enabled)$(is-single-obj-m), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
|
||||
endif
|
||||
|
||||
quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
|
||||
|
||||
Reference in New Issue
Block a user