All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexandre Chartre <alexandre.chartre@oracle.com>
Subject: [GIT PULL] objtool changes for v6.19
Date: Mon, 1 Dec 2025 11:20:39 +0100	[thread overview]
Message-ID: <aS1r98IsLzX6pTug@gmail.com> (raw)
In-Reply-To: aDLd3_9ofvEyYXb7@gmail.com

Linus,

Please pull the latest objtool/core Git tree from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git objtool-core-2025-12-01

   # HEAD: 6ec33db1aaf06a76fb063610e668f8e12f32ebbf objtool: Fix segfault on unknown alternatives

objtool updates for v6.19:

 - klp-build livepatch module generation (Josh Poimboeuf)

   Introduce new objtool features and a klp-build
   script to generate livepatch modules using a
   source .patch as input.

   This builds on concepts from the longstanding out-of-tree
   kpatch project which began in 2012 and has been used for
   many years to generate livepatch modules for production kernels.
   However, this is a complete rewrite which incorporates
   hard-earned lessons from 12+ years of maintaining kpatch.

   Key improvements compared to kpatch-build:

    - Integrated with objtool: Leverages objtool's existing control-flow
      graph analysis to help detect changed functions.

    - Works on vmlinux.o: Supports late-linked objects, making it
      compatible with LTO, IBT, and similar.

    - Simplified code base: ~3k fewer lines of code.

    - Upstream: No more out-of-tree #ifdef hacks, far less cruft.

    - Cleaner internals: Vastly simplified logic for symbol/section/reloc
      inclusion and special section extraction.

    - Robust __LINE__ macro handling: Avoids false positive binary diffs
      caused by the __LINE__ macro by introducing a fix-patch-lines script
      which injects #line directives into the source .patch to preserve
      the original line numbers at compile time.

 - Disassemble code with libopcodes instead of running objdump
   (Alexandre Chartre)

 - Disassemble support (-d option to objtool) by Alexandre Chartre,
   which supports the decoding of various Linux kernel code generation
   specials such as alternatives:

      17ef:  sched_balance_find_dst_group+0x62f                 mov    0x34(%r9),%edx
      17f3:  sched_balance_find_dst_group+0x633               | <alternative.17f3>             | X86_FEATURE_POPCNT
      17f3:  sched_balance_find_dst_group+0x633               | call   0x17f8 <__sw_hweight64> | popcnt %rdi,%rax
      17f8:  sched_balance_find_dst_group+0x638                 cmp    %eax,%edx

   ... jump table alternatives:

      1895:  sched_use_asym_prio+0x5                            test   $0x8,%ch
      1898:  sched_use_asym_prio+0x8                            je     0x18a9 <sched_use_asym_prio+0x19>
      189a:  sched_use_asym_prio+0xa                          | <jump_table.189a>                        | JUMP
      189a:  sched_use_asym_prio+0xa                          | jmp    0x18ae <sched_use_asym_prio+0x1e> | nop2
      189c:  sched_use_asym_prio+0xc                            mov    $0x1,%eax
      18a1:  sched_use_asym_prio+0x11                           and    $0x80,%ecx

   ... exception table alternatives:

    native_read_msr:
      5b80:  native_read_msr+0x0                                                     mov    %edi,%ecx
      5b82:  native_read_msr+0x2                                                   | <ex_table.5b82> | EXCEPTION
      5b82:  native_read_msr+0x2                                                   | rdmsr           | resume at 0x5b84 <native_read_msr+0x4>
      5b84:  native_read_msr+0x4                                                     shl    $0x20,%rdx

   .... x86 feature flag decoding (also see the X86_FEATURE_POPCNT
        example in sched_balance_find_dst_group() above):

      2faaf:  start_thread_common.constprop.0+0x1f                                    jne    0x2fba4 <start_thread_common.constprop.0+0x114>
      2fab5:  start_thread_common.constprop.0+0x25                                  | <alternative.2fab5>                  | X86_FEATURE_ALWAYS                                  | X86_BUG_NULL_SEG
      2fab5:  start_thread_common.constprop.0+0x25                                  | jmp    0x2faba <.altinstr_aux+0x2f4> | jmp    0x4b0 <start_thread_common.constprop.0+0x3f> | nop5
      2faba:  start_thread_common.constprop.0+0x2a                                    mov    $0x2b,%eax

   ... NOP sequence shortening:

      1048e2:  snapshot_write_finalize+0xc2                                            je     0x104917 <snapshot_write_finalize+0xf7>
      1048e4:  snapshot_write_finalize+0xc4                                            nop6
      1048ea:  snapshot_write_finalize+0xca                                            nop11
      1048f5:  snapshot_write_finalize+0xd5                                            nop11
      104900:  snapshot_write_finalize+0xe0                                            mov    %rax,%rcx
      104903:  snapshot_write_finalize+0xe3                                            mov    0x10(%rdx),%rax

   ... and much more.

 - Function validation tracing support (Alexandre Chartre)

 - Various -ffunction-sections fixes (Josh Poimboeuf)

 - Clang AutoFDO (Automated Feedback-Directed Optimizations) support (Josh Poimboeuf)

 - Misc fixes and cleanups (Borislav Petkov, Chen Ni,
   Dylan Hatch, Ingo Molnar, John Wang, Josh Poimboeuf,
   Pankaj Raghav, Peter Zijlstra, Thorsten Blum)

 Thanks,

	Ingo

