On Wed, May 28, 2025 at 10:45:22AM -0400, Joe Lawrence wrote: > > - if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT; then > > + if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT || > > + is_enabled CONFIG_LIVEPATCH; then > > # Use vmlinux.o instead of performing the slow LTO link again. > > objs=vmlinux.o > > libs= > > At this commit, I'm getting the following linker error on ppc64le: > > ld -EL -m elf64lppc -z noexecstack --no-warn-rwx-segments -pie -z notext > --build-id=sha1 -X --orphan-handling=error > --script=./arch/powerpc/kernel/vmlinux.lds -o .tmp_vmlinux1 > --whole-archive vmlinux.o .vmlinux.export.o init/version-timestamp.o > --no-whole-archive --start-group --end-group .tmp_vmlinux0.kallsyms.o > arch/powerpc/tools/vmlinux.arch.o > > vmlinux.o:(__ftr_alt_97+0x20): relocation truncated to fit: > R_PPC64_REL14 against `.text'+4b54 > vmlinux.o:(__ftr_alt_97+0x270): relocation truncated to fit: > R_PPC64_REL14 against `.text'+173ecc
Looks like objtool is causing the the __ftr_alt_* sections to get placed far away from .text somehow. I guess objtool-on-vmlinux isn't quite ready for primetime on powerpc. Though my next TODO is to get all this working there. Until then, here's the fix: diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 996d59e59e5d..23269e8ee906 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -265,6 +265,7 @@ config X86 select HAVE_FUNCTION_ERROR_INJECTION select HAVE_KRETPROBES select HAVE_RETHOOK + select HAVE_KLP_BUILD if X86_64 select HAVE_LIVEPATCH if X86_64 select HAVE_MIXED_BREAKPOINTS_REGS select HAVE_MOD_ARCH_SPECIFIC diff --git a/kernel/livepatch/Kconfig b/kernel/livepatch/Kconfig index 53d51ed619a3..4c0a9c18d0b2 100644 --- a/kernel/livepatch/Kconfig +++ b/kernel/livepatch/Kconfig @@ -18,3 +18,15 @@ config LIVEPATCH module uses the interface provided by this option to register a patch, causing calls to patched functions to be redirected to new function code contained in the patch module. + +config HAVE_KLP_BUILD + bool + help + Arch supports klp-build + +config KLP_BUILD + def_bool y + depends on LIVEPATCH && HAVE_KLP_BUILD + select OBJTOOL + help + Enable klp-build support diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index a68390ff5cd9..d9426fd4ab33 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -278,7 +278,7 @@ objtool-args = $(objtool-args-y) \ $(if $(delay-objtool), --link) \ $(if $(part-of-module), --module) -delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT),$(CONFIG_LIVEPATCH)) +delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT),$(CONFIG_KLP_BUILD)) cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool-args) $@) cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index acffa3c935f2..59f875236292 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -61,7 +61,7 @@ vmlinux_link() shift if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT || - is_enabled CONFIG_LIVEPATCH; then + is_enabled CONFIG_KLP_BUILD; then # Use vmlinux.o instead of performing the slow LTO link again. objs=vmlinux.o libs=