[PATCH 00/48] objtool/klp: Some klp-build fixes and improvements

Josh Poimboeuf
2026-04-23T04:04:23Z

While working on the (upcoming) arm64 support, I ended up shaking out a
lot of bugs by tested several patches on a variety of configs (distro,
LTO, FineIBT, kCFI, etc).

While arm64 support seems to be working well, I decided to leave those
patches out of this set to try to keep the number of patches
"reasonable".

And these stand alone as nice improvements for x86 anyway.

Full arm64 support (this set + 19 more) can be found here:

git://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git klp-build-arm64

Joe Lawrence (2):
objtool/klp: Fix is_uncorrelated_static_local() for Clang
objtool/klp: Fix create_fake_symbols() skipping entsize-based sections

Josh Poimboeuf (46):
objtool/klp: Fix .data..once static local non-correlation
objtool/klp: Don't correlate __ADDRESSABLE() symbols
objtool/klp: Ignore __UNIQUE_ID_*() PCI stub functions
objtool: Move mark_rodata() to elf.c
objtool/klp: Don't correlate rodata symbols
objtool/klp: Don't correlate absolute symbols
objtool/klp: Don't correlate __initstub__ symbols
objtool/klp: Fix --debug-checksum for duplicate symbol names
objtool/klp: Fix handling of zero-length .altinstr_replacement
sections
objtool/klp: Fix cloning of zero-length section symbols
objtool/klp: Fix XXH3 state memory leak
objtool/klp: Fix extraction of text annotations for alternatives
objtool/klp: Fix kCFI trap handling
objtool/klp: Fix relocation conversion failures for R_X86_64_NONE
objtool: Fix reloc hash collision in find_reloc_by_dest_range()
klp-build: Fix hang on out-of-date .config
klp-build: Fix checksum comparison for changed offsets
klp-build: Don't use errexit
klp-build: Validate patch file existence
klp-build: Suppress excessive fuzz output by default
klp-build: Fix patch cleanup on interrupt
klp-build: Reject patches to vDSO
klp-build: Reject patches to realmode
objtool/klp: Don't set sym->file for section symbols
objtool: Include libsubcmd headers directly from source tree
objtool/klp: Create empty checksum sections for function-less object
files
klp-build: Print "objtool klp diff" command in verbose mode
objtool/klp: Handle Clang .data..Lanon anonymous data sections
objtool: Add is_alias_sym() helper
objtool: Add is_cold_func() helper
objtool/klp: Extricate checksum calculation from validate_branch()
objtool: Consolidate file decoding into decode_file()
objtool/klp: Add "objtool klp checksum" subcommand
klp-build: Use "objtool klp checksum" subcommand
objtool/klp: Remove "objtool --checksum"
klp-build: Validate short-circuit prerequisites
objtool: Replace iterator callbacks with for_each_sym_by_*()
objtool/klp: Calculate object checksums
objtool/klp: Rewrite symbol correlation algorithm
objtool/klp: Add correlation debugging output
objtool: Add insn_sym() helper
objtool/klp: Fix position-dependent checksums for non-relocated
jumps/calls
x86/Kconfig: Enable CONFIG_PREFIX_SYMBOLS for FineIBT
objtool/klp: Make function prefix handling more generic
objtool: Improve and simplify prefix symbol detection
objtool/klp: Cache dont_correlate() result

arch/x86/Kconfig | 2 +-
scripts/livepatch/klp-build | 183 +++--
tools/objtool/Build | 2 +-
tools/objtool/Makefile | 4 +-
tools/objtool/arch/x86/decode.c | 17 +-
tools/objtool/builtin-check.c | 17 +-
tools/objtool/builtin-klp.c | 1 +
tools/objtool/check.c | 363 ++--------
tools/objtool/disas.c | 22 +-
tools/objtool/elf.c | 96 +--
tools/objtool/include/objtool/arch.h | 3 +
tools/objtool/include/objtool/check.h | 33 +-
tools/objtool/include/objtool/checksum.h | 52 +-
tools/objtool/include/objtool/elf.h | 69 +-
tools/objtool/include/objtool/klp.h | 1 +
tools/objtool/include/objtool/warn.h | 57 +-
tools/objtool/klp-checksum.c | 346 +++++++++
tools/objtool/klp-diff.c | 861 +++++++++++++++++------
tools/objtool/objtool.c | 3 -
tools/objtool/trace.c | 8 +-
20 files changed, 1431 insertions(+), 709 deletions(-)
create mode 100644 tools/objtool/klp-checksum.c

--
2.53.0