------------------>
Alexandre Chartre (31):
      objtool: Move disassembly functions to a separated file
      objtool: Create disassembly context
      objtool: Disassemble code with libopcodes instead of running objdump
      tool build: Remove annoying newline in build output
      objtool: Print symbol during disassembly
      objtool: Store instruction disassembly result
      objtool: Disassemble instruction on warning or backtrace
      objtool: Extract code to validate instruction from the validate branch loop
      objtool: Record symbol name max length
      objtool: Add option to trace function validation
      objtool: Trace instruction state changes during function validation
      objtool: Improve register reporting during function validation
      objtool: Identify the different types of alternatives
      objtool: Add functions to better name alternatives
      objtool: Improve tracing of alternative instructions
      objtool: Do not validate IBT for .return_sites and .call_sites
      objtool: Add the --disas=<function-pattern> action
      objtool: Preserve alternatives order
      objtool: Print headers for alternatives
      objtool: Disassemble group alternatives
      objtool: Print addresses with alternative instructions
      objtool: Disassemble exception table alternatives
      objtool: Disassemble jump table alternatives
      objtool: Fix address references in alternatives
      objtool: Provide access to feature and flags of group alternatives
      objtool: Add Function to get the name of a CPU feature
      objtool: Improve naming of group alternatives
      objtool: Compact output for alternatives with one instruction
      objtool: Add wide output for disassembly
      objtool: Trim trailing NOPs in alternative
      objtool: Build with disassembly can fail when including bdf.h

Borislav Petkov (AMD) (2):
      objtool/klp: Add the debian-based package name of xxhash to the hint
      tools/objtool: Copy the __cleanup unused variable fix for older clang

Chen Ni (2):
      objtool: Remove unneeded semicolon
      objtool: Remove unneeded semicolon

Dylan Hatch (1):
      objtool: Fix standalone --hacks=jump_label

Ingo Molnar (1):
      objtool: Fix segfault on unknown alternatives

John Wang (1):
      scripts/faddr2line: Set LANG=C to enforce ASCII output

Josh Poimboeuf (85):
      tools build: Fix fixdep dependencies
      s390/vmlinux.lds.S: Prevent thunk functions from getting placed with normal text
      vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related macros
      x86/module: Improve relocation error messages
      x86/kprobes: Remove STACK_FRAME_NON_STANDARD annotation
      compiler: Tweak __UNIQUE_ID() naming
      compiler.h: Make addressable symbols less of an eyesore
      elfnote: Change ELFNOTE() to use __UNIQUE_ID()
      kbuild: Remove 'kmod_' prefix from __KBUILD_MODNAME
      modpost: Ignore unresolved section bounds symbols
      x86/alternative: Refactor INT3 call emulation selftest
      interval_tree: Sync interval_tree_generic.h with tools
      interval_tree: Fix ITSTATIC usage for *_subtree_search()
      objtool: Make find_symbol_containing() less arbitrary
      objtool: Fix broken error handling in read_symbols()
      objtool: Propagate elf_truncate_section() error in elf_write()
      objtool: Remove error handling boilerplate
      objtool: Add empty symbols to the symbol tree again
      objtool: Fix interval tree insertion for zero-length symbols
      objtool: Fix weak symbol detection
      objtool: Fix x86 addend calculation
      objtool: Fix __pa_symbol() relocation handling
      objtool: Fix "unexpected end of section" warning for alternatives
      objtool: Check for missing annotation entries in read_annotate()
      objtool: Const string cleanup
      objtool: Clean up compiler flag usage
      objtool: Remove .parainstructions reference
      objtool: Convert elf iterator macros to use 'struct elf'
      objtool: Add section/symbol type helpers
      objtool: Mark .cold subfunctions
      objtool: Fix weak symbol hole detection for .cold functions
      objtool: Mark prefix functions
      objtool: Simplify reloc offset calculation in unwind_read_hints()
      objtool: Avoid emptying lists for duplicate sections
      objtool: Rename --Werror to --werror
      objtool: Resurrect --backup option
      objtool: Reindent check_options[]
      objtool: Refactor add_jump_destinations()
      objtool: Simplify special symbol handling in elf_update_symbol()
      objtool: Generalize elf_create_symbol()
      objtool: Generalize elf_create_section()
      objtool: Add elf_create_data()
      objtool: Add elf_create_reloc() and elf_init_reloc()
      objtool: Add elf_create_file()
      objtool: Add annotype() helper
      objtool: Move ANNOTATE* macros to annotate.h
      objtool: Add ANNOTATE_DATA_SPECIAL
      x86/asm: Annotate special section entries
      objtool: Unify STACK_FRAME_NON_STANDARD entry sizes
      objtool/klp: Add --checksum option to generate per-function checksums
      objtool/klp: Add --debug-checksum=<funcs> to show per-instruction checksums
      objtool/klp: Introduce klp diff subcommand for diffing object files
      objtool/klp: Add --debug option to show cloning decisions
      objtool/klp: Add post-link subcommand to finalize livepatch modules
      objtool: Refactor prefix symbol creation code
      objtool: Add base objtool support for livepatch modules
      livepatch: Add CONFIG_KLP_BUILD
      kbuild,objtool: Defer objtool validation step for CONFIG_KLP_BUILD
      livepatch/klp-build: Introduce fix-patch-lines script to avoid __LINE__ diff noise
      livepatch/klp-build: Add stub init code for livepatch modules
      livepatch/klp-build: Introduce klp-build script for generating livepatch modules
      livepatch/klp-build: Add --debug option to show cloning decisions
      livepatch/klp-build: Add --show-first-changed option to show function divergence
      livepatch: Introduce source code helpers for livepatch modules
      module: Fix device table module aliases
      perf build: Fix perf build issues with fixdep
      vmlinux.lds: Exclude .text.startup and .text.exit from TEXT_MAIN
      vmlinux.lds: Fix TEXT_MAIN to include .text.start and friends
      media: atomisp: Fix namespace collision and startup() section placement with -ffunction-sections
      drivers/xen/xenbus: Fix namespace collision and split() section placement with AutoFDO
      objtool: Warn on functions with ambiguous -ffunction-sections section names
      objtool: Set minimum xxhash version to 0.8
      objtool/klp: Only enable --checksum when needed
      objtool: Support Clang AUTOFDO .cold functions
      objtool: Fix .cold function detection for duplicate symbols
      objtool: Don't alias undefined symbols
      objtool: Return canonical symbol when aliases exist in symbol finding helpers
      objtool: Skip non-canonical aliased symbols in add_jump_table_alts()
      objtool: Remove second pass of .cold function correlation
      serial: icom: Fix namespace collision and startup() section placement with -ffunction-sections
      media: atomisp: gc2235: Fix namespace collision and startup() section placement with -ffunction-sections
      tty: amiserial: Fix namespace collision and startup() section placement with -ffunction-sections
      tty: synclink_gt: Fix namespace collision and startup() section placement with -ffunction-sections
      kbuild: Check for functions with ambiguous -ffunction-sections section names
      Revert "objtool: Warn on functions with ambiguous -ffunction-sections section names"

Pankaj Raghav (2):
      scripts/faddr2line: Use /usr/bin/env bash for portability
      scripts/faddr2line: Fix "Argument list too long" error

Peter Zijlstra (3):
      objtool/x86: Remove 0xea hack
      objtool/x86: Add UDB support
      objtool/x86: Fix NOP decode

Thorsten Blum (1):
      x86/smpboot: Mark native_play_dead() as __noreturn


 MAINTAINERS                                        |    3 +-
 arch/s390/include/asm/nospec-insn.h                |    2 +-
 arch/s390/kernel/vmlinux.lds.S                     |    2 +-
 arch/x86/Kconfig                                   |    1 +
 arch/x86/boot/startup/Makefile                     |    2 +-
 arch/x86/include/asm/alternative.h                 |    4 +
 arch/x86/include/asm/asm.h                         |    5 +
 arch/x86/include/asm/bug.h                         |    1 +
 arch/x86/include/asm/cpufeature.h                  |    1 +
 arch/x86/include/asm/jump_label.h                  |    1 +
 arch/x86/include/asm/smp.h                         |    2 +-
 arch/x86/kernel/alternative.c                      |   51 +-
 arch/x86/kernel/kprobes/opt.c                      |    4 -
 arch/x86/kernel/module.c                           |   15 +-
 arch/x86/kernel/smpboot.c                          |    8 +-
 .../infiniband/hw/usnic/usnic_uiom_interval_tree.h |    4 +
 drivers/staging/media/atomisp/i2c/atomisp-gc2235.c |    4 +-
 drivers/staging/media/atomisp/i2c/atomisp-ov2722.c |    6 +-
 drivers/tty/amiserial.c                            |   14 +-
 drivers/tty/serial/icom.c                          |    8 +-
 drivers/tty/synclink_gt.c                          |   20 +-
 drivers/xen/xenbus/xenbus_xs.c                     |    4 +-
 include/asm-generic/vmlinux.lds.h                  |   76 +-
 include/linux/annotate.h                           |  134 ++
 include/linux/compiler.h                           |    8 +-
 include/linux/elfnote.h                            |   13 +-
 include/linux/init.h                               |    3 +-
 include/linux/interval_tree.h                      |    4 +
 include/linux/interval_tree_generic.h              |    2 +-
 include/linux/livepatch.h                          |   25 +-
 include/linux/livepatch_external.h                 |   76 +
 include/linux/livepatch_helpers.h                  |   77 +
 include/linux/mm.h                                 |    2 +
 include/linux/module.h                             |    3 +-
 include/linux/objtool.h                            |   96 +-
 include/linux/objtool_types.h                      |    2 +
 kernel/livepatch/Kconfig                           |   12 +
 kernel/livepatch/core.c                            |    8 +-
 lib/interval_tree.c                                |    1 +
 scripts/Makefile.lib                               |    6 +-
 scripts/Makefile.vmlinux_o                         |    6 +-
 scripts/check-function-names.sh                    |   25 +
 scripts/faddr2line                                 |   19 +-
 scripts/link-vmlinux.sh                            |    3 +-
 scripts/livepatch/fix-patch-lines                  |   79 +
 scripts/livepatch/init.c                           |  108 ++
 scripts/livepatch/klp-build                        |  831 ++++++++++
 scripts/mod/modpost.c                              |    5 +
 scripts/module.lds.S                               |   22 +-
 tools/arch/x86/tools/gen-cpu-feature-names-x86.awk |   34 +
 tools/build/Build                                  |    2 +
 tools/build/Makefile                               |   21 +-
 tools/build/Makefile.feature                       |    4 +-
 tools/include/linux/interval_tree_generic.h        |   10 +-
 tools/include/linux/livepatch_external.h           |   76 +
 tools/include/linux/objtool_types.h                |    2 +
 tools/include/linux/string.h                       |   14 +
 tools/objtool/.gitignore                           |    3 +
 tools/objtool/Build                                |    7 +-
 tools/objtool/Makefile                             |   70 +-
 tools/objtool/arch/loongarch/decode.c              |   29 +-
 tools/objtool/arch/loongarch/orc.c                 |    1 -
 tools/objtool/arch/loongarch/special.c             |    5 +
 tools/objtool/arch/powerpc/decode.c                |   31 +-
 tools/objtool/arch/powerpc/special.c               |    5 +
 tools/objtool/arch/x86/Build                       |   13 +-
 tools/objtool/arch/x86/decode.c                    |  111 +-
 tools/objtool/arch/x86/orc.c                       |    1 -
 tools/objtool/arch/x86/special.c                   |   12 +-
 tools/objtool/builtin-check.c                      |  102 +-
 tools/objtool/builtin-klp.c                        |   53 +
 tools/objtool/check.c                              | 1482 +++++++++--------
 tools/objtool/disas.c                              | 1248 ++++++++++++++
 tools/objtool/elf.c                                |  822 +++++++---
 tools/objtool/include/objtool/arch.h               |   16 +-
 tools/objtool/include/objtool/builtin.h            |   14 +-
 tools/objtool/include/objtool/check.h              |   39 +-
 tools/objtool/include/objtool/checksum.h           |   43 +
 tools/objtool/include/objtool/checksum_types.h     |   25 +
 tools/objtool/include/objtool/disas.h              |   81 +
 tools/objtool/include/objtool/elf.h                |  198 ++-
 tools/objtool/include/objtool/endianness.h         |    9 +-
 tools/objtool/include/objtool/klp.h                |   35 +
 tools/objtool/include/objtool/objtool.h            |    4 +-
 tools/objtool/include/objtool/special.h            |    4 +-
 tools/objtool/include/objtool/trace.h              |  141 ++
 tools/objtool/include/objtool/util.h               |   19 +
 tools/objtool/include/objtool/warn.h               |   66 +-
 tools/objtool/klp-diff.c                           | 1723 ++++++++++++++++++++
 tools/objtool/klp-post-link.c                      |  168 ++
 tools/objtool/noreturns.h                          |    1 +
 tools/objtool/objtool.c                            |   42 +-
 tools/objtool/orc_dump.c                           |    1 -
 tools/objtool/orc_gen.c                            |    9 +-
 tools/objtool/special.c                            |   16 +-
 tools/objtool/sync-check.sh                        |    2 +
 tools/objtool/trace.c                              |  203 +++
 tools/objtool/weak.c                               |    7 +
 tools/perf/Makefile.perf                           |    6 +-
 99 files changed, 7592 insertions(+), 1246 deletions(-)
 create mode 100644 include/linux/annotate.h
 create mode 100644 include/linux/livepatch_external.h
 create mode 100644 include/linux/livepatch_helpers.h
 create mode 100755 scripts/check-function-names.sh
 create mode 100755 scripts/livepatch/fix-patch-lines
 create mode 100644 scripts/livepatch/init.c
 create mode 100755 scripts/livepatch/klp-build
 create mode 100644 tools/arch/x86/tools/gen-cpu-feature-names-x86.awk
 create mode 100644 tools/build/Build
 create mode 100644 tools/include/linux/livepatch_external.h
 create mode 100644 tools/objtool/builtin-klp.c
 create mode 100644 tools/objtool/disas.c
 create mode 100644 tools/objtool/include/objtool/checksum.h
 create mode 100644 tools/objtool/include/objtool/checksum_types.h
 create mode 100644 tools/objtool/include/objtool/disas.h
 create mode 100644 tools/objtool/include/objtool/klp.h
 create mode 100644 tools/objtool/include/objtool/trace.h
 create mode 100644 tools/objtool/include/objtool/util.h
 create mode 100644 tools/objtool/klp-diff.c
 create mode 100644 tools/objtool/klp-post-link.c
 create mode 100644 tools/objtool/trace.c

  parent reply	other threads:[~2025-12-01 10:20 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-25  9:07 [GIT PULL] objtool changes for v6.16 Ingo Molnar
2025-05-26 22:59 ` pr-tracker-bot
2025-12-01 10:20 ` Ingo Molnar [this message]
2025-12-02  5:54   ` [GIT PULL] objtool changes for v6.19 pr-tracker-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aS1r98IsLzX6pTug@gmail.com \
    --to=mingo@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=alexandre.chartre@oracle.com \
    --cc=bp@alien8.de \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.